Deleted Added
full compact
perform.c (379) perform.c (382)
1#ifndef lint
2static const char *rcsid = "$Id: perform.c,v 1.8 1993/09/04 05:06:29 jkh Exp $";
3#endif
4
5/*
6 * FreeBSD install - a package for the installation and maintainance
7 * of non-core utilities.
8 *

--- 27 unchanged lines hidden (view full) ---

36int
37pkg_perform(char **pkgs)
38{
39 int i, err_cnt = 0;
40
41 signal(SIGINT, cleanup);
42 signal(SIGHUP, cleanup);
43
1#ifndef lint
2static const char *rcsid = "$Id: perform.c,v 1.8 1993/09/04 05:06:29 jkh Exp $";
3#endif
4
5/*
6 * FreeBSD install - a package for the installation and maintainance
7 * of non-core utilities.
8 *

--- 27 unchanged lines hidden (view full) ---

36int
37pkg_perform(char **pkgs)
38{
39 int i, err_cnt = 0;
40
41 signal(SIGINT, cleanup);
42 signal(SIGHUP, cleanup);
43
44 for (i = 0; pkgs[i]; i++)
45 err_cnt += pkg_do(pkgs[i]);
44 if (AddMode == SLAVE)
45 err_cnt = pkg_do(NULL);
46 else {
47 for (i = 0; pkgs[i]; i++)
48 err_cnt += pkg_do(pkgs[i]);
49 }
46 return err_cnt;
47}
48
49static Package Plist;
50
51/* This is seriously ugly code following. Written very fast! */
52static int
53pkg_do(char *pkg)
54{
55 char pkg_fullname[FILENAME_MAX];
56 FILE *cfile;
57 char *home;
58 int code = 0;
59
60 /* Reset some state */
61 if (Plist.head)
62 free_plist(&Plist);
63 LogDir[0] = '\0';
50 return err_cnt;
51}
52
53static Package Plist;
54
55/* This is seriously ugly code following. Written very fast! */
56static int
57pkg_do(char *pkg)
58{
59 char pkg_fullname[FILENAME_MAX];
60 FILE *cfile;
61 char *home;
62 int code = 0;
63
64 /* Reset some state */
65 if (Plist.head)
66 free_plist(&Plist);
67 LogDir[0] = '\0';
64 home = make_playpen();
65 if (pkg[0] == '/') /* full pathname? */
66 strcpy(pkg_fullname, pkg);
67 else
68 sprintf(pkg_fullname, "%s/%s", home, pkg);
69 if (!fexists(pkg_fullname)) {
70 whinge("Can't open package '%s'.", pkg_fullname);
71 return 1;
68 if (AddMode == SLAVE) {
69 char tmp_dir[FILENAME_MAX];
70
71 fgets(tmp_dir, FILENAME_MAX, stdin);
72 tmp_dir[strlen(tmp_dir) - 1] = '\0'; /* pesky newline! */
73 if (chdir(tmp_dir) == FAIL) {
74 whinge("pkg_add in SLAVE mode can't chdir to %s.", tmp_dir);
75 return 1;
76 }
77 read_plist(&Plist, stdin);
72 }
78 }
79 else {
80 home = make_playpen(PlayPen);
81 if (pkg[0] == '/') /* full pathname? */
82 strcpy(pkg_fullname, pkg);
83 else
84 sprintf(pkg_fullname, "%s/%s", home, pkg);
85 if (!fexists(pkg_fullname)) {
86 whinge("Can't open package '%s'.", pkg_fullname);
87 return 1;
88 }
73
89
74 if (unpack(pkg_fullname, NULL))
75 return 1;
90 if (unpack(pkg_fullname, NULL))
91 return 1;
76
92
77 if (sanity_check(pkg_fullname))
78 return 1;
93 if (sanity_check(pkg_fullname))
94 return 1;
79
95
80 cfile = fopen(CONTENTS_FNAME, "r");
81 if (!cfile) {
82 whinge("Unable to open %s file.", CONTENTS_FNAME);
83 goto fail;
96 cfile = fopen(CONTENTS_FNAME, "r");
97 if (!cfile) {
98 whinge("Unable to open %s file.", CONTENTS_FNAME);
99 goto fail;
100 }
101 read_plist(&Plist, cfile);
102 fclose(cfile);
103 if (Prefix) {
104 /*
105 * If we have a prefix, delete the first one we see and add this
106 * one in place of it.
107 */
108 delete_plist(&Plist, FALSE, PLIST_CWD, NULL);
109 add_plist_top(&Plist, PLIST_CWD, Prefix);
110 }
111 /* Just to be safe - overridden if package has made a choice */
112 else
113 add_plist_top(&Plist, PLIST_CWD, home);
114 /* If we're running in MASTER mode, just output the plist and return */
115 if (AddMode == MASTER) {
116 printf("%s\n", where_playpen());
117 write_plist(&Plist, stdout);
118 return;
119 }
84 }
120 }
85 /* If we have a prefix, add it now */
86 if (Prefix)
87 add_plist(&Plist, PLIST_CWD, Prefix);
88 else
89 add_plist(&Plist, PLIST_CWD, home);
90 read_plist(&Plist, cfile);
91 fclose(cfile);
92 PkgName = find_name(&Plist);
93 if (fexists(REQUIRE_FNAME)) {
94 vsystem("chmod +x %s", REQUIRE_FNAME); /* be sure */
95 if (Verbose)
96 printf("Running requirements file first for %s..\n", PkgName);
121 PkgName = find_name(&Plist);
122 if (fexists(REQUIRE_FNAME)) {
123 vsystem("chmod +x %s", REQUIRE_FNAME); /* be sure */
124 if (Verbose)
125 printf("Running requirements file first for %s..\n", PkgName);
97 if (vsystem("%s %s INSTALL", REQUIRE_FNAME, PkgName)) {
126 if (!Fake && vsystem("%s %s INSTALL", REQUIRE_FNAME, PkgName)) {
98 whinge("Package %s fails requirements - not installed.",
99 pkg_fullname);
100 goto fail;
101 }
102 }
103 if (!NoInstall && fexists(INSTALL_FNAME)) {
104 vsystem("chmod +x %s", INSTALL_FNAME); /* make sure */
105 if (Verbose)
106 printf("Running install with PRE-INSTALL for %s..\n", PkgName);
127 whinge("Package %s fails requirements - not installed.",
128 pkg_fullname);
129 goto fail;
130 }
131 }
132 if (!NoInstall && fexists(INSTALL_FNAME)) {
133 vsystem("chmod +x %s", INSTALL_FNAME); /* make sure */
134 if (Verbose)
135 printf("Running install with PRE-INSTALL for %s..\n", PkgName);
107 if (vsystem("%s %s PRE-INSTALL", INSTALL_FNAME, PkgName)) {
136 if (!Fake && vsystem("%s %s PRE-INSTALL", INSTALL_FNAME, PkgName)) {
108 whinge("Install script returned error status.");
109 goto fail;
110 }
111 }
112 extract_plist(home, &Plist);
113 if (!NoInstall && fexists(INSTALL_FNAME)) {
114 if (Verbose)
115 printf("Running install with POST-INSTALL for %s..\n", PkgName);
137 whinge("Install script returned error status.");
138 goto fail;
139 }
140 }
141 extract_plist(home, &Plist);
142 if (!NoInstall && fexists(INSTALL_FNAME)) {
143 if (Verbose)
144 printf("Running install with POST-INSTALL for %s..\n", PkgName);
116 if (vsystem("%s %s POST-INSTALL", INSTALL_FNAME, PkgName)) {
145 if (!Fake && vsystem("%s %s POST-INSTALL", INSTALL_FNAME, PkgName)) {
117 whinge("Install script returned error status.");
118 goto fail;
119 }
120 }
121 if (!NoRecord && !Fake) {
146 whinge("Install script returned error status.");
147 goto fail;
148 }
149 }
150 if (!NoRecord && !Fake) {
151 char contents[FILENAME_MAX];
152 FILE *cfile;
153
122 if (getuid() != 0)
123 whinge("Not running as root - trying to record install anyway.");
124 if (!PkgName) {
125 whinge("No package name! Can't record package, sorry.");
126 code = 1;
127 goto success; /* well, partial anyway */
128 }
129 sprintf(LogDir, "%s/%s", LOG_DIR, PkgName);

--- 5 unchanged lines hidden (view full) ---

135 bzero(LogDir, FILENAME_MAX);
136 code = 1;
137 goto success; /* close enough for government work */
138 }
139 if (fexists(DEINSTALL_FNAME))
140 copy_file(".", DEINSTALL_FNAME, LogDir);
141 if (fexists(REQUIRE_FNAME))
142 copy_file(".", REQUIRE_FNAME, LogDir);
154 if (getuid() != 0)
155 whinge("Not running as root - trying to record install anyway.");
156 if (!PkgName) {
157 whinge("No package name! Can't record package, sorry.");
158 code = 1;
159 goto success; /* well, partial anyway */
160 }
161 sprintf(LogDir, "%s/%s", LOG_DIR, PkgName);

--- 5 unchanged lines hidden (view full) ---

167 bzero(LogDir, FILENAME_MAX);
168 code = 1;
169 goto success; /* close enough for government work */
170 }
171 if (fexists(DEINSTALL_FNAME))
172 copy_file(".", DEINSTALL_FNAME, LogDir);
173 if (fexists(REQUIRE_FNAME))
174 copy_file(".", REQUIRE_FNAME, LogDir);
143 copy_file(".", CONTENTS_FNAME, LogDir);
175 sprintf(contents, "%s/%s", LogDir, CONTENTS_FNAME);
176 cfile = fopen(contents, "w");
177 if (!cfile) {
178 whinge("Can't open new contents file '%s'! Can't register pkg.",
179 contents);
180 goto success; /* can't log, but still keep pkg */
181 }
182 write_plist(&Plist, cfile);
183 fclose(cfile);
144 copy_file(".", DESC_FNAME, LogDir);
145 copy_file(".", COMMENT_FNAME, LogDir);
146 if (Verbose)
147 printf("Package %s registered in %s\n", PkgName, LogDir);
148 }
149 goto success;
150
151 fail:

--- 37 unchanged lines hidden (view full) ---

189 p = p->next;
190 }
191 return "anonymous";
192}
193
194void
195cleanup(int signo)
196{
184 copy_file(".", DESC_FNAME, LogDir);
185 copy_file(".", COMMENT_FNAME, LogDir);
186 if (Verbose)
187 printf("Package %s registered in %s\n", PkgName, LogDir);
188 }
189 goto success;
190
191 fail:

--- 37 unchanged lines hidden (view full) ---

229 p = p->next;
230 }
231 return "anonymous";
232}
233
234void
235cleanup(int signo)
236{
237 if (signo)
238 printf("Signal %d received, cleaning up..\n", signo);
197 if (Plist.head) {
198 if (!Fake)
199 delete_package(FALSE, &Plist);
200 free_plist(&Plist);
201 }
202 if (!Fake && LogDir[0])
203 vsystem("%s -rf %s", REMOVE_CMD, LogDir);
204 leave_playpen();
205}
239 if (Plist.head) {
240 if (!Fake)
241 delete_package(FALSE, &Plist);
242 free_plist(&Plist);
243 }
244 if (!Fake && LogDir[0])
245 vsystem("%s -rf %s", REMOVE_CMD, LogDir);
246 leave_playpen();
247}