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