Commit 48ffffc8 authored by lw's avatar lw

*** empty log message ***

parent 9e1757fc
...@@ -354,13 +354,31 @@ dbs_Open(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename) ...@@ -354,13 +354,31 @@ dbs_Open(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename)
return ep; return ep;
} }
static void
printTree(dbs_sEnv *ep, dbs_sObject *op, int indent)
{
pwr_tStatus sts;
static char space[] = " ";
if (op == NULL)
return;
space[indent] = '\0';
printf("T %s %d.%d %s\n", space, op->oid.vid, op->oid.oix, op->name);
space[indent] = ' ';
printTree(ep, dbs_First(&sts, ep, op), indent + 1);
printTree(ep, dbs_After(&sts, ep, op), indent);
}
dbs_sEnv * dbs_sEnv *
dbs_Map(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename) dbs_Map(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename)
{ {
struct stat sb; struct stat sb;
int ret; int ret;
int fd; int fd;
#define DBS_DEBUG 1
#if DBS_DEBUG #if DBS_DEBUG
int i; int i;
dbs_sFile *fp; dbs_sFile *fp;
...@@ -384,18 +402,18 @@ dbs_Map(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename) ...@@ -384,18 +402,18 @@ dbs_Map(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename)
#if DBS_DEBUG #if DBS_DEBUG
printf("st_dev....: %d\t\t%s\n", (int)sb.st_dev, "device"); printf("st_dev....: %d\t\t%s\n", (int)sb.st_dev, "device");
printf("st_ino....: %d\t%s\n", sb.st_ino, "inode"); printf("st_ino....: %ld\t%s\n", sb.st_ino, "inode");
printf("st_mode...: %d\t%s\n", sb.st_mode, "protection"); printf("st_mode...: %d\t%s\n", sb.st_mode, "protection");
printf("st_nlink..: %d\t\t%s\n", sb.st_nlink, "number of hard links"); printf("st_nlink..: %d\t\t%s\n", sb.st_nlink, "number of hard links");
printf("st_uid....: %d\t%s\n", sb.st_uid, "user ID of owner"); printf("st_uid....: %d\t%s\n", sb.st_uid, "user ID of owner");
printf("st_gid....: %d\t\t%s\n", sb.st_gid, "group ID of owner"); printf("st_gid....: %d\t\t%s\n", sb.st_gid, "group ID of owner");
printf("st_redv...: %d\t\t%s\n", (int)sb.st_rdev, "device type (if inode device)"); printf("st_redv...: %d\t\t%s\n", (int)sb.st_rdev, "device type (if inode device)");
printf("st_size...: %d\t\t%s\n", sb.st_size, "total size, in bytes"); printf("st_size...: %ld\t\t%s\n", sb.st_size, "total size, in bytes");
printf("st_blksize: %d\t%s\n", sb.st_blksize, "blocksize for filesystem I/O"); printf("st_blksize: %ld\t%s\n", sb.st_blksize, "blocksize for filesystem I/O");
printf("st_blocks.: %d\t\t%s\n", sb.st_blocks, "number of blocks allocated"); printf("st_blocks.: %ld\t\t%s\n", sb.st_blocks, "number of blocks allocated");
printf("st_atime..: %d\t%s\n", sb.st_atime, "time of last access"); printf("st_atime..: %ld\t%s\n", sb.st_atime, "time of last access");
printf("st_mtime..: %d\t%s\n", sb.st_mtime, "time of last modification"); printf("st_mtime..: %ld\t%s\n", sb.st_mtime, "time of last modification");
printf("st_ctime..: %d\t%s\n", sb.st_ctime, "time of last change"); printf("st_ctime..: %ld\t%s\n", sb.st_ctime, "time of last change");
printf("st_mode...: %d\t%s\n", sb.st_mode, "mode"); printf("st_mode...: %d\t%s\n", sb.st_mode, "mode");
#endif #endif
...@@ -421,10 +439,9 @@ dbs_Map(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename) ...@@ -421,10 +439,9 @@ dbs_Map(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename)
ep->sect = (dbs_sSect*)(ep->base + dbs_dAlign(sizeof(dbs_sFile))); ep->sect = (dbs_sSect*)(ep->base + dbs_dAlign(sizeof(dbs_sFile)));
ep->vp = (dbs_sVolume*)(ep->base + ep->sect[dbs_eSect_volume].offset); ep->vp = (dbs_sVolume*)(ep->base + ep->sect[dbs_eSect_volume].offset);
ep->vrp = (dbs_sVolRef*)(ep->base + ep->sect[dbs_eSect_volref].offset); ep->vrp = (dbs_sVolRef*)(ep->base + ep->sect[dbs_eSect_volref].offset);
ep->name_bt = (dbs_sBintab*)(ep->base + ep->sect[dbs_eSect_name].offset); ep->name_bt = &ep->vp->name_bt;
ep->oid_bt = (dbs_sBintab*)(ep->base + ep->sect[dbs_eSect_oid].offset); ep->oid_bt = &ep->vp->oid_bt;
ep->class_bt = (dbs_sBintab*)(ep->base + ep->sect[dbs_eSect_class].offset); ep->class_bt = &ep->vp->class_bt;
#if DBS_DEBUG #if DBS_DEBUG
fp = (dbs_sFile*)ep->base; fp = (dbs_sFile*)ep->base;
...@@ -552,6 +569,10 @@ dbs_Map(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename) ...@@ -552,6 +569,10 @@ dbs_Map(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename)
op = dbs_Next(&sts, ep, op); op = dbs_Next(&sts, ep, op);
} }
} }
op = dbs_VolumeObject(sts, ep);
printTree(ep, op, 0);
#endif #endif
return ep; return ep;
} }
...@@ -610,9 +631,8 @@ dbs_OidToObject(pwr_tStatus *sts, const dbs_sEnv *ep, pwr_tOid oid) ...@@ -610,9 +631,8 @@ dbs_OidToObject(pwr_tStatus *sts, const dbs_sEnv *ep, pwr_tOid oid)
{ {
dbs_sOid *oidp; dbs_sOid *oidp;
dbs_sObject *op; dbs_sObject *op;
dbs_sVolume *vp = (dbs_sVolume *)(ep->base + ep->sect[dbs_eSect_volume].offset);
oidp = (dbs_sOid *)dbs_Bfind(sts, ep, &vp->oid_bt, &oid, comp_oid); oidp = (dbs_sOid *)dbs_Bfind(sts, ep, ep->oid_bt, &oid, comp_oid);
if (oidp == NULL) if (oidp == NULL)
return NULL; return NULL;
...@@ -625,12 +645,11 @@ dbs_sObject * ...@@ -625,12 +645,11 @@ dbs_sObject *
dbs_After(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op) dbs_After(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op)
{ {
dbs_sOid *oidp; dbs_sOid *oidp;
dbs_sVolume *vp = (dbs_sVolume *)(ep->base + ep->sect[dbs_eSect_volume].offset);
dbs_sQlink *ol; dbs_sQlink *ol;
dbs_sObject *pop; dbs_sObject *pop;
oidp = (dbs_sOid *)dbs_Bfind(sts, ep, &vp->oid_bt, &op->poid, comp_oid); oidp = (dbs_sOid *)dbs_Bfind(sts, ep, ep->oid_bt, &op->poid, comp_oid);
if (oidp == NULL) if (oidp == NULL)
return NULL; return NULL;
...@@ -649,12 +668,11 @@ dbs_sObject * ...@@ -649,12 +668,11 @@ dbs_sObject *
dbs_Before(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op) dbs_Before(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op)
{ {
dbs_sOid *oidp; dbs_sOid *oidp;
dbs_sVolume *vp = (dbs_sVolume *)(ep->base + ep->sect[dbs_eSect_volume].offset);
dbs_sQlink *ol; dbs_sQlink *ol;
dbs_sObject *pop; dbs_sObject *pop;
oidp = (dbs_sOid *)dbs_Bfind(sts, ep, &vp->oid_bt, &op->poid, comp_oid); oidp = (dbs_sOid *)dbs_Bfind(sts, ep, ep->oid_bt, &op->poid, comp_oid);
if (oidp == NULL) if (oidp == NULL)
return NULL; return NULL;
...@@ -707,11 +725,10 @@ dbs_NameToObject(pwr_tStatus *sts, const dbs_sEnv *ep, pwr_tOid oid, char *name) ...@@ -707,11 +725,10 @@ dbs_NameToObject(pwr_tStatus *sts, const dbs_sEnv *ep, pwr_tOid oid, char *name)
{ {
dbs_sOid *oidp; dbs_sOid *oidp;
dbs_sObject *op; dbs_sObject *op;
dbs_sVolume *vp = (dbs_sVolume *)(ep->base + ep->sect[dbs_eSect_volume].offset);
dbs_sName n; dbs_sName n;
dbs_sName *np; dbs_sName *np;
oidp = (dbs_sOid *)dbs_Bfind(sts, ep, &vp->oid_bt, &oid, comp_oid); oidp = (dbs_sOid *)dbs_Bfind(sts, ep, ep->oid_bt, &oid, comp_oid);
if (oidp == NULL) if (oidp == NULL)
return NULL; return NULL;
...@@ -722,7 +739,7 @@ dbs_NameToObject(pwr_tStatus *sts, const dbs_sEnv *ep, pwr_tOid oid, char *name) ...@@ -722,7 +739,7 @@ dbs_NameToObject(pwr_tStatus *sts, const dbs_sEnv *ep, pwr_tOid oid, char *name)
n.poix = oid.oix; n.poix = oid.oix;
strcpy(n.normname, name); strcpy(n.normname, name);
np = (dbs_sName *)dbs_Bfind(sts, ep, &vp->name_bt, &n, comp_name); np = (dbs_sName *)dbs_Bfind(sts, ep, ep->name_bt, &n, comp_name);
if (np == NULL) if (np == NULL)
return NULL; return NULL;
...@@ -753,10 +770,9 @@ dbs_sObject * ...@@ -753,10 +770,9 @@ dbs_sObject *
dbs_ClassToObject(pwr_tStatus *sts, const dbs_sEnv *ep, pwr_tCid cid) dbs_ClassToObject(pwr_tStatus *sts, const dbs_sEnv *ep, pwr_tCid cid)
{ {
dbs_sClass *cp; dbs_sClass *cp;
dbs_sVolume *vp = (dbs_sVolume *)(ep->base + ep->sect[dbs_eSect_volume].offset);
dbs_sQlink *ol; dbs_sQlink *ol;
cp = (dbs_sClass *)dbs_Bfind(sts, ep, &vp->class_bt, &cid, comp_cid); cp = (dbs_sClass *)dbs_Bfind(sts, ep, ep->class_bt, &cid, comp_cid);
if (cp == NULL) if (cp == NULL)
return NULL; return NULL;
...@@ -772,10 +788,9 @@ dbs_sObject * ...@@ -772,10 +788,9 @@ dbs_sObject *
dbs_Next(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op) dbs_Next(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op)
{ {
dbs_sClass *cp; dbs_sClass *cp;
dbs_sVolume *vp = (dbs_sVolume *)(ep->base + ep->sect[dbs_eSect_volume].offset);
dbs_sQlink *ol; dbs_sQlink *ol;
cp = (dbs_sClass *)dbs_Bfind(sts, ep, &vp->class_bt, &op->cid, comp_cid); cp = (dbs_sClass *)dbs_Bfind(sts, ep, ep->class_bt, &op->cid, comp_cid);
if (cp == NULL) if (cp == NULL)
return NULL; return NULL;
...@@ -791,10 +806,9 @@ dbs_sObject * ...@@ -791,10 +806,9 @@ dbs_sObject *
dbs_Previous(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op) dbs_Previous(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op)
{ {
dbs_sClass *cp; dbs_sClass *cp;
dbs_sVolume *vp = (dbs_sVolume *)(ep->base + ep->sect[dbs_eSect_volume].offset);
dbs_sQlink *ol; dbs_sQlink *ol;
cp = (dbs_sClass *)dbs_Bfind(sts, ep, &vp->class_bt, &op->cid, comp_cid); cp = (dbs_sClass *)dbs_Bfind(sts, ep, ep->class_bt, &op->cid, comp_cid);
if (cp == NULL) if (cp == NULL)
return NULL; return NULL;
...@@ -850,3 +864,10 @@ dbs_VolumeObject(pwr_tStatus *sts, const dbs_sEnv *ep) ...@@ -850,3 +864,10 @@ dbs_VolumeObject(pwr_tStatus *sts, const dbs_sEnv *ep)
return (dbs_sObject *)(ep->base + ep->sect[dbs_eSect_object].offset); return (dbs_sObject *)(ep->base + ep->sect[dbs_eSect_object].offset);
} }
dbs_sObject *dbs_Object(pwr_tStatus *sts, const dbs_sEnv *ep)
{
dbs_sObject *op = dbs_VolumeObject(sts, ep);
if (op == NULL)
return NULL;
return dbs_First(sts, ep, op);
}
...@@ -576,6 +576,7 @@ struct dbs_sName { ...@@ -576,6 +576,7 @@ struct dbs_sName {
%dbs_sObject *dbs_Ancestor(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op); %dbs_sObject *dbs_Ancestor(pwr_tStatus *sts, const dbs_sEnv *ep, dbs_sObject *op);
%void dbs_GetVolumeName(pwr_tStatus *sts, dbs_sEnv *ep, char *name); %void dbs_GetVolumeName(pwr_tStatus *sts, dbs_sEnv *ep, char *name);
%dbs_sObject *dbs_VolumeObject(pwr_tStatus *sts, const dbs_sEnv *ep); %dbs_sObject *dbs_VolumeObject(pwr_tStatus *sts, const dbs_sEnv *ep);
%dbs_sObject *dbs_Object(pwr_tStatus *sts, const dbs_sEnv *ep);
% %
% %
%#ifdef __cplusplus %#ifdef __cplusplus
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment