PERFORCE change 164394 for review

David Forsythe dforsyth at FreeBSD.org
Mon Jun 15 04:15:11 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=164394

Change 164394 by dforsyth at squirrel on 2009/06/15 04:14:36

	Working towards something that compiles.  Added some place holders. 

Affected files ...

.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#16 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#16 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.c#3 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#9 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#8 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_private.h#10 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb.c#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.c#5 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.h#3 edit
.. //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#10 edit

Differences ...

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#16 (text+ko) ====

@@ -2,10 +2,13 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <sys/queue.h>
+
 #include "pkg_util.h"
 #include "pkg_dep.h"
 #include "pkg_file.h"
 #include "pkg_plist.h"
+#include "pkgdb_hierdb_pkgdb_sub.h"
 #include "pkgdb.h"
 #include "pkg_private.h"
 #include "pkg.h"
@@ -13,10 +16,17 @@
 struct pkg {
 	char *ident; /* User given name for this pkg. */
 	
+	char *contents;
+	char *comment;
+	char *description;
+	char *display;
+	char *mtree_dirs;
+	char *required_by;
+
 	struct pkg_plist plist;
-	struct pkgdb_sub sub;
+	struct pkgdb_sub *sub;
 
-	/* TAILQ_ENTRY(pkg) next; */
+	TAILQ_ENTRY(pkg) next;
 	short dirty;
 	/* Add an owner field? */
 };
@@ -29,11 +39,13 @@
 	struct pkg *p;
 
 	p = calloc(1, sizeof(*p));
+	
 	return (p);
 }
 
-/* TODO: Can't copy string for some _set_ functions and then just point to
- * the passed pkg_plist for _set_pkg_plist. */
+/* For now, copy all text into the package.  Yes, it's storing information
+ * twice, but until I'm sure about what I'm going to do with all of the
+ * information, pkgs can have their own copies of the data. */
 
 /* Set the short comment for this package */
 int
@@ -42,9 +54,86 @@
 	if (p == NULL)
 		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
 
-	p->comment_text = comment;
+	p->comment = strdup(comment);
+
+	return (OK);
+}
+
+/* Set the contents for this package. */
+
+int
+pkg_set_contents(struct pkg *p, const char *contents)
+{
+	if (p == NULL)
+		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+	p->contents = strdup(contents);
+
+	return (OK);
+}
+
+int
+pkg_set_description(struct pkg *p, const char *description)
+{
+	if (p == NULL)
+		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+	p->description = strdup(description);
+
+	return (OK);
+}
+
+int
+pkg_set_display(struct pkg *p, const char *display)
+{
+	if (p == NULL)
+		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+	p->display = strdup(display);
+
+	return (OK);
+}
+
+int
+pkg_set_mtree_dirs(struct pkg *p, const char *mtree_dirs)
+{
+	if (p == NULL)
+		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+	p->mtree_dirs = strdup(mtree_dirs);
+
+	return (OK);
+}
+
+int
+pkg_set_required_by(struct pkg *p, const char *required_by)
+{
+	if (p == NULL)
+		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+
+	p->required_by = strdup(required_by);
+
+	return (OK);
+}
+
+int
+pkg_parse_plist(struct pkg *p)
+{
+	int status;
+
+	if (p == NULL)
+		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+	
+	if (pkg_plist_parsed(&p->plist)) {
+		/* For now, just jump ship if the package already has a plist. */
+		return (OK);
+	}
+
+	pkg_plist_reset(&p->plist);
+	
+	status = pkg_plist_parse_contents_from_text(&p->plist, p->contents);
 
-	return (PKG_OK);
+	return (status);
 }
 
 /* ident and name are different, even though they might be the same. */
@@ -79,7 +168,7 @@
 	if (p == NULL)
 		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
 	
-	return (pkg_plist_cwd(p->plist));
+	return (pkg_plist_cwd(&p->plist));
 }
 
 char *
@@ -88,27 +177,32 @@
 	if (p == NULL)
 		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
 	
-	return (pkg_plist_origin(p->plist))
+	return (pkg_plist_origin(&p->plist));
 }
 
+/* These need to be renamed. */
+
 void
-pkg_file_list_init(struct pkg *p)
+pkg_pkg_file_list_init(struct pkg *p)
 {
 	if (p == NULL)
 		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
 
-	pkg_plist_pkg_file_list_reset(p->plist);
+	pkg_plist_pkg_file_list_reset(&p->plist);
 }
 
 struct pkg_file *
