aboutsummaryrefslogtreecommitdiff
path: root/src/libndb
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-12-26 04:54:12 +0000
committerrsc <devnull@localhost>2005-12-26 04:54:12 +0000
commit34d1b690efa2eb5e19efbb83137938c9395f515f (patch)
treeb32a945cedd5fe1e128a8efe046256718d1b9e66 /src/libndb
parent87a52e0485d3281ebea6bf4b725aa8023690e96f (diff)
downloadplan9port-34d1b690efa2eb5e19efbb83137938c9395f515f.tar.gz
plan9port-34d1b690efa2eb5e19efbb83137938c9395f515f.tar.bz2
plan9port-34d1b690efa2eb5e19efbb83137938c9395f515f.zip
relative paths; open #9/ndb/local
Diffstat (limited to 'src/libndb')
-rw-r--r--src/libndb/ndbopen.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/libndb/ndbopen.c b/src/libndb/ndbopen.c
index d504702e..fdda79ec 100644
--- a/src/libndb/ndbopen.c
+++ b/src/libndb/ndbopen.c
@@ -5,10 +5,10 @@
#include <ndb.h>
#include "ndbhf.h"
-static Ndb* doopen(char*);
+static Ndb* doopen(char*, char*);
static void hffree(Ndb*);
-static char *deffile = "/lib/ndb/local";
+static char *deffile = "#9/ndb/local";
/*
* the database entry in 'file' indicates the list of files
@@ -23,8 +23,8 @@ ndbopen(char *file)
Ndbtuple *t, *nt;
if(file == 0)
- file = deffile;
- db = doopen(file);
+ file = unsharp(deffile);
+ db = doopen(file, nil);
if(db == 0)
return 0;
first = last = db;
@@ -48,7 +48,7 @@ ndbopen(char *file)
}
continue;
}
- db = doopen(nt->val);
+ db = doopen(nt->val, file);
if(db == 0)
continue;
last->next = db;
@@ -62,15 +62,25 @@ ndbopen(char *file)
* open a single file
*/
static Ndb*
-doopen(char *file)
+doopen(char *file, char *rel)
{
+ char *p;
Ndb *db;
db = (Ndb*)malloc(sizeof(Ndb));
if(db == 0)
return 0;
+
memset(db, 0, sizeof(Ndb));
- strncpy(db->file, file, sizeof(db->file)-1);
+ /*
+ * Rooted paths are taken as is.
+ * Unrooted paths are taken relative to db we opened.
+ */
+ if(file[0]!='/' && rel && (p=strrchr(rel, '/'))!=nil)
+ snprint(db->file, sizeof(db->file), "%.*s/%s",
+ utfnlen(rel, p-rel), rel, file);
+ else
+ strncpy(db->file, file, sizeof(db->file)-1);
if(ndbreopen(db) < 0){
free(db);