Deleted Added
full compact
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]);
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';
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;
72 }
73
74 if (unpack(pkg_fullname, NULL))
75 return 1;
76
77 if (sanity_check(pkg_fullname))
78 return 1;
79
80 cfile = fopen(CONTENTS_FNAME, "r");
81 if (!cfile) {
82 whinge("Unable to open %s file.", CONTENTS_FNAME);
83 goto fail;
84 }
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);
97 if (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);
107 if (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);
116 if (vsystem("%s %s POST-INSTALL", INSTALL_FNAME, PkgName)) {
117 whinge("Install script returned error status.");
118 goto fail;
119 }
120 }
121 if (!NoRecord && !Fake) {
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);
143 copy_file(".", CONTENTS_FNAME, LogDir);
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{
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}