-pkg_file_list_next(struct pkg *p)
+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);
+	
+	if (pf == NULL)
+		arg_rage_quit(__func__, "Not a valid package file.", RAGE_AT_CLIENT);
 
-	pf = pkg_plist_pkg_file_list_next(p->plist);
+	pf = pkg_plist_pkg_file_list_next(&p->plist);
 	
 	return (pf);
 }
@@ -119,15 +213,14 @@
 	if (p == NULL)
 		arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
 	
-	pkg_plist_free(p->plist);
 	p->ident = NULL;
-	p->comment_text = NULL;
-	p->contents_text = NULL;
-	p->desc_text = NULL;
-	p->display_text = NULL;
-	p->mtree_text = NULL;
+	p->comment = NULL;
+	p->contents = NULL;
+	p->description = NULL;
+	p->display = NULL;
+	p->mtree_dirs = NULL;
 	p->required_by = NULL;
-	p->plist = NULL;
+	pkg_plist(&p->plist);
 }
 
 /* TODO: Make an note in the manual for libpkg that pkg_free should not be

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#16 (text+ko) ====

@@ -2,17 +2,36 @@
 #define __PKG_H__
 
 /* When I get more than one, I'll plop it into an enum type. */
-#define HIER_DB 0
+#define HIER_DB 			0
+
+/* Here have some error codes. */
+
+#define OK					0x00000000
+#define NOT_OK				0x00000001
+#define MEMORY_ERR			0x00000002
+#define BAD_IDENT			0x00000004 /* remove db_bad_root? */
+#define RAGE_AT_CLIENT		0x00000008
+#define RAGE_AT_LIBPKG		0x00000010
+
+#define DB_BAD_ROOT			0x10000000
+#define DB_NOT_OPEN			0x20000000
+#define DB_OPEN				0x40000000
 
-/* TODO: Error codes. */
-#define RAGE_AT_CLIENT 0x00000001
-#define RAGE_AT_LIBPKG 0x00000002
+#define SUB_NO_COMMENT		0x80000000
+#define SUB_NO_CONTENTS		0x01000000
+#define SUB_NO_DESC			0x02000000
+#define SUB_NO_DISPLAY		0x04000000
+#define SUB_NO_MTREE_DIRS	0x08000000
+#define SUB_NO_REQUIRED_BY	0x00100000
+#define SUB_NO_FILE			0x00200000
+#define SUB_EMPTY_FILE		0x00400000
 
+#define NO_PKG				0x00800000
 
 /* pkg_file */
 
 struct pkg_file;
-
+#if 0
 struct pkg_file *pkg_file_new(void);
 
 const char *pkg_file_path(struct pkg_file *pf);
@@ -30,14 +49,16 @@
 int pkg_file_set_owner(struct pkg_file *pf, const char *owner);
 
 int pkg_file_set_group(struct pkg_file *pf, const char *group);
-
+#endif
 /* pkg */
 
 /* Add mtree stuff later. */
 
 struct pkg;
 
-struct pkg *pkg_new(const char *ident);
+struct pkg *pkg_new(void);
+
+void pkg_reset(struct pkg *p);
 
 char *pkg_ident(struct pkg *p);
 
@@ -63,13 +84,21 @@
 
 int pkg_set_comment(struct pkg *p, const char *comment);
 
+int pkg_set_contents(struct pkg *p, const char *contents);
+
 int pkg_set_description(struct pkg *p, const char *description);
 
+int pkg_set_mtree_dirs(struct pkg *p, const char *mtree_dirs);
+
+int pkg_set_required_by(struct pkg *p, const char *required_by);
+
 int pkg_set_display(struct pkg *p, const char *display);
 
 int pkg_parse_plist(struct pkg *p);
 
-int pkg_pkg_file_list_next(struct pkg *p, struct pkg_file *pf);
+void pkg_pkg_file_list_init(struct pkg *p);
+
+struct pkg_file *pkg_pkg_file_list_next(struct pkg *p);
 
 int pkg_pkg_file_list_reset(struct pkg *p);
 
@@ -91,7 +120,7 @@
 
 int pkgdb_db_close(struct pkgdb *db);
 
