summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pkg_install/lib
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1993-09-05 04:54:24 +0000
committerjkh <jkh@FreeBSD.org>1993-09-05 04:54:24 +0000
commite9a6985275ef309d1f9f603df83efd30018f94f8 (patch)
tree5237df764835d2c29873982e973a10aa873c31b3 /usr.sbin/pkg_install/lib
parent443968adfa831a25c1830da2ba42acd56b84322f (diff)
downloadFreeBSD-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.c3
-rw-r--r--usr.sbin/pkg_install/lib/lib.h4
-rw-r--r--usr.sbin/pkg_install/lib/pen.c15
-rw-r--r--usr.sbin/pkg_install/lib/plist.c32
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)
OpenPOWER on IntegriCloud