PERFORCE change 164788 for review
David Forsythe
dforsyth at FreeBSD.org
Sun Jun 21 04:53:20 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=164788
Change 164788 by dforsyth at squirrel on 2009/06/21 04:53:16
Parse NOW takes in dependencies and their origins. Last push was a
dud.
Affected files ...
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#21 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#20 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.c#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.h#3 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_error.h#2 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#13 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#10 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_util.h#7 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.c#16 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.c#9 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_private.h#2 edit
.. //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#14 edit
Differences ...
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#21 (text+ko) ====
@@ -27,7 +27,9 @@
struct pkg_plist plist;
struct pkgdb_sub *sub;
+#if 0
TAILQ_ENTRY(pkg) next;
+#endif
short dirty;
/* Add an owner field? */
};
@@ -58,10 +60,8 @@
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
- if (ident != NULL)
- p->ident = strdup(ident);
- else
- p->ident = NULL;
+ free(p->ident);
+ p->ident = (ident != NULL) ? strdup(ident) : NULL;
return (OK);
}
@@ -76,13 +76,13 @@
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
- p->comment = NULL;
- if (comment != NULL) {
- p->comment = strdup(comment);
- /* Blot out trailing \n */
+ free(p->comment);
+ p->comment = (comment != NULL) ? strdup(comment) : NULL;
+ if (p->comment != NULL) {
+ /* Blot out trailing \n, if it's there. */
c = (int)'\n';
f = strrchr(p->comment, c);
- if (f != NULL)
+ if (f != NULL && *(f + 1) == '\0')
*f = '\0';
}
@@ -99,10 +99,8 @@
/* Yes this makes for 3 copies of the text in memory at once, but just
* until I decide how I want to handle 'dirty' packages. */
- if (contents != NULL)
- p->contents = strdup(contents);
- else
- p->contents = NULL;
+ free(p->contents);
+ p->contents = (contents != NULL) ? strdup(contents) : NULL;
return (OK);
}
@@ -112,12 +110,10 @@
{
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+ free(p->description);
+ p->description = (description != NULL) ? strdup(description) : NULL;
- if (description != NULL)
- p->description = strdup(description);
- else
- p->description = NULL;
-
return (OK);
}
@@ -126,11 +122,9 @@
{
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
-
- if (display != NULL)
- p->display = strdup(display);
- else
- p->display = NULL;
+
+ free(p->display);
+ p->display = (display != NULL) ? strdup(display) : NULL;
return (OK);
}
@@ -140,12 +134,10 @@
{
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+ free(p->mtree_dirs);
+ p->mtree_dirs = (mtree_dirs != NULL) ? strdup(mtree_dirs) : NULL;
- if (mtree_dirs != NULL)
- p->mtree_dirs = strdup(mtree_dirs);
- else
- p->mtree_dirs = NULL;
-
return (OK);
}
@@ -155,10 +147,8 @@
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
- if (required_by != NULL)
- p->required_by = strdup(required_by);
- else
- p->required_by = NULL;
+ free(p->required_by);
+ p->required_by = (required_by != NULL) ? strdup(required_by) : NULL;
return (OK);
}
@@ -177,7 +167,6 @@
}
pkg_plist_reset(&p->plist);
-
status = pkg_plist_parse_contents_from_text(&p->plist, p->contents);
return (status);
@@ -206,6 +195,12 @@
char *
pkg_name(struct pkg *p)
{
+ if (p == NULL)
+ arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+ if (pkg_parse_plist(p) != OK)
+ return (NULL);
+
return (pkg_plist_name(&p->plist));
}
@@ -215,6 +210,8 @@
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+ if (pkg_parse_plist(p) != OK)
+ return (NULL);
return (pkg_plist_cwd(&p->plist));
}
@@ -224,6 +221,8 @@
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+ if (pkg_parse_plist(p) != OK)
+ return (NULL);
return (pkg_plist_origin(&p->plist));
}
@@ -241,14 +240,28 @@
struct pkg_file *
pkg_pkg_file_list_next(struct pkg *p)
{
- struct pkg_file *pf;
+ if (p == NULL)
+ arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+ return (pkg_plist_pkg_file_list_next(&p->plist));
+}
+
+void
+pkg_pkg_dep_list_init(struct pkg *p)
+{
+ if (p == NULL)
+ arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+ return (pkg_plist_pkg_dep_list_reset(&p->plist));
+}
+struct pkg_dep *
+pkg_pkg_dep_list_next(struct pkg *p)
+{
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
- pf = pkg_plist_pkg_file_list_next(&p->plist);
-
- return (pf);
+ return (pkg_plist_pkg_dep_list_next(&p->plist));
}
void
@@ -267,7 +280,7 @@
pkg_plist_reset(&p->plist);
}
-/* TODO: Make an note in the manual for libpkg that pkg_free should not be
+/* TODO: Make an note in the manual for libpkg that pkg_delete should not be
* called on pkgs that are not explicitly created by the client. */
void
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#20 (text+ko) ====
@@ -20,33 +20,38 @@
/* PKGDB Errors. */
#define DB_OK 0x00000000
-#define DB_NOT_OK 0x00000001
-#define DB_BAD_ROOT 0x00000002
-#define DB_NOT_OPEN 0x00000004
-#define DB_OPEN 0x00000008
-#define DB_NO_PKG 0x00000010
+#define DB_NOT_OK 0x10000000
+#define DB_BAD_ROOT 0x20000000
+#define DB_NOT_OPEN 0x40000000
+#define DB_OPEN 0x80000000
+#define DB_NO_PKG 0x01000000
/* These should probably go to _private */
#define SUB_OK 0x00000000
-#define SUB_NO_COMMENT 0x00000001
-#define SUB_NO_CONTENTS 0x00000002
-#define SUB_NO_DESC 0x00000004
-#define SUB_NO_DISPLAY 0x00000008
-#define SUB_NO_MTREE_DIRS 0x00000010
-#define SUB_NO_REQUIRED_BY 0x00000020
-#define SUB_NO_FILE 0x00000040
-#define SUB_EMPTY_FILE 0x00000080
+#define SUB_NO_COMMENT 0x10000000
+#define SUB_NO_CONTENTS 0x20000000
+#define SUB_NO_DESC 0x40000000
+#define SUB_NO_DISPLAY 0x80000000
+#define SUB_NO_MTREE_DIRS 0x01000000
+#define SUB_NO_REQUIRED_BY 0x02000000
+#define SUB_NO_FILE 0x04000000
+#define SUB_EMPTY_FILE 0x08000000
/* PKG Errors. */
#define PKG_OK 0x00000000
-#define PKG_NOT_OK 0x00000001
-#define PKG_PARSE_NOT_OK 0x00000002
-#define PKG_NO_COMMENT 0x00000004
-#define PKG_NO_DESC 0x00000008
-#define PKG_NO_DISPLAY 0x00000010
-#define PKG_NO_MTREE_DIRS 0x00000020
-#define PKG_NO_REQUIRED_BY 0x00000040
+#define PKG_NOT_OK 0x10000000
+#define PKG_PARSE_NOT_OK 0x20000000
+#define PKG_NO_COMMENT 0x40000000
+#define PKG_NO_DESC 0x80000000
+#define PKG_NO_DISPLAY 0x01000000
+#define PKG_NO_MTREE_DIRS 0x02000000
+#define PKG_NO_REQUIRED_BY 0x04000000
+#define PKG_CORRUPT 0x08000000
+
+/* Parse errors. */
+#define PARSE_OK 0x00000000
+#define PARSE_FAIL 0x10000000
/* pkg_file */
@@ -70,6 +75,20 @@
int pkg_file_set_group(struct pkg_file *pf, const char *group);
+/* pkg_dep */
+
+struct pkg_dep;
+
+struct pkg_dep *pkg_dep_new(void);
+
+struct pkg_dep *pkg_dep_set_name(struct pkg_dep *pd, const char *name);
+
+struct pkg_dep *pkg_dep_set_origin(struct pkg_dep *pd, const char *origin);
+
+const char *pkg_dep_name(struct pkg_dep *pd);
+
+const char *pkg_dep_origin(struct pkg_dep *pd);
+
/* pkg */
/* Add mtree stuff later. */
@@ -126,6 +145,10 @@
int pkg_pkg_file_remove(struct pkg *p, struct pkg_file *pf);
+void pkg_pkg_dep_list_init(struct pkg *p);
+
+struct pkg_dep *pkg_pkg_dep_list_next(struct pkg *p);
+
void pkg_delete(struct pkg *p);
/* pkgdb */
@@ -152,6 +175,6 @@
int pkgdb_db_sync(struct pkgdb *db);
#endif
-void pkgdb_delete(struct pkgdb *db);
+void pkgdb_db_delete(struct pkgdb *db);
#endif
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.c#4 (text+ko) ====
@@ -5,15 +5,11 @@
#include "pkg.h"
struct pkg_dep *
-pkg_dep_new(const char *name, const char *origin)
+pkg_dep_new()
{
struct pkg_dep *pd;
pd = calloc(1, sizeof(*pd));
- if (pd != NULL) {
- pd->name = name;
- pd->origin = origin;
- }
return (pd);
}
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.h#3 (text+ko) ====
@@ -12,7 +12,8 @@
TAILQ_ENTRY(pkg_dep) next;
};
-struct pkg_dep *pkg_dep_new(const char *name, const char *origin);
+#if 0
+struct pkg_dep *pkg_dep_new(void);
struct pkg_dep *pkg_dep_set_name(struct pkg_dep *pd, const char *name);
@@ -21,5 +22,6 @@
const char *pkg_dep_name(struct pkg_dep *pd);
const char *pkg_dep_origin(struct pkg_dep *pd);
+#endif
#endif
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_error.h#2 (text+ko) ====
@@ -1,0 +1,5 @@
+#ifndef __PKG_ERROR_H__
+#define __PKG_ERROR_H__
+
+
+#endif
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#13 (text+ko) ====
@@ -42,6 +42,18 @@
return (pl);
}
+void
+pkg_plist_free(struct pkg_plist *pl)
+{
+ /* TODO: Write this function. */
+#if 0
+ pkg_plist_pkg_list_free(pl);
+ pkg_plist_pkg_dep_free(pl);
+#endif
+ free(pl);
+ return;
+}
+
int
pkg_plist_parsed(struct pkg_plist *pl)
{
@@ -100,6 +112,7 @@
/* XXX: Use fgets(), dummy. */
pkg_plist_pkg_file_list_init(pl);
+ pkg_plist_pkg_dep_list_init(pl);
set_parse_state_default(&st);
for (p = textp; *p != '\0'; p++) {
if (*p == '\n') {
@@ -143,11 +156,12 @@
char *argument;
char *sep;
struct pkg_file *pf;
+ struct pkg_dep *pd;
if (line == NULL)
return (-1);
- s = 0;
+ s = PARSE_OK;
line_len = strlen(line);
if (*line == '@') {
sep = strchr(line, ' ');
@@ -183,7 +197,7 @@
st->last_elem = PLIST_OWNER;
} else if (strcmp(command, PLIST_CMD_GROUP) == 0) {
- if (line_len == strlen(PLIST_CMD_OWNER) + 1)
+ if (line_len == strlen(PLIST_CMD_GROUP) + 1)
/* Empty group line, reset to NULL. */
st->owner = NULL;
else
@@ -198,8 +212,6 @@
* function. */
if (line_len == strlen(PLIST_CMD_COMMENT) + 1) {
/* Empty comment. */
- st->last_elem = PLIST_COMMENT;
- return (0);
}
sep = strchr(argument, ':');
if (sep == NULL) {
@@ -208,27 +220,35 @@
* them out. Maybe later, add a new command that specifies
* comments that should be printed when displaying
* information from the plist. */
- return (0);
+ return (PARSE_OK);
}
*sep = '\0';
if (strcmp(argument, PLIST_COMMENT_PKG_REV) == 0) {
- /* TODO: Keeping rev as s string for now. String based
+ /* TODO: Keeping rev as a string for now. String based
* version comparison is dumb, convert to int. */
pl->rev = sep + 1;
- st->last_elem = PLIST_COMMENT;
} else if (strcmp(argument, PLIST_COMMENT_ORIGIN) == 0) {
pl->origin = sep + 1;
- st->last_elem = PLIST_COMMENT;
} else if (strcmp(argument, PLIST_COMMENT_DEPORIGIN) == 0) {
if (st->last_elem != PLIST_PKGDEP)
- return (1);
+ return (PARSE_FAIL);
/* add the the dependency list. */
+ pd = pkg_plist_pkg_dep_list_last(pl);
+ pkg_dep_set_origin(pd, sep + 1);
} else if (strcmp(argument, PLIST_COMMENT_MD5) == 0) {
if (st->last_elem != PLIST_FILE)
- return (1);
+ return (PARSE_FAIL);
pf = pkg_plist_pkg_file_list_last(pl);
pkg_file_set_md5(pf, sep + 1);
+ } else {
+ /* Comment we don't know anything about. */
}
+ st->last_elem = PLIST_COMMENT;
+ } else if (strcmp(command, PLIST_CMD_PKGDEP) == 0) {
+ pd = pkg_dep_new();
+ pkg_dep_set_name(pd, argument);
+ pkg_plist_pkg_dep_list_append(pl, pd);
+ st->last_elem = PLIST_PKGDEP;
}
#if 0
else if (strcmp(command, PLIST_CMD_NOINST) == 0) {
@@ -249,7 +269,10 @@
ent = pl_entry_new(PLIST_DIRRM, argument, NULL);
#endif
else if (strcmp(command, PLIST_CMD_MTREE) == 0) {
- pl->mtree_file = argument;
+ if (pl->mtree_file == NULL)
+ pl->mtree_file = argument;
+ else
+ return (PARSE_FAIL); /* strict. */
st->last_elem = PLIST_MTREE;
}
else if (strcmp(command, PLIST_CMD_DISPLAY) == 0) {
@@ -258,8 +281,10 @@
}
#if 0
else {
- /* If we cant identify the command, set it unknown and gather
- * whatever information we can. */
+ /* If we cant identify the command, we have to return
+ * PARSE_FAIL. Apparently their are quite a few undocumented
+ * commands for plists. If we don't know a given command, we
+ * could really mess something up. */
ent = pl_entry_new(PLIST_UNKNOWN, argument, NULL);
}
#endif
@@ -371,12 +396,69 @@
TAILQ_INSERT_TAIL(&pl->pf_head, pf, next);
}
+/* pkg_dep list manipulation and access. */
+/* generalize plz. */
+
+void
+pkg_plist_pkg_dep_list_reset(struct pkg_plist *pl)
+{
+ if (pl == NULL)
+ return;
+
+ pl->pd_curr = NULL;
+}
+
+void
+pkg_plist_pkg_dep_list_init(struct pkg_plist *pl)
+{
+ if (pl == NULL)
+ return;
+
+ TAILQ_INIT(&pl->pd_head);
+}
+
+struct pkg_dep *
+pkg_plist_pkg_dep_list_last(struct pkg_plist *pl)
+{
+ if (pl == NULL)
+ arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG);
+
+ return (TAILQ_LAST(&pl->pd_head, pd_head));
+}
+
void
-pkg_plist_free(struct pkg_plist *pl)
+pkg_plist_pkg_dep_list_append(struct pkg_plist *pl, struct pkg_dep *pd)
+{
+ if (pl == NULL || pd == NULL)
+ return;
+
+ TAILQ_INSERT_TAIL(&pl->pd_head, pd, next);
+}
+
+struct pkg_dep *
+pkg_plist_pkg_dep_list_next(struct pkg_plist *pl)
{
- /* TODO: Write this function. */
- free(pl);
- return;
+ struct pkg_dep *pd;
+
+ if (pl == NULL)
+ return (NULL);
+
+ if (pl->pd_curr == NULL)
+ pd = pkg_plist_pkg_dep_list_first(pl);
+ else
+ pd = TAILQ_NEXT(pl->pd_curr, next);
+
+ if (pd != NULL)
+ pl->pd_curr = pd;
+
+ return (pd);
}
-/* pkg_dep list manipulation and access. */
+struct pkg_dep *
+pkg_plist_pkg_dep_list_first(struct pkg_plist *pl)
+{
+ if (pl == NULL)
+ arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG);
+
+ return (TAILQ_FIRST(&pl->pd_head));
+}
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#10 (text+ko) ====
@@ -43,9 +43,10 @@
#define PLIST_CMD_IGNORE_INST "ignore_inst"
#define PLIST_CMD_NAME "name"
#define PLIST_CMD_DIRRM "dirrm"
+#define PLIST_CMD_DIRRMTRY "dirrmtry"
#define PLIST_CMD_MTREE "mtree"
#define PLIST_CMD_DISPLAY "display"
-#define PLIST_CMD_PKGDEG "pkgdep"
+#define PLIST_CMD_PKGDEP "pkgdep"
#define PLIST_CMD_CONFLICTS "conflicts"
/* Meta comments. */
@@ -111,4 +112,15 @@
void pkg_plist_free(struct pkg_plist *pl);
+/* pkg_dep */
+void pkg_plist_pkg_dep_list_init(struct pkg_plist *pl);
+
+struct pkg_dep *pkg_plist_pkg_dep_list_last(struct pkg_plist *pl);
+
+void pkg_plist_pkg_dep_list_append(struct pkg_plist *pl,
+ struct pkg_dep *pd);
+
+void pkg_plist_pkg_dep_list_reset(struct pkg_plist *pl);
+struct pkg_dep *pkg_plist_pkg_dep_list_next(struct pkg_plist *pl);
+struct pkg_dep *pkg_plist_pkg_dep_list_first(struct pkg_plist *pl);
#endif
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_util.h#7 (text+ko) ====
@@ -9,6 +9,8 @@
char *path_build(const char *prefix, const char *suffix);
+char *strrep(char *dest, char *src);
+
void arg_rage_quit(const char *function, const char *message, int ret);
#endif
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.c#16 (text+ko) ====
@@ -74,7 +74,7 @@
}
void
-pkgdb_delete(struct pkgdb *db)
+pkgdb_db_delete(struct pkgdb *db)
{
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_CLIENT);
@@ -101,8 +101,9 @@
* Is this a terrible idea? Stay tuned to find out. */
pkg_reset(p);
sub = pkgdb_pkgdb_sub_list_next(db);
- if (sub == NULL)
+ if (sub == NULL) {
return (DB_NO_PKG); /* Already at the end. */
+ }
status = OK;
status |=pkg_set_ident(p, pkgdb_sub_ident(sub));
/* Status should be pointless to check here, because the init loop
@@ -116,7 +117,6 @@
/* I'm not sure all of these have to be loaded, but we can make a
* decision about that later. */
- status |= pkg_parse_plist(p);
/* Error codes to the client. */
return (status);
}
@@ -133,49 +133,50 @@
void
pkgdb_pkgdb_sub_list_free(struct pkgdb *db)
{
- struct pkgdb_sub *dbs1;
- struct pkgdb_sub *dbs2;
+ struct pkgdb_sub *sub1;
+ struct pkgdb_sub *sub2;
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
pkgdb_pkgdb_sub_list_init(db);
- dbs1 = pkgdb_pkgdb_sub_list_first(db);
- while (dbs1 != NULL) {
- dbs2 = pkgdb_pkgdb_sub_list_next(db);
- pkgdb_sub_delete(dbs1);
- dbs1 = dbs2;
+ sub1 = pkgdb_pkgdb_sub_list_first(db);
+ while (sub1 != NULL) {
+ sub2 = pkgdb_pkgdb_sub_list_next(db);
+ pkgdb_sub_reset(sub1);
+ sub1 = sub2;
}
}
struct pkgdb_sub *
pkgdb_pkgdb_sub_list_next(struct pkgdb *db)
{
- struct pkgdb_sub *dbs;
+ struct pkgdb_sub *sub;
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
if (db->sub_curr == NULL)
- dbs = TAILQ_FIRST(&db->sub_head);
+ sub = pkgdb_pkgdb_sub_list_first(db);
else
- dbs = TAILQ_NEXT(db->sub_curr, next);
+ sub = TAILQ_NEXT(db->sub_curr, next);
+
+ if (sub != NULL)
+ db->sub_curr = sub;
- db->sub_curr = dbs;
- return (dbs);
+ return (sub);
}
struct pkgdb_sub *
pkgdb_pkgdb_sub_list_first(struct pkgdb *db)
{
- struct pkgdb_sub *dbs;
+ struct pkgdb_sub *sub;
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
- dbs = TAILQ_FIRST(&db->sub_head);
-
- return (dbs);
+ sub = TAILQ_FIRST(&db->sub_head);
+ return (sub);
}
void
@@ -187,7 +188,7 @@
if (sub == NULL)
arg_rage_quit(__func__, "Not a valid sub directory.",
RAGE_AT_LIBPKG);
-
+
TAILQ_INSERT_TAIL(&db->sub_head, sub, next);
}
@@ -196,7 +197,7 @@
{
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
-
+
TAILQ_INIT(&db->sub_head);
}
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.c#9 (text+ko) ====
@@ -199,9 +199,10 @@
void
pkgdb_sub_reset(struct pkgdb_sub *dbs)
{
- if (dbs == NULL)
+ if (dbs == NULL) {
+ printf("uh oh.");
return;
-
+ }
free(dbs->ident);
free(dbs->path);
free(dbs->comment_text);
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_private.h#2 (text+ko) ====
@@ -15,7 +15,7 @@
int sub_count;
struct pkgdb_sub *sub_curr;
-
+
TAILQ_HEAD(sub_head, pkgdb_sub) sub_head;
int (*pkgdb_db_open) (struct pkgdb *db, const char *db_root);
==== //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#14 (text+ko) ====
@@ -59,7 +59,7 @@
perform_on_db(db);
- pkgdb_delete(db);
+ // pkgdb_db_delete(db);
return (EXIT_SUCCESS);
}
@@ -119,6 +119,9 @@
print_pkg_information(struct pkg *p)
{
struct pkg_file *pf;
+ struct pkg_dep *pd;
+ const char *ident;
+ const char *comment;
const char *name;
const char *cwd;
const char *origin;
@@ -129,34 +132,48 @@
/* Just print the basic PKGNAME COMMENT scheme right now. Other
* information isn't collected by the library yet. */
- if (!opt_show_all_info)
+ if (!opt_show_all_info) {
/* Use pkg_ident because old pkg_info goes by directory name. */
- printf("%s %s\n", pkg_ident(p), pkg_comment(p));
- else {
+ ident = pkg_ident(p);
+ comment = pkg_comment(p);
+ printf("%s %s\n",
+ (ident != NULL ? ident : BAD_OR_UNKNOWN_VALUE),
+ (comment != NULL ? comment : BAD_OR_UNKNOWN_VALUE));
+ } else {
/* Testing plist interaction. */
- name =
- ((name = pkg_name(p)) == NULL ? BAD_OR_UNKNOWN_VALUE : name);
- cwd = ((cwd = pkg_cwd(p)) == NULL ? BAD_OR_UNKNOWN_VALUE : cwd);
- origin =
- ((origin = pkg_origin(p)) == NULL ? BAD_OR_UNKNOWN_VALUE : origin);
+ name = pkg_name(p);
+ cwd = pkg_cwd(p);
+ origin = pkg_origin(p);
- printf("%s:\n", name);
- printf("\tcwd: %s\n", cwd);
- printf("\torigin: %s\n", origin);
+ printf("%s:\n",
+ (name != NULL ? name : BAD_OR_UNKNOWN_VALUE));
+ printf("\tcwd: %s\n",
+ (cwd != NULL ? name : BAD_OR_UNKNOWN_VALUE));
+ printf("\torigin: %s\n",
+ (origin != NULL ? origin : BAD_OR_UNKNOWN_VALUE));
printf("\tfiles:\n");
pkg_pkg_file_list_init(p);
while ((pf = pkg_pkg_file_list_next(p)) != NULL) {
- path =
- ((path = pkg_file_path(pf)) == NULL ? BAD_OR_UNKNOWN_VALUE : path);
- md5 =
- ((md5 = pkg_file_md5(pf)) == NULL ? BAD_OR_UNKNOWN_VALUE : md5);
- owner =
- ((owner = pkg_file_owner(pf)) == NULL ? BAD_OR_UNKNOWN_VALUE : owner);
- group =
- ((group = pkg_file_group(pf)) == NULL ? BAD_OR_UNKNOWN_VALUE : group);
- printf("\t\t%s\n\t\t\tMD5: %s\n\t\t\tOWNER: %s\n\t\t\t",
- path, md5, owner);
- printf("GROUP: %s\n", owner);
+ path = pkg_file_path(pf);
+ md5 = pkg_file_md5(pf);
+ owner = pkg_file_owner(pf);
+ group = pkg_file_group(pf);
+ printf("\t\t%s\n",
+ (path != NULL ? path : BAD_OR_UNKNOWN_VALUE));
+ printf("\t\t\tMD5: %s\n",
+ (md5 != NULL ? md5 : BAD_OR_UNKNOWN_VALUE));
+ printf("\t\t\tOWNER: %s\n",
+ (owner != NULL ? owner : BAD_OR_UNKNOWN_VALUE));
+ printf("\t\t\tGROUP: %s\n",
+ (group != NULL ? group : BAD_OR_UNKNOWN_VALUE));
+ }
+
+ printf("\tdepends:\n");
+ pkg_pkg_dep_list_init(p);
+ while ((pd = pkg_pkg_dep_list_next(p)) != NULL) {
+ name = pkg_dep_name(pd);
+ origin = pkg_dep_origin(pd);
+ printf("\t\t%s : %s\n", name, origin);
}
}
}
More information about the p4-projects
mailing list