-struct pkg *pkgdb_pkg_next(struct pkgdb *db);
+int pkgdb_pkg_next(struct pkgdb *db, struct pkg *p);
 
 int pkgdb_pkg_get(struct pkgdb *db, struct pkg *p, const char *ident);
 

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.c#3 (text+ko) ====

@@ -25,6 +25,7 @@
 		return (NULL);
 
 	pd->name = name;
+
 	return (pd);
 }
 
@@ -35,6 +36,7 @@
 		return (NULL);
 
 	pd->origin = origin;
+	
 	return (pd);
 }
 

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#9 (text+ko) ====

@@ -9,6 +9,7 @@
 #include <dirent.h>
 #include <limits.h>
 
+#include "pkg_util.h"
 #include "pkg_dep.h"
 #include "pkg_file.h"
 #include "pkg_plist.h"
@@ -21,28 +22,6 @@
 	char *group;
 };
 
-struct pkg_plist {
-	char * rev;
-	char *cwd;
-	char *srcdir;
-	char *name;
-	char *origin;
-	char *display;
-	char *mtree_file;
-	
-	char *text; /* The entire plist */
-
-	struct pkg_file *pf_curr;
-	struct pkg_dep *pd_curr;
-	
-	/* Use these lists here so that appending to our list doesnt need a
-	 * bunch of realloc procedures.  This will be convenient for clients
-	 * that want to build plists on the fly, modify plists, etc. */
-
-	TAILQ_HEAD(pf_head, pkg_file) pf_head; /* pkg_file list. */
-	TAILQ_HEAD(pd_head, pkg_dep) pd_head; /* pkg_dep list. */
-};
-
 void
 set_parse_state_default(struct parse_state *st)
 {
@@ -63,40 +42,60 @@
 	return (pl);
 }
 
-struct pkg_plist *
+int 
+pkg_plist_parsed(struct pkg_plist *pl)
+{
+	if (pl == NULL)
+		arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG);
+
+	return (pl->parsed);
+}
+
+void
+pkg_plist_reset(struct pkg_plist *pl)
+{
+	if (pl == NULL)
+		arg_rage_quit(__func__, "Not a valid plist.", RAGE_AT_LIBPKG);
+	
+	/* TODO: Write this. */
+
+	pl->parsed = 0;
+}
+
+int
 pkg_plist_new_from_text(const char *text)
 {
+	int status;
 	struct pkg_plist *pl;
 
-	pl = pkg_plist_parse_contents_from_text(text);
-	return (pl);
+	pl = pkg_plist_new();
+	status = pkg_plist_parse_contents_from_text(pl, text);
+	
+	return (status);
 }
 
-struct pkg_plist *
-pkg_plist_parse_contents_from_text(const char *text)
+int
+pkg_plist_parse_contents_from_text(struct pkg_plist *pl, const char *text)
 {
 	int s;
 	char *p;
 	char *textp;
 	char *line;
-	struct pkg_plist *pl;
 	struct parse_state st;
 
 	/* This function will parse text and create a pkg_plist */
 	if (text == NULL)
-		return (NULL);
+		return (NOT_OK);
 	
 	pl = pkg_plist_new();
 	if (pl == NULL)
-		return (NULL);
+		return (MEMORY_ERR);
 	
-	/* Lets just hold a complete copy of the text and  modify/point to the
-	 * information we want, rather than duping a bunch of strings in the
-	 * line parsing function. */
-
+	/* Not sure if this is how I still want to do this, but for now, hold
+	 * a copy of the text. */
 	textp = strdup(text);
 	if (textp == NULL)
-		return (NULL);
+		return (MEMORY_ERR);
 
 	pl->text = textp;	
 	
@@ -118,12 +117,16 @@
 			/* Consider a dirty flag for these lists? */
 			if (s != 0) {
 				/* bad parse. */
+				/* free a bunch of stuff. */
+				return (NOT_OK);
 			}
 			textp = p + 1;
 		}
 	}
+
+	pl->parsed = 1;
 	
-	return (pl);
+	return (OK);
 }
 
 /* Parse a command sequence and add an entry based on the findings. */
@@ -363,4 +366,10 @@
 	TAILQ_INSERT_TAIL(&pl->pf_head, pf, next);
 }
 
+void
+pkg_plist_free(struct pkg_plist *pl)
+{
+	return;
+}
+
 /* pkg_dep list manipulation and access. */

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#8 (text+ko) ====

