aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/pkg_install/lib
diff options
context:
space:
mode:
authorJordan K. Hubbard <jkh@FreeBSD.org>1997-07-01 06:13:51 +0000
committerJordan K. Hubbard <jkh@FreeBSD.org>1997-07-01 06:13:51 +0000
commit55f4e300b4732b159aa3ba66cd55da83007037d8 (patch)
tree0cc0e0f80093897aed879fe8fe7163dd0e91818c /usr.sbin/pkg_install/lib
parent66e39adc7cfc0f5a6e71b84a44956dddc3cb1e5a (diff)
Notes
Diffstat (limited to 'usr.sbin/pkg_install/lib')
-rw-r--r--usr.sbin/pkg_install/lib/file.c44
-rw-r--r--usr.sbin/pkg_install/lib/plist.c11
2 files changed, 43 insertions, 12 deletions
diff --git a/usr.sbin/pkg_install/lib/file.c b/usr.sbin/pkg_install/lib/file.c
index 6a2e74610673..2748235a6d85 100644
--- a/usr.sbin/pkg_install/lib/file.c
+++ b/usr.sbin/pkg_install/lib/file.c
@@ -1,5 +1,5 @@
#ifndef lint
-static const char *rcsid = "$Id$";
+static const char *rcsid = "$Id: file.c,v 1.27 1997/02/22 16:09:47 peter Exp $";
#endif
/*
@@ -338,6 +338,40 @@ fileGetContents(char *fname)
return contents;
}
+/* Takes a filename and package name, returning (in "try") the canonical "preserve"
+ * name for it.
+ */
+Boolean
+make_preserve_name(char *try, int max, char *name, char *file)
+{
+ int len, i;
+
+ if ((len = strlen(file)) == 0)
+ return FALSE;
+ else
+ i = len - 1;
+ strncpy(try, file, max);
+ if (try[i] == '/') /* Catch trailing slash early and save checking in the loop */
+ --i;
+ for (; i; i--) {
+ if (try[i] == '/') {
+ try[i + 1]= '.';
+ strncpy(&try[i + 2], &file[i + 1], max - i - 2);
+ break;
+ }
+ }
+ if (!i) {
+ try[0] = '.';
+ strncpy(try + 1, file, max - 1);
+ }
+ /* I should probably be called rude names for these inline assignments */
+ strncat(try, ".", max -= strlen(try));
+ strncat(try, name, max -= strlen(name));
+ strncat(try, ".", max--);
+ strncat(try, "backup", max -= 6);
+ return TRUE;
+}
+
/* Write the contents of "str" to a file */
void
write_file(char *name, char *str)
@@ -347,7 +381,7 @@ write_file(char *name, char *str)
fp = fopen(name, "w");
if (!fp)
- barf("Can't fopen '%s' for writing.", name);
+ barf("Cannot fopen '%s' for writing.", name);
len = strlen(str);
if (fwrite(str, 1, len, fp) != len)
barf("Short fwrite on '%s', tried to write %d bytes.", name, len);
@@ -365,7 +399,7 @@ copy_file(char *dir, char *fname, char *to)
else
snprintf(cmd, FILENAME_MAX, "cp -p -r %s/%s %s", dir, fname, to);
if (vsystem(cmd))
- barf("Couldn't perform '%s'", cmd);
+ barf("Could not perform '%s'", cmd);
}
void
@@ -378,7 +412,7 @@ move_file(char *dir, char *fname, char *to)
else
snprintf(cmd, FILENAME_MAX, "mv %s/%s %s", dir, fname, to);
if (vsystem(cmd))
- barf("Couldn't perform '%s'", cmd);
+ barf("Could not perform '%s'", cmd);
}
/*
@@ -408,7 +442,7 @@ copy_hierarchy(char *dir, char *fname, Boolean to)
printf("Using '%s' to copy trees.\n", cmd);
#endif
if (system(cmd))
- barf("copy_file: Couldn't perform '%s'", cmd);
+ barf("copy_file: Could not perform '%s'", cmd);
}
/* Unpack a tar file */
diff --git a/usr.sbin/pkg_install/lib/plist.c b/usr.sbin/pkg_install/lib/plist.c
index 8440e3cdb4de..58907b33f0a0 100644
--- a/usr.sbin/pkg_install/lib/plist.c
+++ b/usr.sbin/pkg_install/lib/plist.c
@@ -1,5 +1,5 @@
#ifndef lint
-static const char *rcsid = "$Id: plist.c,v 1.20 1997/06/29 10:41:49 jkh Exp $";
+static const char *rcsid = "$Id: plist.c,v 1.21 1997/06/30 03:15:40 jkh Exp $";
#endif
/*
@@ -414,13 +414,10 @@ delete_package(Boolean ign_err, Boolean nukedirs, Package *pkg)
whinge("Unable to completely remove file '%s'", tmp);
fail = FAIL;
}
- if (preserve) {
- if (!name)
- whinge("preserve set but no package name supplied!");
- else {
- char tmp2[FILENAME_MAX];
+ if (preserve && name) {
+ char tmp2[FILENAME_MAX];
- snprintf(tmp2, FILENAME_MAX, "%s.%s", tmp, name);
+ if (make_preserve_name(tmp2, FILENAME_MAX, name, tmp)) {
if (fexists(tmp2)) {
if (rename(tmp2, tmp))
whinge("preserve: Unable to restore %s as %s, errno = %d", tmp2, tmp, errno);