PERFORCE change 165300 for review
David Forsythe
dforsyth at FreeBSD.org
Sat Jun 27 05:16:55 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=165300
Change 165300 by dforsyth at squirrel on 2009/06/27 05:16:29
Building pkg_sub. Build with errors, mock pkg_info does nothing
because iteration functions aren't built.
Affected files ...
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/Makefile#9 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#27 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#26 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#17 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_sub.c#2 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_sub.h#2 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.c#18 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.h#12 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb.c#9 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb.h#5 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.c#10 delete
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb_pkgdb_sub.h#6 delete
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_old.c#2 delete
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_old.h#3 delete
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_private.h#3 edit
.. //depot/projects/soc2009/dforsyth_libpkg/old/pkgdb_hierdb_pkgdb_sub.c#1 add
.. //depot/projects/soc2009/dforsyth_libpkg/old/pkgdb_hierdb_pkgdb_sub.h#1 add
.. //depot/projects/soc2009/dforsyth_libpkg/old/pkgdb_old.c#1 add
.. //depot/projects/soc2009/dforsyth_libpkg/old/pkgdb_old.h#1 add
.. //depot/projects/soc2009/dforsyth_libpkg/tests/test.h#1 add
Differences ...
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/Makefile#9 (text+ko) ====
@@ -1,8 +1,8 @@
LIB= pkg
INCS= pkg.h
WARNS= 6
-SRCS= pkgdb.c pkgdb_hierdb.c pkgdb_hierdb_pkgdb_sub.c pkg.c pkg_util.c \
- pkg_file.c pkg_dep.c pkg_cfl.c pkg_plist.c
+SRCS= pkgdb.c pkgdb_hierdb.c pkg.c pkg_util.c pkg_file.c \
+ pkg_dep.c pkg_cfl.c pkg_plist.c pkg_sub.c
NO_MAN= yes
.include <bsd.lib.mk>
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#27 (text+ko) ====
@@ -9,7 +9,6 @@
#include "pkg_file.h"
#include "pkg_cfl.h"
#include "pkg_plist.h"
-#include "pkgdb_hierdb_pkgdb_sub.h"
#include "pkgdb_hierdb.h"
#include "pkgdb.h"
#include "pkg_private.h"
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#26 (text+ko) ====
@@ -25,6 +25,7 @@
#define DB_NOT_OPEN 0x40000000
#define DB_OPEN 0x80000000
#define DB_NO_PKG 0x01000000
+#define DB_MEMORY_ERR 0x02000000
/* These should probably go to _private */
#define SUB_OK 0x00000000
@@ -36,6 +37,7 @@
#define SUB_NO_REQUIRED_BY 0x02000000
#define SUB_NO_FILE 0x04000000
#define SUB_EMPTY_FILE 0x08000000
+#define SUB_MEMORY_ERR 0x00100000
/* PKG Errors. */
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.h#17 (text+ko) ====
@@ -1,6 +1,8 @@
#ifndef __PKG_PLIST_H__
#define __PKG_PLIST_H__
+#include <sys/queue.h>
+
/* Make these visible to the client. */
enum plist_elem {
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_sub.c#2 (text+ko) ====
@@ -3,57 +3,68 @@
#include <string.h>
#include <sys/types.h>
-#include <sys/stats.h>
+#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
+#include "pkg_private.h"
+#include "pkg_util.h"
#include "pkg_plist.h"
#include "pkg.h"
#include "pkg_sub.h"
-struct pkg_sub {
- /* directory name, path. */
- char *ident;
- char *path;
-
- /* parsed plist. */
- struct pkg_plist *pl;
-
- /* relevant text. */
- char *comment_text;
- char *contents_text;
- char *desc_text;
- char *display_text;
- char *mtree_dirs_text;
- char *required_by_text;
-
- /* status and error. */
- short dirty;
- int error;
-}
-
int
pkg_sub_mark_dirty(struct pkg_sub *ps)
{
- if (!VALID_PKG_SUB(ps))
+ if (ps == NULL)
arg_rage_quit(__func__, "Not a valid package directory.",
RAGE_AT_LIBPKG);
- dir->dirty = 1;
+ ps->dirty = 1;
return (PKG_SUB_OK);
}
int
pkg_sub_mark_clean(struct pkg_sub *ps)
{
- if (!VALID_PKG_SUB(ps))
+ if (ps == NULL)
arg_rage_quit(__func__, "Not a valid package directory.",
RAGE_AT_LIBPKG);
- dir->dirty = 0;
+ ps->dirty = 0;
return (PKG_SUB_OK);
}
+const char *
+pkg_sub_file_id(enum pkg_sub_file_ident id)
+{
+ const char *ret;
+ switch (id) {
+ case (COMMENT_FILE_ID):
+ ret = COMMENT_FILE;
+ break;
+ case (CONTENTS_FILE_ID):
+ ret = CONTENTS_FILE;
+ break;
+ case (DESC_FILE_ID):
+ ret = DESC_FILE;
+ break;
+ case (DISPLAY_FILE_ID):
+ ret = DISPLAY_FILE;
+ break;
+ case (MTREE_DIRS_FILE_ID):
+ ret = MTREE_DIRS_FILE;
+ break;
+ case (REQUIRED_BY_FILE_ID):
+ ret = REQUIRED_BY_FILE;
+ break;
+ default:
+ ret = NULL;
+ }
+
+ return (ret);
+}
+
int
pkg_sub_read_file_to_text(struct pkg_sub *ps, enum pkg_sub_file_ident id)
{
@@ -62,9 +73,11 @@
char *path;
char *text;
const char *filename;
- struct stat db;
+ struct stat sb;
- filename = pkg_sub_id(id);
+ filename = pkg_sub_file_id(id);
+ if (filename == NULL)
+ return (PKG_SUB_NOT_OK);
path = path_build(ps->path, filename);
s = lstat(path, &sb);
if (s < 0 || !S_ISREG(sb.st_mode)) {
@@ -72,14 +85,14 @@
return (PKG_SUB_NOT_OK | PKG_SUB_NO_FILE);
}
if (sb.st_size == 0) {
- free(path)
+ free(path);
return (PKG_SUB_NOT_OK | PKG_SUB_EMPTY_FILE);
}
fd = open(path, O_RDONLY);
free(path);
if (fd < 0)
- return (PKG_SUB_NOT_OK | PKG_SUB_COULD_NOT_OPEN);
+ return (PKG_SUB_NOT_OK | PKG_SUB_COULD_NOT_OPEN_FILE);
text = malloc(sb.st_size + 1);
if (text == NULL) {
@@ -113,7 +126,7 @@
case REQUIRED_BY_FILE_ID:
ps->required_by_text = text;
break;
- default
+ default:
free(text);
return (PKG_SUB_NO_FILE);
}
@@ -121,37 +134,66 @@
return (PKG_SUB_OK);
}
+
+/* Read all files into memory at once. */
+
+int
+pkg_sub_read_files(struct pkg_sub *ps)
+{
+ int status;
+ if (ps == NULL)
+ arg_rage_quit(__func__, "Not a valid pkg_sub.", RAGE_AT_LIBPKG);
+
+ status = PKG_SUB_OK;
+ status |= pkg_sub_read_file_to_text(ps, COMMENT_FILE_ID);
+ status |= pkg_sub_read_file_to_text(ps, CONTENTS_FILE_ID);
+ status |= pkg_sub_read_file_to_text(ps, DESC_FILE_ID);
+ status |= pkg_sub_read_file_to_text(ps, DISPLAY_FILE_ID);
+ status |= pkg_sub_read_file_to_text(ps, MTREE_DIRS_FILE_ID);
+ status |= pkg_sub_read_file_to_text(ps, REQUIRED_BY_FILE_ID);
+
+
+ return (status);
+}
+
+int
+pkg_sub_reset(struct pkg_sub *ps)
+{
+ if (ps) ;;
+ return (PKG_SUB_OK);
+}
+
/* Initialize a pkg_sub in a pkgdb. */
+
int
-pkg_sub_init(struct pkgdb *db, struct pkg_sub *ps, const char *ident)
+pkg_sub_init(struct pkg_sub *ps, struct pkgdb *db, const char *ident)
{
- char *identp;
char *pathp;
- if (!VALID_PKGDB(db) || !VALID_PKG_SUB(ps) || ident == NULL)
+ if (db == NULL || ps == NULL || ident == NULL)
arg_rage_quit(__func__, "", RAGE_AT_LIBPKG);
- identp = strdup(ident);
+ pkg_sub_reset(ps);
+ pkg_sub_set_ident(ps, ident);
pathp = path_build(pkgdb_db_root(db), ident);
- if (identp == NULL || pathp == NULL) {
- free(identp);
+ if (pathp == NULL) {
free(pathp);
return (PKG_SUB_NOT_OK | PKG_SUB_MEMORY_ERR);
}
- ps->ident = identp;
ps->path = pathp;
-
+
+/*
pkg_plist_delete(ps->pl);
ps->pl = NULL;
-
+*/
free(ps->comment_text);
free(ps->contents_text);
free(ps->desc_text);
free(ps->display_text);
- free(ps->mtree_text);
- free(ps->required_text);
+ free(ps->mtree_dirs_text);
+ free(ps->required_by_text);
ps->comment_text = NULL;
ps->contents_text = NULL;
ps->desc_text = NULL;
@@ -165,12 +207,15 @@
return (PKG_SUB_OK);
}
+int
+pkg_sub_set_ident(struct pkg_sub *ps, const char *ident)
+{
+ if (ps == NULL || ident == NULL)
+ return (PKG_SUB_NOT_OK);
- return (OK);
-}
+ ps->ident = strdup(ident);
+ if (ps->ident == NULL)
+ return (PKG_SUB_NOT_OK | PKG_SUB_MEMORY_ERR);
-int
-pkg_sub_set_plist(struct pkg_sub *ps, struct pkg_plist *pl)
-{
- return (OK);
+ return (PKG_SUB_OK);
}
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_sub.h#2 (text+ko) ====
@@ -1,10 +1,91 @@
#ifndef __PKG_DIR_H__
#define __PKG_DIR_H__
+#include "pkgdb.h"
+
+#define PKG_SUB_MEM_ERR(x) x & SUB_MEMORY_ERR
+
+#define PKG_SUB_OK 0x00000000
+#define PKG_SUB_NOT_OK 0x10000000
+#define PKG_SUB_MEMORY_ERR 0x20000000
+#define PKG_SUB_NO_FILE 0x40000000
+#define PKG_SUB_COULD_NOT_OPEN_FILE 0x80000000
+#define PKG_SUB_EMPTY_FILE 0x01000000
+
+struct pkg_sub {
+ /* directory name, path. */
+ char *ident;
+ char *path;
+
+ /* parsed plist. */
+ struct pkg_plist *pl;
+
+ /* relevant text. */
+ char *comment_text;
+ char *contents_text;
+ char *desc_text;
+ char *display_text;
+ char *mtree_dirs_text;
+ char *required_by_text;
+
+ /* status and error. */
+ short dirty;
+ int error;
+};
+
+enum pkg_sub_file_ident {
+ COMMENT_FILE_ID,
+ CONTENTS_FILE_ID,
+ DESC_FILE_ID,
+ DISPLAY_FILE_ID,
+ MTREE_DIRS_FILE_ID,
+ REQUIRED_BY_FILE_ID
+};
+
struct pkg_sub;
int pkg_sub_mark_dirty(struct pkg_sub *ps);
int pkg_sub_mark_clean(struct pkg_sub *ps);
+int pkg_sub_init(struct pkg_sub *ps, struct pkgdb *db, const char *ident);
+
+int pkg_sub_reset(struct pkg_sub *ps);
+
+const char *pkg_sub_file_id(enum pkg_sub_file_ident id);
+
+int pkg_sub_read_file_to_text(struct pkg_sub *ps,
+ enum pkg_sub_file_ident id);
+
+int pkg_sub_read_files(struct pkg_sub *ps);
+
+const char *pkg_sub_ident(struct pkg_sub *ps);
+
+int pkg_sub_set_ident(struct pkg_sub *ps, const char *ident);
+
+const char *pkg_sub_contents(struct pkg_sub *ps);
+
+int pkg_sub_set_contents(struct pkg_sub *ps, const char *contents);
+
+const char *pkg_sub_comment(struct pkg_sub *ps);
+
+int pkg_sub_set_comment(struct pkg_sub *ps, const char *comment);
+
+const char *pkg_sub_desc(struct pkg_sub *ps);
+
+int pkg_sub_set_desc(struct pkg_sub *ps, const char *desc);
+
+const char *pkg_sub_display(struct pkg_sub *ps);
+
+int pkg_sub_set_display(struct pkg_sub *ps, const char *display);
+
+const char *pkg_sub_mtree_dirs(struct pkg_sub *ps);
+
+int pkg_sub_set_mtree_dirs(struct pkg_sub *ps, const char *mtree_dirs);
+
+const char *pkg_sub_required_by(struct pkg_sub *ps);
+
+int pkg_sub_set_required_by(struct pkg_sub *ps, const char *required_by);
+
+
#endif
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.c#18 (text+ko) ====
@@ -4,7 +4,7 @@
#include <sys/queue.h>
#include "pkg_util.h"
-#include "pkgdb_hierdb_pkgdb_sub.h"
+#include "pkg_sub.h"
#include "pkgdb_hierdb.h"
#include "pkgdb_private.h"
#include "pkgdb.h"
@@ -65,7 +65,7 @@
if (!db->open)
return (DB_NOT_OPEN);
- pkgdb_pkgdb_sub_list_free(db); /* Should set sub_count to 0. */
+ pkgdb_pkg_sub_list_free(db); /* Should set sub_count to 0. */
free(db->db_root);
db->open = 0;
@@ -88,7 +88,7 @@
pkgdb_pkg_next(struct pkgdb *db, struct pkg *p)
{
int status;
- struct pkgdb_sub *sub;
+ struct pkg_sub *ps;
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_CLIENT);
@@ -100,123 +100,108 @@
* can have multiple copies of a package which do not share a state.
* Is this a terrible idea? Stay tuned to find out. */
pkg_reset(p);
- sub = pkgdb_pkgdb_sub_list_next(db);
- if (sub == NULL) {
+ ps = pkgdb_pkg_sub_list_next(db);
+ if (ps == 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
- * doesn't bother with subdirectories that don't have a plist. */
- status |= pkg_set_contents(p, pkgdb_sub_contents(sub));
- status |= pkg_set_comment(p, pkgdb_sub_comment(sub));
- status |= pkg_set_description(p, pkgdb_sub_desc(sub));
- status |= pkg_set_display(p, pkgdb_sub_display(sub));
- status |= pkg_set_mtree_dirs(p, pkgdb_sub_mtree_dirs(sub));
- status |= pkg_set_required_by(p, pkgdb_sub_required_by(sub));
- /* I'm not sure all of these have to be loaded, but we can make a
- * decision about that later. */
+
- /* Error codes to the client. */
return (status);
}
-#if 0
int
pkgdb_pkg_get(struct pkgdb *db, struct pkg *p, const char *ident)
{
/* TODO: Write this function. */
int status;
+ struct pkg_sub *ps;
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_CLIENT);
if (p == NULL)
arg_rage_quit(__func__, "Not a valid package.", RAGE_AT_CLIENT);
+ if (ident == NULL)
+ arg_rage_quit(__func__, "Not a valid identifier.",
+ RAGE_AT_CLIENT);
status = PKG_OK;
pkg_reset(p);
-
- return (OK);
+ ps = pkgdb_pkg_sub_get(db, ident);
+ if (ps == NULL)
+ return (DB_NO_PKG);
+ status = pkg_sub_read_files(ps);
+ if (status == NOT_OK) {
+ /* might have to free some things in here. */
+ return (NOT_OK);
+ }
+
+ return (status);
}
-/* Grab a specific sub out of the pkgdb_sub list. */
-struct pkgdb_sub *
-pkgdb_pkgdb_sub_get(struct pkgdb *db, const char *ident)
+struct pkg_sub *
+pkgdb_pkg_sub_get(struct pkgdb *db, const char *ident)
{
- /* TODO: Write this function. */
- return (NULL);
+ struct pkg_sub *ps;
+
+ if (db || ident)
+ ;;
+
+ ps = NULL;
+
+ return (ps);
}
-#endif
void
-pkgdb_pkgdb_sub_list_free(struct pkgdb *db)
-{
- 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);
- sub1 = pkgdb_pkgdb_sub_list_first(db);
- while (sub1 != NULL) {
- sub2 = pkgdb_pkgdb_sub_list_next(db);
- pkgdb_sub_reset(sub1);
- sub1 = sub2;
- }
+pkgdb_pkg_sub_list_free(struct pkgdb *db)
+{
+ if (db) return;
+ return;
}
-struct pkgdb_sub *
-pkgdb_pkgdb_sub_list_next(struct pkgdb *db)
+struct pkg_sub *
+pkgdb_pkg_sub_list_next(struct pkgdb *db)
{
- struct pkgdb_sub *sub;
+ struct pkg_sub *ps;
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
- if (db->sub_curr == NULL)
- sub = pkgdb_pkgdb_sub_list_first(db);
- else
- sub = TAILQ_NEXT(db->sub_curr, next);
-
- if (sub != NULL)
- db->sub_curr = sub;
-
- return (sub);
+ ps = NULL;
+ return (ps);
}
-struct pkgdb_sub *
-pkgdb_pkgdb_sub_list_first(struct pkgdb *db)
+struct pkg_sub *
+pkgdb_pkg_sub_list_first(struct pkgdb *db)
{
- struct pkgdb_sub *sub;
+ struct pkg_sub *ps;
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
-
- sub = TAILQ_FIRST(&db->sub_head);
- return (sub);
+
+ ps = db->ps_list + 0;
+ return (ps);
}
void
-pkgdb_pkgdb_sub_list_append(struct pkgdb *db, struct pkgdb_sub *sub)
+pkgdb_pkg_sub_list_append(struct pkgdb *db, struct pkg_sub *ps)
{
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
- if (sub == NULL)
+ if (ps == NULL)
arg_rage_quit(__func__, "Not a valid sub directory.",
RAGE_AT_LIBPKG);
-
- TAILQ_INSERT_TAIL(&db->sub_head, sub, next);
+ return;
}
void
-pkgdb_pkgdb_sub_list_init(struct pkgdb *db)
+pkgdb_pkg_sub_list_init(struct pkgdb *db)
{
if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
- TAILQ_INIT(&db->sub_head);
+ db->ps_curr = NULL;
}
char *
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb.h#12 (text+ko) ====
@@ -5,15 +5,18 @@
struct pkgdb;
-void pkgdb_pkgdb_sub_list_free(struct pkgdb *db);
+void pkgdb_pkg_sub_list_free(struct pkgdb *db);
+
+void pkgdb_pkg_sub_list_init(struct pkgdb *db);
+
+void pkgdb_pkg_sub_list_reset_iter(struct pkgdb *db);
-void pkgdb_pkgdb_sub_list_init(struct pkgdb *db);
+struct pkg_sub *pkgdb_pkg_sub_list_next(struct pkgdb *db);
-struct pkgdb_sub *pkgdb_pkgdb_sub_list_next(struct pkgdb *db);
+struct pkg_sub *pkgdb_pkg_sub_list_first(struct pkgdb *db);
-struct pkgdb_sub *pkgdb_pkgdb_sub_list_first(struct pkgdb *db);
+void pkgdb_pkg_sub_list_append(struct pkgdb *db, struct pkg_sub *sub);
-void pkgdb_pkgdb_sub_list_append(struct pkgdb *db, struct pkgdb_sub *sub);
+struct pkg_sub *pkgdb_pkg_sub_get(struct pkgdb *db, const char *ident);
-struct pkgdb_sub *pkgdb_pkgdb_sub_get(struct pkgdb *db, const char *ident);
#endif
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb.c#9 (text+ko) ====
@@ -12,7 +12,6 @@
#include "pkgdb.h"
#include "pkgdb_private.h"
#include "pkgdb_hierdb.h"
-#include "pkgdb_hierdb_pkgdb_sub.h"
#include "pkg_sub.h"
int
@@ -43,9 +42,8 @@
db->dirty = 1;
db->open = 1;
- db->sub_curr = NULL;
- db->sub_count = 0;
-
+ db->ps_curr = NULL;
+ db->ps_count = 0;
return (OK);
}
@@ -57,11 +55,8 @@
int c;
int cnt;
int status;
- struct pkgdb_sub *sub;
struct dirent **ents;
-#if 0
- struct pkg_dir *pkg_list;
-#endif
+ struct pkg_sub *ps_list;
#if 0
if (!VALID_DB(db))
#endif
@@ -74,95 +69,70 @@
if (c < 1)
return (NOT_OK | MEMORY_ERR);
-#if 0
- pkg_list = calloc(c, sizeof(*pkg_list));
- if (pkg_list = NULL)
+ ps_list = calloc(c, sizeof(*ps_list));
+ if (ps_list == NULL)
return (NOT_OK | MEMORY_ERR);
- for i = 0, cnt = 0; i < c; ++i) {
- status |= pkg_sub_init(db, pkg_list[i], ents[i]->d_name);
- if (PKG_SUB_MEMORY_ERR(status)) {
+ for (i = 0, cnt = 0; i < c; ++i) {
+ if (ents[i]->d_type != DT_DIR) {
+ --cnt;
+ continue;
+ }
+ status |= pkg_sub_init(ps_list + i, db, ents[i]->d_name);
+ if (PKG_SUB_MEM_ERR(status)) {
pkgdb_pkg_sub_list_free(db);
for (; i < c; ++i)
free(ents[i]);
free(ents);
- return (PKGDB_NOT_OK | PKGDB_MEMORY_ERR);
+ return (DB_NOT_OK | DB_MEMORY_ERR);
}
free(ents[i]);
}
free(ents);
-#endif
-
- pkgdb_pkgdb_sub_list_init(db);
- for (i = 0, cnt = 0; i < c; ++i) {
- sub = pkgdb_sub_new();
- status = pkgdb_hierdb_read_pkgdb_sub(db, sub, ents[i]->d_name);
- if (MEMORY_ERR & status) {
- /* Ruh roh Shaggy! */
- pkgdb_pkgdb_sub_list_free(db);
- for (; i < c; ++i)
- free(ents[i]);
- free(ents);
- return (MEMORY_ERR);
- } else if ((SUB_NO_CONTENTS & status) || (BAD_IDENT & status))
- /*
- * This is a directory that is of no use to us. I am
- * enforcing strict rules on what is and isn't a package. If
- * there is no plist, or the plist is empty, this is not a
- * package, and we don't care about it.
- */
- pkgdb_sub_delete(sub);
- else {
- pkgdb_pkgdb_sub_list_append(db, sub);
- cnt++;
- }
- free(ents[i]);
- }
- free(ents);
+ db->ps_list = ps_list;
- db->sub_curr = NULL;
- db->sub_count = cnt;
+ db->ps_curr = NULL;
+ db->ps_count = cnt;
db->dirty = 0;
return (OK);
}
-/* This function will properly initialize a pkgdb_sub for a pkgdb to use.
- * This includes setting db as the owner of dbs. */
int
-pkgdb_hierdb_read_pkgdb_sub(struct pkgdb *db, struct pkgdb_sub *sub,
+pkgdb_hierdb_read_pkg_sub(struct pkgdb *db, struct pkg_sub *ps,
const char *ident)
{
int status;
#if 0 /* The client doesn't know about the functions in this file. */
if (!VALID_DB(x))
+#endif
+ if (db == NULL)
arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_CLIENT);
if (ident == NULL)
arg_rage_quit(__func__, "Not a valid identification string.",
RAGE_AT_CLIENT);
-#endif
- pkgdb_sub_reset(sub);
+ pkg_sub_reset(ps);
status = OK;
- status |= pkgdb_sub_set_ident(sub, ident);
+ status |= pkg_sub_set_ident(ps, ident);
/* Directory is verified here. */
- status |= pkgdb_sub_set_assign_db(db, sub);
+ // status |= pkgdb_sub_set_assign_db(db, ps);
if ((MEMORY_ERR & status) || (BAD_IDENT & status))
return (status);
/* Hope you have your reading glasses on... */
status = OK;
- status |= pkgdb_sub_read_file_to_text(sub, COMMENT_FILE) &
+ status |= pkg_sub_read_file_to_text(ps, COMMENT_FILE_ID) &
(SUB_EMPTY_FILE | SUB_NO_FILE) ? SUB_NO_COMMENT : OK;
- status |= pkgdb_sub_read_file_to_text(sub, CONTENTS_FILE) &
+ status |= pkg_sub_read_file_to_text(ps, CONTENTS_FILE_ID) &
(SUB_EMPTY_FILE | SUB_NO_FILE) ? SUB_NO_CONTENTS : OK;
- status |= pkgdb_sub_read_file_to_text(sub, DESC_FILE) &
+ status |= pkg_sub_read_file_to_text(ps, DESC_FILE_ID) &
(SUB_EMPTY_FILE | SUB_NO_FILE) ? SUB_NO_DESC : OK;
- status |= pkgdb_sub_read_file_to_text(sub, DISPLAY_FILE) &
+ status |= pkg_sub_read_file_to_text(ps, DISPLAY_FILE_ID) &
(SUB_EMPTY_FILE | SUB_NO_FILE) ? SUB_NO_DISPLAY : OK;
- status |= pkgdb_sub_read_file_to_text(sub, MTREE_DIRS_FILE) &
+ status |= pkg_sub_read_file_to_text(ps, MTREE_DIRS_FILE_ID) &
(SUB_EMPTY_FILE | SUB_NO_FILE) ? SUB_NO_MTREE_DIRS : OK;
- status |= pkgdb_sub_read_file_to_text(sub, REQUIRED_BY_FILE) &
+ status |= pkg_sub_read_file_to_text(ps, REQUIRED_BY_FILE_ID) &
(SUB_EMPTY_FILE | SUB_NO_FILE) ? SUB_NO_REQUIRED_BY : OK;
return (status);
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_hierdb.h#5 (text+ko) ====
@@ -2,12 +2,13 @@
#define __PKGDB_HIERDB_H__
#include "pkg.h"
+#include "pkg_sub.h"
int pkgdb_hierdb_db_open(struct pkgdb *db, const char *db_root);
int pkgdb_hierdb_db_init(struct pkgdb *db);
-int pkgdb_hierdb_read_pkgdb_sub(struct pkgdb *db, struct pkgdb_sub *dbs,
+int pkgdb_hierdb_read_pkg_sub(struct pkgdb *db, struct pkg_sub *ps,
const char *ident);
/* int pkgdb_hierdb_db_close(struct pkgdb *db); */
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkgdb_private.h#3 (text+ko) ====
@@ -3,8 +3,6 @@
#include <sys/queue.h>
-#include "pkgdb_hierdb_pkgdb_sub.h"
-
struct pkgdb {
int open;
int type;
@@ -13,13 +11,15 @@
char *db_root;
- int sub_count;
- struct pkgdb_sub *sub_curr;
-
- TAILQ_HEAD(sub_head, pkgdb_sub) sub_head;
+ int ps_count;
+
+ struct pkg_sub *ps_curr;
+ struct pkg_sub *ps_list;
int (*pkgdb_db_open) (struct pkgdb *db, const char *db_root);
int (*pkgdb_db_init) (struct pkgdb *db);
+ int (*pkgdb_db_read_sub) (struct pkgdb *db, struct pkg_sub *ps,
+ const char *ident);
int (*pkgdb_db_close) (struct pkgdb *db);
int (*pkgdb_db_sync) (struct pkgdb *db);
};
More information about the p4-projects
mailing list