@@ -28,40 +28,73 @@
 
 /* Plist commands. */
 
-#define PLIST_CMD_CWD	"cwd"
-#define PLIST_CMD_CD	"cd"
-#define PLIST_CMD_SRCDIR	"srcdir"
-#define PLIST_CMD_EXEC	"exec"
-#define PLIST_CMD_UNEXEC	"unexec"
-#define PLIST_CMD_MODE	"mode"
-#define PLIST_CMD_OPTION	"option"
-#define PLIST_CMD_OWNER	"owner"
-#define PLIST_CMD_GROUP	"group"
-#define PLIST_CMD_COMMENT	"comment"
-#define PLIST_CMD_NOINST	"noinst"
-#define PLIST_CMD_IGNORE	"ignore"
+#define PLIST_CMD_CWD			"cwd"
+#define PLIST_CMD_CD			"cd"
+#define PLIST_CMD_SRCDIR		"srcdir"
+#define PLIST_CMD_EXEC			"exec"
+#define PLIST_CMD_UNEXEC		"unexec"
+#define PLIST_CMD_MODE			"mode"
+#define PLIST_CMD_OPTION		"option"
+#define PLIST_CMD_OWNER			"owner"
+#define PLIST_CMD_GROUP			"group"
+#define PLIST_CMD_COMMENT		"comment"
+#define PLIST_CMD_NOINST		"noinst"
+#define PLIST_CMD_IGNORE		"ignore"
 #define PLIST_CMD_IGNORE_INST	"ignore_inst"
-#define PLIST_CMD_NAME	"name"
-#define PLIST_CMD_DIRRM "dirrm"
-#define PLIST_CMD_MTREE	"mtree"
-#define PLIST_CMD_DISPLAY	"display"
-#define PLIST_CMD_PKGDEG	"pkgdep"
-#define PLIST_CMD_CONFLICTS	"conflicts"
+#define PLIST_CMD_NAME			"name"
+#define PLIST_CMD_DIRRM 		"dirrm"
+#define PLIST_CMD_MTREE			"mtree"
+#define PLIST_CMD_DISPLAY		"display"
+#define PLIST_CMD_PKGDEG		"pkgdep"
+#define PLIST_CMD_CONFLICTS		"conflicts"
 
 /* Meta comments. */
 
 #define PLIST_COMMENT_PKG_REV	"PKG_FORMAT_REVISION"
 #define PLIST_COMMENT_ORIGIN	"ORIGIN"
 #define PLIST_COMMENT_DEPORIGIN	"DEPORIGIN"
-#define PLIST_COMMENT_MD5	"MD5"
+#define PLIST_COMMENT_MD5		"MD5"
 
 struct parse_state;
 
-struct pkg_plist *pkg_plist_parse_contents_from_text(const char *text);
+struct pkg_plist {
+	char *rev;
+	char *cwd;
+	char *srcdir;
+	char *name;
+	char *origin;
+	char *display;
+	char *mtree_file;
+	
+	char *text; /* The entire plist */
+
+	struct pkg_file *pf_curr;
+	struct pkg_dep *pd_curr;
+	
+	/* Use these lists here so that appending to our list doesnt need a
+	 * bunch of realloc procedures.  This will be convenient for clients
+	 * that want to build plists on the fly, modify plists, etc. */
+
+	TAILQ_HEAD(pf_head, pkg_file) pf_head; /* pkg_file list. */
+	TAILQ_HEAD(pd_head, pkg_dep) pd_head; /* pkg_dep list. */
+	int parsed;
+};
+
+struct pkg_plist *pkg_plist_new(void);
+
+int pkg_plist_parsed(struct pkg_plist *pl);
+	
+void pkg_plist_reset(struct pkg_plist *pl);
+
+int pkg_plist_new_from_text(const char *text);
+
+int pkg_plist_parse_contents_from_text(struct pkg_plist *pl, 
+	const char *text);
 int pkg_plist_parse_line(struct pkg_plist *pl, char *line, 
 	struct parse_state *st);
 
 void pkg_plist_pkg_file_list_reset(struct pkg_plist *pl);
+
 struct pkg_file *pkg_plist_pkg_file_list_next(struct pkg_plist *pl);
 
 char *pkg_plist_name(struct pkg_plist *pl);
