diff options
author | jkh <jkh@FreeBSD.org> | 1993-09-05 04:54:24 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1993-09-05 04:54:24 +0000 |
commit | e9a6985275ef309d1f9f603df83efd30018f94f8 (patch) | |
tree | 5237df764835d2c29873982e973a10aa873c31b3 /usr.sbin/pkg_install/lib | |
parent | 443968adfa831a25c1830da2ba42acd56b84322f (diff) | |
download | FreeBSD-src-e9a6985275ef309d1f9f603df83efd30018f94f8.zip FreeBSD-src-e9a6985275ef309d1f9f603df83efd30018f94f8.tar.gz |
Made staging area configurable rather than assuming /tmp (-t)
Diffstat (limited to 'usr.sbin/pkg_install/lib')
-rw-r--r-- | usr.sbin/pkg_install/lib/file.c | 3 | ||||
-rw-r--r-- | usr.sbin/pkg_install/lib/lib.h | 4 | ||||
-rw-r--r-- | usr.sbin/pkg_install/lib/pen.c | 15 | ||||
-rw-r--r-- | usr.sbin/pkg_install/lib/plist.c | 32 |
4 files changed, 51 insertions, 3 deletions
diff --git a/usr.sbin/pkg_install/lib/file.c b/usr.sbin/pkg_install/lib/file.c index 9c86151..106a535 100644 --- a/usr.sbin/pkg_install/lib/file.c +++ b/usr.sbin/pkg_install/lib/file.c @@ -135,6 +135,9 @@ copy_hierarchy(char *dir, char *fname, Boolean to) } else sprintf(cmd, "tar cf - %s | tar xpf - -C %s", fname, dir); +#ifdef DEBUG + printf("Using '%s' to copy trees.\n", cmd); +#endif if (system(cmd)) barf("copy_file: Couldn't perform '%s'", cmd); } diff --git a/usr.sbin/pkg_install/lib/lib.h b/usr.sbin/pkg_install/lib/lib.h index 8c49933..682687c 100644 --- a/usr.sbin/pkg_install/lib/lib.h +++ b/usr.sbin/pkg_install/lib/lib.h @@ -93,8 +93,9 @@ typedef struct _pack Package; /* Misc */ int vsystem(const char *, ...); void cleanup(int); -char *make_playpen(void); +char *make_playpen(char *); void leave_playpen(void); +char *where_playpen(void); /* String */ char *get_dash_string(char **); @@ -124,6 +125,7 @@ Boolean y_or_n(Boolean, const char *, ...); PackingList new_plist_entry(void); PackingList last_plist(Package *); Boolean in_plist(Package *, plist_t); +void plist_delete(Package *, Boolean, plist_t, char *); void free_plist(Package *); void mark_plist(Package *); void csum_plist_entry(char *, PackingList); diff --git a/usr.sbin/pkg_install/lib/pen.c b/usr.sbin/pkg_install/lib/pen.c index c5eee71..1872d82 100644 --- a/usr.sbin/pkg_install/lib/pen.c +++ b/usr.sbin/pkg_install/lib/pen.c @@ -34,11 +34,13 @@ static char Pen[FILENAME_MAX]; * pathname of previous working directory. */ char * -make_playpen(void) +make_playpen(char *pen) { + if (!pen) + pen = "/tmp/instmp.XXXXXX"; if (!getcwd(Cwd, FILENAME_MAX)) upchuck("getcwd"); - strcpy(Pen, "/tmp/instmp.XXXXXX"); + strcpy(Pen, pen); if (!mktemp(Pen)) barf("Can't mktemp '%s'.", Pen); if (mkdir(Pen, 0755) == FAIL) @@ -61,3 +63,12 @@ leave_playpen(void) } } +/* Accessor function for telling us where the pen is */ +char * +where_playpen(void) +{ + if (Cwd[0]) + return Pen; + else + return NULL; +} diff --git a/usr.sbin/pkg_install/lib/plist.c b/usr.sbin/pkg_install/lib/plist.c index cd8ae24..8e0d2f8 100644 --- a/usr.sbin/pkg_install/lib/plist.c +++ b/usr.sbin/pkg_install/lib/plist.c @@ -94,6 +94,38 @@ in_plist(Package *pkg, plist_t type) return FALSE; } +/* + * Delete plist item 'type' in the list (if 'name' is non-null, match it + * too.) If 'all' is set, delete all items, not just the first occurance. + */ +void +delete_plist(Package *pkg, Boolean all, plist_t type, char *name) +{ + PackingList p = pkg->head; + + while (p) { + PackingList pnext = p->next; + + if (p->type == type && (!name || !strcmp(name, p->name))) { + free(p->name); + if (p->prev) + p->prev->next = pnext; + else + pkg->head = pnext; + if (pnext) + pnext->prev = p->prev; + else + pkg->tail = p->prev; + free(p); + if (!all) + return; + p = pnext; + } + else + p = p->next; + } +} + /* Allocate a new packing list entry */ PackingList new_plist_entry(void) |