pwr_tStatus wb_dbs::writeSectFile(size_t size) { char f[dbs_dAlign(sizeof(dbs_sFile))]; dbs_sFile *fp = (dbs_sFile*)f; PDR pdrs; co_GetOwnFormat(&fp->format); fp->cookie = dbs_cMagicCookie; fp->size = size; fp->offset = dbs_dAlign(sizeof(*fp)); fp->formatVersion = dbs_cVersionFormat; fp->version = dbs_cVersionFile; fp->sectVersion = dbs_cVersionDirectory; fp->pwrVersion = 1; fp->time = m_volume.time; fp->fileType = dbs_eFile_volume; strcpy(fp->userName, ""); strcpy(fp->comment, ""); pdrmem_create(&pdrs, (char *) fp, sizeof(*fp), PDR_DECODE, fp->format, fp->format); if (!pdr_dbs_sFile(&pdrs, fp)) return LDH__XDR; if (fseek(m_fp, 0, SEEK_SET) != 0) return LDH__FILEPOS; if (fwrite(f, sizeof(f) , 1, m_fp) < 1) return LDH__FILEWRITE; return LDH__SUCCESS; }
dbs_sEnv * dbs_Open(pwr_tStatus *sts, dbs_sEnv *ep, const char *filename) { FILE *f; co_mFormat srcFormat, ownFormat; PDR pdrs; dbs_sSect sect; *sts = DBS__SUCCESS; memset(ep, 0, sizeof(*ep)); f = fopen(filename, "r"); if (f == NULL) { *sts = errno_GetStatus(); return NULL; } if (fread(&ep->file, sizeof(ep->file), 1, f) == 0) { *sts = errno_GetStatus(); fclose(f); return NULL; } fseek(f, ep->file.offset, SEEK_SET); if (fread(§, sizeof(sect), 1, f) == 0) { *sts = errno_GetStatus(); fclose(f); return NULL; } ep->nSect = sect.size / dbs_dAlign(sizeof(sect)); #if 0 srcFormat.m = ntohl(ep->file.format.m); #else srcFormat.m = ep->file.format.m; #endif co_GetOwnFormat(&ownFormat); if (srcFormat.m != ownFormat.m) { pdrmem_create(&pdrs, &ep->file, sizeof(ep->file), PDR_DECODE, srcFormat, ownFormat); if (!pdr_dbs_sFile(&pdrs, &ep->file)) { *sts = DBS__PDRFILE; fclose(f); return NULL; } } fseek(f, 0, SEEK_SET); ep->f = f; return ep; }