@@ -76,4 +109,6 @@
 
 void set_parse_state_default(struct parse_state *st);
 
+void pkg_plist_free(struct pkg_plist *pl);
+
 #endif

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_private.h#10 (text+ko) ====

@@ -1,11 +1,11 @@
 #ifndef __PKG_PRIVATE_H__
 #define __PKG_PRIVATE_H__
 
-#define COMMENT_FILE	"+COMMENT"
-#define CONTENTS_FILE	"+CONTENTS"
-#define DESC_FILE	"+DESC"
-#define DISPLAY_FILE	"+DISPLAY"
-#define MTREE_DIRS_FILE	"+MTREE_DIRS"
+#define COMMENT_FILE		"+COMMENT"
+#define CONTENTS_FILE		"+CONTENTS"
+#define DESC_FILE			"+DESC"
+#define DISPLAY_FILE		"+DISPLAY"
+#define MTREE_DIRS_FILE		"+MTREE_DIRS"
 #define REQUIRED_BY_FILE	"+REQUIRED_BY"
 
 

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb.c#4 (text+ko) ====

@@ -140,7 +140,16 @@
 }
 
 int
-pkgdb_hierdb_db_close(struct pkgdb *db)
+pkgdb_hierdb_db_sync(struct pkgdb *db)
 {
-	return (0);
+	int status;
+
+	if (db == NULL)
+		arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_CLIENT);
+
+	status = OK;
+	if (!db->dirty)
+		return (status);
+
+	return (status);
 }

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.c#5 (text+ko) ====

@@ -4,24 +4,10 @@
 #include "pkgdb_hierdb_pkgdb_sub.h"
 #include "pkg.h"
 
+#define BAD_ARG_RAGE arg_rage_quit(__func__, "Not a valid pkgdb_sub.", RAGE_AT_LIBPKG);
+
 /* TODO: Create pkgdb_sub.c */
 
-struct pkgdb_sub {
-	struct pkgdb *owner_db;
-
-	char *ident;
-	char *path;
-
-	char *comment_text;
-	char *contents_text;
-	char *desc_text;
-	char *display_text;
-	char *mtree_dirs_text;
-	char *required_by_text;
-
-	TAILQ_ENTRY(pkgdb_sub) next;
-};
-
 struct pkgdb_sub *
 pkgdb_sub_new()
 {
@@ -135,6 +121,69 @@
 	return (SUB_OK);
 }
 
+char *
+pkgdb_sub_ident(struct pkgdb_sub *dbs)
+{
+	if (dbs == NULL)
+		BAD_ARG_RAGE;
+
+	return (dbs->ident);
+}
+
+char *
+pkgdb_sub_comment(struct pkgdb_sub *dbs)
+{
+	if (dbs == NULL)
+		BAD_ARG_RAGE;
+
+	return (dbs->comment_text);
+}
+
+char *
+pkgdb_sub_contents(struct pkgdb_sub *dbs)
+{
+	if (dbs == NULL)
+		BAD_ARG_RAGE;
+
+	return (dbs->contents_text);
+}
+
+char *
+pkgdb_sub_desc(struct pkgdb_sub *dbs)
+{
+	if (dbs == NULL)
+		BAD_ARG_RAGE;
+
+	return (dbs->desc_text);
+}
+
+char *
+pkgdb_sub_display(struct pkgdb_sub *dbs)
+{
+	if (dbs == NULL)
+		BAD_ARG_RAGE;
+
+	return (dbs->display_text);
+}
+
+char *
+pkgdb_sub_mtree_dirs(struct pkgdb_sub *dbs)
+{
+	if (dbs == NULL)
+		BAD_ARG_RAGE;
+
+	return (dbs->mtree_dirs_text);
+}
+
+char *
+pkgdb_sub_required_by(struct pkgdb_sub *dbs);
+{
+	if (dbs == NULL)
+		BAD_ARG_RAGE;
+
+	return (dbs->required_by_text);
+}
+
 void
 pkgdb_sub_reset(struct pkgdb_sub *dbs)
 {
@@ -159,8 +208,6 @@
 	dbs->required_by_text = NULL;
 }
 
-	
-
 void
 pkgdb_sub_free(struct pkgdb_sub *dbs)
 {
@@ -170,6 +217,3 @@
 	pkgdb_sub_reset(dbs);
 	free(dbs);
 }
