summaryrefslogtreecommitdiff
path: root/pkgtools/pkg_install/files/lib/pkgdb.c
diff options
context:
space:
mode:
authorjschauma <jschauma@pkgsrc.org>2003-01-06 04:34:15 +0000
committerjschauma <jschauma@pkgsrc.org>2003-01-06 04:34:15 +0000
commit588eb561c11d1e286eb9f53adb95d0835ba3ecd0 (patch)
tree47922a126964577f4de990bbc9ed7e6b489cf026 /pkgtools/pkg_install/files/lib/pkgdb.c
parent0e29f29c69028a0b688eeb13d50b64c4e0f83682 (diff)
downloadpkgsrc-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.c31
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;
}