commit 34d1b690efa2eb5e19efbb83137938c9395f515f from: rsc date: Mon Dec 26 04:54:12 2005 UTC relative paths; open #9/ndb/local commit - 87a52e0485d3281ebea6bf4b725aa8023690e96f commit + 34d1b690efa2eb5e19efbb83137938c9395f515f blob - d504702ee99ebd6b6ed6f1ea3ef35c0b8891092b blob + fdda79ec7d2bf92ac075574af880b139d7e3214d --- src/libndb/ndbopen.c +++ src/libndb/ndbopen.c @@ -5,10 +5,10 @@ #include #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);