-
-
-	

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.h#3 (text+ko) ====

@@ -1,19 +1,51 @@
 #ifndef __PKGDB_SUB_H__
 #define __PKGDB_SUB_H__
 
-#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
+#include "pkg.h"
+
+/* Keep this in here until (if) I ditch queues. */
+struct pkgdb_sub {
+	struct pkgdb *owner_db;
+
+	char *ident;
+	char *path;
+
+	char *comment_text;
+	char *contents_text;
+	char *desc_text;
+	char *display_text;
+	char *mtree_dirs_text;
+	char *required_by_text;
+
+	TAILQ_ENTRY(pkgdb_sub) next;
+};
+
+struct pkgdb_sub *pkgdb_sub_new(void);
+
+int pkgdb_sub_set_ident(struct pkgdb_sub *dbs, const char *ident);
+
+int pkgdb_sub_set_assign_db(struct pkgdb *owner, struct pkgdb_sub *dbs);
+
+int pkgdb_sub_read_file_to_text(struct pkgdb_sub *dbs, const char *filename);
+
+char *pkgdb_sub_ident(struct pkgdb_sub *dbs);
+
+char *pkgdb_sub_path(struct pkgdb_sub *dbs);
+
+char *pkgdb_sub_comment(struct pkgdb_sub *dbs);
+
+char *pkgdb_sub_contents(struct pkgdb_sub *dbs);
+
+char *pkgdb_sub_desc(struct pkgdb_sub *dbs);
+
+char *pkgdb_sub_display(struct pkgdb_sub *dbs);
+
+char *pkgdb_sub_mtree_dirs(struct pkgdb_sub *dbs);
 
-#define SUB_NO_FILE			0x00000040
-#define SUB_EMPTY_FILE		0x00000080
+char *pkgdb_sub_required_by(struct pkgdb_sub *dbs);
 
-#define SUB_BAD_IDENT		0x00000040
-#define SUB_MEMORY_ERR		0x00000080
+void pkgdb_sub_reset(struct pkgdb_sub *dbs);
 
-struct pkgdb_sub;
+void pkgdb_sub_free(struct pkgdb_sub *dbs);
 
 #endif

==== //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#10 (text+ko) ====

@@ -29,7 +29,7 @@
 {
 	int status;
 	const char *db_root;
-	struct pkgdb db;
+	struct pkgdb *db;
 
 	if (argc == 1 && argv != NULL /* Giving argv something to do */) {
 		opt_all = 1;
@@ -47,13 +47,17 @@
 		fprintf(stderr, "Could not attach to database \"%s\"\n", db_root);
 	}
 #endif
-	status = pkgdb_db_open(&db, db_root);
-	if (PKGDB_FAIL(status)) {
+	db = pkgdb_new(HIER_DB);
+	if (db == NULL)
+		exit(EXIT_FAILURE);
+
+	status = pkgdb_db_open(db, db_root);
+	if (status) {
 		fprintf(stderr, "Could not open database \"%s\"\n", db_root);
 		exit(EXIT_FAILURE);
 	}
 
-	perform_on_db(&db);
+	perform_on_db(db);
 
 	return (EXIT_SUCCESS);
 }
@@ -84,18 +88,23 @@
 {
 	int status;
 	/* char *target; */
-	struct pkg p;
+	struct pkg *p;
 
 	/* There will be cases where an init is useless, but since I haven't
 	 * written that much yet, init regardless. */
+	
+	p = pkg_new();
+	if (p == NULL)
+		exit(EXIT_FAILURE);
 
-	status = pkgdb_db_init(&db);
-	if (PKGDB_FAIL(status)) {
-		fprint(stderr, "Could not initialize database \"%s\"\n", db_root);
+	status = pkgdb_db_init(db);
+	if (status) {
+		fprintf(stderr, "Could not initialize database \"%s\"\n",
+			pkgdb_db_root(db_root));
 		exit(EXIT_FAILURE);
 	}
 
-	while ((p = pkgdb_next_pkg(db)) != NULL) {
+	while ((status = pkgdb_pkg_next(db, p)) != NO_PKG) {
 		if (!opt_all) { /* Wont happen at this point. */
 			/* Do some matching magic that I haven't written yet. */
 			print_pkg_information(p);


More information about the p4-projects mailing list