diff options
author | jschauma <jschauma@pkgsrc.org> | 2003-01-06 04:34:15 +0000 |
---|---|---|
committer | jschauma <jschauma@pkgsrc.org> | 2003-01-06 04:34:15 +0000 |
commit | 588eb561c11d1e286eb9f53adb95d0835ba3ecd0 (patch) | |
tree | 47922a126964577f4de990bbc9ed7e6b489cf026 /pkgtools/pkg_install/files/lib/pkgdb.c | |
parent | 0e29f29c69028a0b688eeb13d50b64c4e0f83682 (diff) | |
download | pkgsrc-588eb561c11d1e286eb9f53adb95d0835ba3ecd0.tar.gz |
Synch with basesrc:
Use EXIT_FAILURE, rather than hardcoding a value of '1' in err(3) and
errx(3).
Plug a memory leak by modifying the signature of
_pkgdb_getPKGDB_FILE() to take a buffer and its size, and fill in that
buffer and return it.
Add an enumerated type which is used in pkgdb_open() to specify
read-only or read-write mode.
Modify the return value of pkgdb_open() to have a more logical boolean
value.
Diffstat (limited to 'pkgtools/pkg_install/files/lib/pkgdb.c')
-rw-r--r-- | pkgtools/pkg_install/files/lib/pkgdb.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/pkgtools/pkg_install/files/lib/pkgdb.c b/pkgtools/pkg_install/files/lib/pkgdb.c index 1ae6d622307..b81d2718857 100644 --- a/pkgtools/pkg_install/files/lib/pkgdb.c +++ b/pkgtools/pkg_install/files/lib/pkgdb.c @@ -1,9 +1,9 @@ -/* $NetBSD: pkgdb.c,v 1.1.1.1 2002/12/20 18:14:03 schmonz Exp $ */ +/* $NetBSD: pkgdb.c,v 1.2 2003/01/06 04:34:17 jschauma Exp $ */ #if 0 #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: pkgdb.c,v 1.1.1.1 2002/12/20 18:14:03 schmonz Exp $"); +__RCSID("$NetBSD: pkgdb.c,v 1.2 2003/01/06 04:34:17 jschauma Exp $"); #endif #endif @@ -75,10 +75,11 @@ static int pkgdb_iter_flag; * -1: error, see errno */ int -pkgdb_open(int ro) +pkgdb_open(int mode) { #if defined(HAVE_DBOPEN) BTREEINFO info; + char cachename[FILENAME_MAX]; pkgdb_iter_flag = 0; /* used in pkgdb_iter() */ @@ -91,8 +92,8 @@ pkgdb_open(int ro) info.compare = NULL; info.prefix = NULL; info.lorder = 0; - pkgdbp = (DB *) dbopen(_pkgdb_getPKGDB_FILE(), - ro ? O_RDONLY : O_RDWR | O_CREAT, + pkgdbp = (DB *) dbopen(_pkgdb_getPKGDB_FILE(cachename, sizeof(cachename)), + (mode == ReadOnly) ? O_RDONLY : O_RDWR | O_CREAT, 0644, DB_BTREE, (void *) &info); return (pkgdbp == NULL) ? -1 : 0; #else @@ -244,32 +245,24 @@ pkgdb_iter(void) } /* - * Return filename as string that can be passed to free(3) + * Return name of cache file in the buffer that was passed. */ -char * -_pkgdb_getPKGDB_FILE(void) +char * +_pkgdb_getPKGDB_FILE(char *buf, unsigned size) { - char *tmp; - - tmp = malloc(FILENAME_MAX); - if (tmp == NULL) - errx(1, "_pkgdb_getPKGDB_FILE: out of memory"); - snprintf(tmp, FILENAME_MAX, "%s/%s", _pkgdb_getPKGDB_DIR(), PKGDB_FILE); - return tmp; + (void) snprintf(buf, size, "%s/%s", _pkgdb_getPKGDB_DIR(), PKGDB_FILE); + return buf; } /* * Return directory where pkgdb is stored - * as string that can be passed to free(3) */ -char * +char * _pkgdb_getPKGDB_DIR(void) { char *tmp; static char *cache = NULL; - if (cache == NULL) cache = (tmp = getenv(PKG_DBDIR)) ? tmp : DEF_LOG_DIR; - return cache; } |