commit - 87a52e0485d3281ebea6bf4b725aa8023690e96f
commit + 34d1b690efa2eb5e19efbb83137938c9395f515f
blob - d504702ee99ebd6b6ed6f1ea3ef35c0b8891092b
blob + fdda79ec7d2bf92ac075574af880b139d7e3214d
--- src/libndb/ndbopen.c
+++ src/libndb/ndbopen.c
#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
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;
}
continue;
}
- db = doopen(nt->val);
+ db = doopen(nt->val, file);
if(db == 0)
continue;
last->next = db;
* 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);