Made FDB experiment permanent and bumped to version 0.51.5

This commit is contained in:
Michiel Broek
2004-05-19 21:18:14 +00:00
parent d87e61987f
commit 2804bac993
26 changed files with 2403 additions and 2615 deletions

View File

@@ -54,14 +54,7 @@ int Add_BBS()
int rc, i, Found = FALSE, Keep = 0, DidDelete = FALSE;
char temp1[PATH_MAX], temp2[PATH_MAX], *fname, *lname, *p;
fd_list *fdl = NULL;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
struct FILE_recordhdr frechdr;
int Insert, Done = FALSE;
char fdbname[PATH_MAX], fdbtemp[PATH_MAX];
FILE *fp, *fdt;
#endif
/*
* First check for an existing record with the same filename,
@@ -69,26 +62,15 @@ int Add_BBS()
* prevent for example allfiles.zip to get a new record everytime
* and thus the download counters will be reset after a new update.
*/
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(tic.FileArea, 30))) {
while (fread(&frec, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
sprintf(fdbname, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), tic.FileArea);
if ((fp = fopen(fdbname, "r+")) != NULL) {
fread(&frechdr, sizeof(frechdr), 1, fp);
while (fread(&frec, frechdr.recsize, 1, fp) == 1) {
#endif
if (strcmp(frec.Name, TIC.NewFile) == 0) {
sprintf(temp1, "%s/%s", TIC.Inbound, TIC.NewFile);
sprintf(temp2, "%s/%s", TIC.BBSpath, TIC.NewFile);
mkdirs(temp2, 0755);
if ((rc = file_cp(temp1, temp2))) {
WriteError("Copy to %s failed: %s", temp2, strerror(rc));
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
#endif
return FALSE;
}
chmod(temp2, 0644);
@@ -103,7 +85,6 @@ int Add_BBS()
if (i == 24)
break;
}
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, 0 - fdbhdr.recsize, SEEK_CUR);
fwrite(&frec, fdbhdr.recsize, 1, fdb_area->fp);
@@ -111,22 +92,13 @@ int Add_BBS()
}
mbsedb_CloseFDB(fdb_area);
Syslog('f', "updated file entry");
#else
fseek(fp, 0 - sizeof(frec), SEEK_CUR);
fwrite(&frec, sizeof(frec), 1, fp);
fclose(fp);
#endif
tic_imp++;
if ((i = file_rm(temp1)))
WriteError("file_rm(%s): %s", temp1, strerror(i));
return TRUE;
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
#endif
}
@@ -197,155 +169,10 @@ int Add_BBS()
}
free(lname);
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(tic.FileArea, 30)) == NULL)
return FALSE;
mbsedb_InsertFDB(fdb_area, frec, area.AddAlpha);
mbsedb_CloseFDB(fdb_area);
#else
sprintf(fdbtemp, "%s/fdb/file%ld.temp", getenv("MBSE_ROOT"), tic.FileArea);
if ((fp = fopen(fdbname, "r+")) == NULL) {
Syslog('+', "Fdb %s doesn't exist, creating", fdbname);
if ((fp = fopen(fdbname, "a+")) == NULL) {
WriteError("$Can't create %s", fdbname);
return FALSE;
}
frechdr.hdrsize = sizeof(frechdr);
frechdr.recsize = sizeof(frec);
fwrite(&frechdr, sizeof(frechdr), 1, fp);
chmod(fdbname, 0660);
} else {
fread(&frechdr, sizeof(frechdr), 1, fp);
}
/*
* If there are no files in this area, we append the first
* one and leave immediatly, keepnum and replace have no
* use at this point.
*/
fseek(fp, 0, SEEK_END);
if (ftell(fp) == frechdr.hdrsize) {
fwrite(&frec, sizeof(frec), 1, fp);
fclose(fp);
file_rm(temp1);
tic_imp++;
return TRUE;
}
/*
* There are already files in the area. We must now see at
* which position to insert the new file, replace or
* remove the old entry.
*/
fseek(fp, frechdr.hdrsize, SEEK_SET);
Insert = 0;
do {
if (fread(&fdb, frechdr.recsize, 1, fp) != 1)
Done = TRUE;
if (!Done) {
if (strcmp(frec.LName, fdb.LName) == 0) {
Found = TRUE;
Insert++;
} else if (strcmp(frec.LName, fdb.LName) < 0)
Found = TRUE;
else
Insert++;
}
} while ((!Found) && (!Done));
if (Found) {
if ((fdt = fopen(fdbtemp, "a+")) == NULL) {
WriteError("$Can't create %s", fdbtemp);
fclose(fp);
return FALSE;
}
fwrite(&frechdr, frechdr.hdrsize, 1, fdt);
fseek(fp, frechdr.hdrsize, SEEK_SET);
/*
* Copy entries till the insert point.
*/
for (i = 0; i < Insert; i++) {
fread(&fdb, frechdr.recsize, 1, fp);
/*
* If we see a magic that is the new magic, remove
* the old one.
*/
if (strlen(TIC.TicIn.Magic) && (strcmp(fdb.Magic, TIC.TicIn.Magic) == 0)) {
Syslog('f', "addbbs(): remove magic from %s (%s)", fdb.Name, fdb.LName);
memset(&fdb.Magic, 0, sizeof(fdb.Magic));
}
/*
* Check if we are importing a file with the same
* name, if so, don't copy the original database
* record. The file is also overwritten.
*/
if (strcmp(fdb.LName, frec.LName) != 0)
fwrite(&fdb, frechdr.recsize, 1, fdt);
}
if (area.AddAlpha) {
/*
* Insert the new entry
*/
fwrite(&frec, frechdr.recsize, 1, fdt);
}
/*
* Append the rest of the entries.
*/
while (fread(&fdb, frechdr.recsize, 1, fp) == 1) {
/*
* If we see a magic that is the new magic, remove
* the old one.
*/
if (strlen(TIC.TicIn.Magic) && (strcmp(fdb.Magic, TIC.TicIn.Magic) == 0)) {
Syslog('f', "addbbs(): remove magic from %s (%s)", fdb.Name, fdb.LName);
memset(&fdb.Magic, 0, sizeof(fdb.Magic));
}
/*
* Check if we find a file with the same name,
* then we skip the record what was origionaly
* in the database record.
*/
if (strcmp(fdb.LName, frec.LName) != 0)
fwrite(&fdb, frechdr.recsize, 1, fdt);
}
if (!area.AddAlpha) {
/*
* Append the new entry
*/
fwrite(&frec, frechdr.recsize, 1, fdt);
}
fclose(fdt);
fclose(fp);
/*
* Now make the changes for real.
*/
if (unlink(fdbname) == 0) {
rename(fdbtemp, fdbname);
} else {
WriteError("$Can't unlink %s", fdbname);
unlink(fdbtemp);
return FALSE;
}
} else {
/*
* Append the new entry
*/
fseek(fp, 0, SEEK_END);
fwrite(&frec, frechdr.recsize, 1, fp);
fclose(fp);
}
#endif
/*
* Delete file from the inbound
@@ -359,14 +186,8 @@ int Add_BBS()
if ((strlen(TIC.TicIn.Replace)) && (tic.Replace)) {
Syslog('f', "Must Replace: %s", TIC.TicIn.Replace);
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(tic.FileArea, 30))) {
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
if ((fp = fopen(fdbname, "r+")) != NULL) {
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
#endif
if (strlen(fdb.LName) == strlen(frec.LName)) {
// FIXME: Search must be based on a reg_exp search
if (strcasecmp(fdb.LName, frec.LName) != 0) {
@@ -378,26 +199,17 @@ int Add_BBS()
if (Found) {
Syslog('+', "Replace: Deleting: %s", fdb.LName);
fdb.Deleted = TRUE;
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp , - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(fp , - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fp);
#endif
DidDelete = TRUE;
}
}
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
#endif
}
}
@@ -405,14 +217,8 @@ int Add_BBS()
* Handle the Keep number of files option
*/
if (TIC.KeepNum) {
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(tic.FileArea, 30))) {
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
if ((fp = fopen(fdbname, "r")) != NULL) {
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
#endif
if ((strlen(fdb.LName) == strlen(frec.LName)) && (!fdb.Deleted)) {
Found = TRUE;
@@ -429,11 +235,7 @@ int Add_BBS()
}
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
#endif
}
/*
@@ -442,43 +244,24 @@ int Add_BBS()
if (Keep > TIC.KeepNum) {
sort_fdlist(&fdl);
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(tic.FileArea, 30))) {
#else
if ((fp = fopen(fdbname, "r+")) != NULL) {
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
#endif
for (i = 0; i < (Keep - TIC.KeepNum); i++) {
fname = pull_fdlist(&fdl);
#ifdef USE_EXPERIMENT
fseek(fdb_area->fp, fdbhdr.hdrsize, SEEK_SET);
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
fseek(fp, fdbhdr.hdrsize, SEEK_SET);
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
#endif
if (strcmp(fdb.LName, fname) == 0) {
Syslog('+', "Keep %d files, deleting: %s", TIC.KeepNum, fdb.LName);
fdb.Deleted = TRUE;
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp , - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(fp , - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fp);
#endif
DidDelete = TRUE;
}
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
#endif
}
}
tidy_fdlist(&fdl);
@@ -489,21 +272,9 @@ int Add_BBS()
* database.
*/
if (DidDelete) {
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(tic.FileArea, 30))) {
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1)
#else
if ((fp = fopen(fdbname, "r")) != NULL) {
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
if ((fdt = fopen(fdbtemp, "a+")) != NULL) {
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, fdt);
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1)
#endif
if (!fdb.Deleted) {
#ifndef USE_EXPERIMENT
fwrite(&fdb, fdbhdr.recsize, 1, fdt);
#endif
} else {
if (fdb.Deleted) {
sprintf(temp2, "%s/%s", area.Path, fdb.LName);
if (unlink(temp2) != 0)
WriteError("$Can't unlink file %s", temp2);
@@ -513,22 +284,8 @@ int Add_BBS()
sprintf(temp2, "%s/.%s", area.Path, fdb.Name);
unlink(temp2); /* Thumbnail, no logging if there is an error */
}
#ifdef USE_EXPERIMENT
mbsedb_PackFDB(fdb_area);
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
fclose(fdt);
if (unlink(fdbname) == 0) {
rename(fdbtemp, fdbname);
} else {
WriteError("$Can't unlink %s", fdbname);
unlink(fdbtemp);
}
} else {
fclose(fp);
}
#endif
DidDelete = FALSE;
}
}

View File

@@ -59,14 +59,7 @@ void Uploads()
FILE *pAreas;
char *sAreas;
int Count = 0, i = 0, j, k;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *pFile;
char *fAreas;
fAreas = calloc(PATH_MAX, sizeof(char));
#endif
sAreas = calloc(PATH_MAX, sizeof(char));
@@ -82,9 +75,6 @@ void Uploads()
if ((pAreas = fopen(sAreas, "r")) == NULL) {
WriteError("$Can't open %s", sAreas);
free(sAreas);
#ifndef USE_EXPERIMENT
free(fAreas);
#endif
return;
}
fread(&areahdr, sizeof(areahdr), 1, pAreas);
@@ -103,15 +93,8 @@ void Uploads()
fflush(stdout);
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(i, 30))) {
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
if ((pFile = fopen(fAreas, "r+")) != NULL) {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
Nopper();
if (!fdb.Announced) {
Syslog('m', " %d %s", i, fdb.Name);
@@ -147,24 +130,15 @@ void Uploads()
* Mark file is announced.
*/
fdb.Announced = TRUE;
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_CloseFDB(fdb_area);
}
#else
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
#endif
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(pFile);
#endif
}
}
}
@@ -181,9 +155,6 @@ void Uploads()
fclose(pAreas);
free(sAreas);
#ifndef USE_EXPERIMENT
free(fAreas);
#endif
}

View File

@@ -92,9 +92,7 @@ int CheckTicGroup(char *Area, int SendUplink, faddr *f)
int i, rc = 0, Found = FALSE;
sysconnect System;
faddr *From, *To;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#endif
temp = calloc(PATH_MAX, sizeof(char));
Syslog('f', "Checking file group \"%s\" \"%s\"", fgroup.Name, fgroup.Comment);
@@ -330,28 +328,8 @@ int CheckTicGroup(char *Area, int SendUplink, faddr *f)
/*
* Create download database
*/
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(AreaNr, 30)))
mbsedb_CloseFDB(fdb_area);
#else
sprintf(temp, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), AreaNr);
if ((fp = fopen(temp, "r+")) == NULL) {
Syslog('f', "Creating new %s", temp);
if ((fp = fopen(temp, "a+")) == NULL) {
WriteError("$Can't create %s", temp);
} else {
fdbhdr.hdrsize = sizeof(fdbhdr);
fdbhdr.recsize = sizeof(fdb);
fwrite(&fdbhdr, sizeof(fdbhdr), 1, fp);
fclose(fp);
}
} else {
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
fclose(fp);
}
chmod(temp, 0660);
#endif
/*
* Setup new TIC area.

View File

@@ -251,11 +251,7 @@ void ScanFiles(ff_list *tmp)
rf_list *rfl = NULL, *rft;
int Rep = 0, Sub = 0, Stop = FALSE;
long filepos, filepos1 = 0, filepos2 = 0, filepos3 = 0, filepos4 = 0;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *pFile;
#endif
/*
* Check for local generated requests.
@@ -296,15 +292,8 @@ void ScanFiles(ff_list *tmp)
Back(15);
}
if (area.Available && area.FileFind) {
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(areanr, 30))) {
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
sprintf(temp, "%s/fdb/file%lu.data", getenv("MBSE_ROOT"), areanr);
if ((pFile = fopen(temp, "r")) != NULL) {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
for (i = 0; i < 25; i++)
sprintf(BigDesc, "%s%s", BigDesc, *(fdb.Desc + i));
sprintf(temp, "%s", tmp->subject);
@@ -359,11 +348,7 @@ void ScanFiles(ff_list *tmp)
}
strcpy(BigDesc, "");
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(pFile);
#endif
} else
WriteError("$Can't open %s", temp);
}
@@ -417,21 +402,11 @@ void ScanFiles(ff_list *tmp)
areanr = rft->area;
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(rft->area, 30))) {
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1)
if (!strcmp(rft->filename, fdb.Name))
break;
mbsedb_CloseFDB(fdb_area);
#else
sprintf(temp, "%s/fdb/file%lu.data", getenv("MBSE_ROOT"), rft->area);
if ((pFile = fopen(temp, "r")) != NULL) {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1)
if (!strcmp(rft->filename, fdb.Name))
break;
fclose(pFile);
#endif
MacroVars("slbkdt", "ssddss", fdb.Name, fdb.LName, fdb.Size, fdb.Size / 1024, " ",
To_Low(fdb.Desc[0],scanmgr.HiAscii));
fseek(fi, filepos1, SEEK_SET);

View File

@@ -209,14 +209,8 @@ void CheckArea(long Area)
struct stat stb;
struct passwd *pw;
struct group *gr;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *pFile;
char *fAreas;
fAreas = calloc(PATH_MAX, sizeof(char));
#endif
newdir = calloc(PATH_MAX, sizeof(char));
temp = calloc(PATH_MAX, sizeof(char));
mname = calloc(PATH_MAX, sizeof(char));
@@ -294,52 +288,15 @@ void CheckArea(long Area)
WriteError("Can't stat %s", area.Path);
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(Area, 30)) == NULL)
return;
#else
sprintf(fAreas, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), Area);
/*
* Open the file database, if it doesn't exist,
* create an empty one.
*/
if ((pFile = fopen(fAreas, "r+")) == NULL) {
Syslog('!', "Creating new %s", fAreas);
if ((pFile = fopen(fAreas, "a+")) == NULL) {
WriteError("$Can't create %s", fAreas);
die(MBERR_GENERAL);
}
fdbhdr.hdrsize = sizeof(fdbhdr);
fdbhdr.recsize = sizeof(fdb);
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
} else {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
}
/*
* We don't do any upgrade, so the header must be correct.
*/
if (fdbhdr.hdrsize != sizeof(fdbhdr)) {
Syslog('+', "fAreas hdrsize is corrupt: %d", fdbhdr.hdrsize);
return;
}
if (fdbhdr.recsize != sizeof(fdb)) {
Syslog('+', "fAreas recordsize is corrupt: %d, expected %d", fdbhdr.recsize, sizeof(fdbhdr));
return;
}
#endif
/*
* Now start checking the files in the filedatabase
* against the contents of the directory.
*/
inArea = 0;
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
iTotal++;
inArea++;
@@ -353,16 +310,11 @@ void CheckArea(long Area)
do_pack = TRUE;
}
iErrors++;
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
#endif
} else {
/*
* File exists, now check the file.
@@ -510,16 +462,11 @@ void CheckArea(long Area)
}
Marker();
if (Update) {
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
#endif
}
}
@@ -528,16 +475,11 @@ void CheckArea(long Area)
if (rc == -1) {
Syslog('+', "Area %ld magic alias %s file %s is invalid", Area, fdb.Magic, fdb.Name);
memset(&fdb.Magic, 0, sizeof(fdb.Magic));
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
#endif
iErrors++;
}
}
@@ -556,13 +498,8 @@ void CheckArea(long Area)
if (de->d_name[0] != '.') {
Marker();
Found = FALSE;
#ifdef USE_EXPERIMENT
fseek(fdb_area->fp, fdbhdr.hdrsize, SEEK_SET);
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
if ((strcmp(fdb.LName, de->d_name) == 0) || (strcmp(fdb.Name, de->d_name) == 0)) {
if (!Found) {
Found = TRUE;
@@ -575,16 +512,11 @@ void CheckArea(long Area)
iErrors++;
fdb.Double = TRUE;
do_pack = TRUE;
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
#endif
}
}
}
@@ -613,13 +545,7 @@ void CheckArea(long Area)
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(pFile);
chmod(fAreas, 0660);
free(fAreas);
#endif
iAreasNew++;
free(newdir);

View File

@@ -48,12 +48,7 @@ void Delete(int UnDel, int Area, char *File)
{
char mask[256];
int rc = FALSE;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *fp;
char *temp;
#endif
if (UnDel)
IsDoing("Undelete file");
@@ -81,33 +76,16 @@ void Delete(int UnDel, int Area, char *File)
die(MBERR_COMMANDLINE);
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(Area, 30)) == NULL)
die(MBERR_GENERAL);
#else
if (CheckFDB(Area, area.Path))
die(MBERR_GENERAL);
temp = calloc(PATH_MAX, sizeof(char));
sprintf(temp, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
if ((fp = fopen(temp, "r+")) == NULL)
die(MBERR_GENERAL);
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
#endif
colour(CYAN, BLACK);
strcpy(mask, re_mask(File, FALSE));
if (re_comp(mask))
die(MBERR_GENERAL);
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
#endif
if (re_exec(fdb.LName) || re_exec(fdb.Name)) {
if (UnDel && fdb.Deleted) {
fdb.Deleted = FALSE;
@@ -124,7 +102,6 @@ void Delete(int UnDel, int Area, char *File)
rc = TRUE;
}
if (rc) {
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
@@ -132,19 +109,10 @@ void Delete(int UnDel, int Area, char *File)
} else {
rc = FALSE;
}
#else
fseek(fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fp);
#endif
}
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
free(temp);
#endif
if (!rc) {
Syslog('+', "%selete %s in area %d failed", UnDel?"Und":"D", File, Area);

View File

@@ -324,14 +324,7 @@ void ReqIndex(void)
Findex *fdx = NULL;
Findex *tmp;
struct FILEIndex idx;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *pFile;
char *fAreas;
fAreas = calloc(PATH_MAX, sizeof(char));
#endif
IsDoing("Index files");
if (!do_quiet) {
@@ -386,29 +379,8 @@ void ReqIndex(void)
newdir = NULL;
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(i, 30)) == NULL)
die(MBERR_GENERAL);
#else
sprintf(fAreas, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), i);
/*
* Open the file database, if it doesn't exist,
* create an empty one.
*/
if ((pFile = fopen(fAreas, "r+")) == NULL) {
Syslog('!', "Creating new %s", fAreas);
if ((pFile = fopen(fAreas, "a+")) == NULL) {
WriteError("$Can't create %s", fAreas);
die(MBERR_GENERAL);
}
fdbhdr.hdrsize = sizeof(fdbhdr);
fdbhdr.recsize = sizeof(fdb);
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
} else {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
}
#endif
/*
* Create file request index if requests are allowed in this area.
@@ -418,11 +390,7 @@ void ReqIndex(void)
* Now start creating the unsorted index.
*/
record = 0;
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
iTotal++;
if ((iTotal % 10) == 0)
Marker();
@@ -448,13 +416,8 @@ void ReqIndex(void)
WriteError("$Can't create %s", temp);
} else {
fbAreas++;
#ifdef USE_EXPERIMENT
fseek(fdb_area->fp, fdbhdr.hdrsize, SEEK_SET);
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
if (!fdb.Deleted) {
fbFiles++;
fprintf(fp, "%-12s [%ld] %s\r\n", fdb.Name, fdb.TimesDL, fdb.Desc[0]);
@@ -476,13 +439,8 @@ void ReqIndex(void)
if ((fp = fopen(temp, "w")) == NULL) {
WriteError("$Can't create %s", temp);
} else {
#ifdef USE_EXPERIMENT
fseek(fdb_area->fp, fdbhdr.hdrsize, SEEK_SET);
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
if (!fdb.Deleted) {
/*
* The next is to reduce system load
@@ -510,12 +468,7 @@ void ReqIndex(void)
chmod(temp, 0644);
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(pFile);
free(fAreas);
#endif
}
}
@@ -552,14 +505,8 @@ void HtmlIndex(char *Lang)
char linebuf[1024], outbuf[1024], desc[6400];
time_t last = 0L, later;
long fileptr = 0, fileptr1 = 0;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *pFile;
char *fAreas;
fAreas = calloc(PATH_MAX, sizeof(char));
#endif
sAreas = calloc(PATH_MAX, sizeof(char));
fn = calloc(PATH_MAX, sizeof(char));
@@ -640,48 +587,22 @@ void HtmlIndex(char *Lang)
fflush(stdout);
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(i, 30)) == NULL)
die(MBERR_GENERAL);
#else
sprintf(fAreas, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), i);
/*
* Open the file database, if it doesn't exist,
* abort, we even should have never got here.
*/
if ((pFile = fopen(fAreas, "r+")) == NULL) {
WriteError("$Can't open %s", fAreas);
die(MBERR_GENERAL);
}
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
#endif
/*
* Create index.html pages in each available download area.
*/
if (!area.CDrom && fm && (strncmp(CFG.ftp_base, area.Path, strlen(CFG.ftp_base)) == 0)) {
#ifdef USE_EXPERIMENT
fseek(fdb_area->fp, fdbhdr.hdrsize, SEEK_SET);
#else
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
#endif
AreasHtml++;
inArea = 0;
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
if (!fdb.Deleted)
inArea++;
}
#ifdef USE_EXPERIMENT
fseek(fdb_area->fp, fdbhdr.hdrsize, SEEK_SET);
#else
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
#endif
aSize = 0L;
aTotal = 0;
last = 0L;
@@ -692,11 +613,7 @@ void HtmlIndex(char *Lang)
fileptr1 = gfilepos;
}
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
if (!fdb.Deleted) {
/*
* The next is to reduce system load
@@ -805,12 +722,7 @@ void HtmlIndex(char *Lang)
fseek(fi, fileptr, SEEK_SET);
MacroRead(fi, fm);
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(pFile);
free(fAreas);
#endif
} /* if area.Available */
}

View File

@@ -56,14 +56,7 @@ void Kill(void)
char *sAreas, *newdir = NULL, *sTemp, from[PATH_MAX], to[PATH_MAX];
time_t Now;
struct fileareas darea;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL, *dst_area = NULL;
#else
FILE *pFile, *pDest, *pTemp;
char *fAreas;
fAreas = calloc(PATH_MAX, sizeof(char));
#endif
sAreas = calloc(PATH_MAX, sizeof(char));
sTemp = calloc(PATH_MAX, sizeof(char));
@@ -113,39 +106,14 @@ void Kill(void)
newdir = NULL;
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(i, 30)) == NULL)
die(MBERR_GENERAL);
#else
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
/*
* Open the file database, if it doesn't exist,
* create an empty one.
*/
if ((pFile = fopen(fAreas, "r+")) == NULL) {
Syslog('!', "Creating new %s", fAreas);
if ((pFile = fopen(fAreas, "a+")) == NULL) {
WriteError("$Can't create %s", fAreas);
die(MBERR_GENERAL);
}
fdbhdr.hdrsize = sizeof(fdbhdr);
fdbhdr.recsize = sizeof(fdb);
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
} else {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
}
#endif
/*
* Now start checking the files in the filedatabase
* against the contents of the directory.
*/
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
iTotal++;
Marker();
@@ -184,27 +152,12 @@ void Kill(void)
sprintf(to, "%s/%s", darea.Path, fdb.Name);
if ((rc = file_mv(from, to)) == 0) {
Syslog('+', "Move %s, area %d => %d", fdb.Name, i, area.MoveArea);
#ifdef USE_EXPERIMENT
if ((dst_area = mbsedb_OpenFDB(area.MoveArea, 30))) {
fdb.UploadDate = time(NULL);
fdb.LastDL = time(NULL);
mbsedb_InsertFDB(dst_area, fdb, FALSE);
mbsedb_CloseFDB(dst_area);
}
#else
sprintf(to, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), area.MoveArea);
if ((pDest = fopen(to, "a+")) != NULL) {
fseek(pDest, 0, SEEK_END);
if (ftell(pDest) == 0) {
/* New file, write header */
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, pDest);
}
fdb.UploadDate = time(NULL);
fdb.LastDL = time(NULL);
fwrite(&fdb, fdbhdr.recsize, 1, pDest);
fclose(pDest);
}
#endif
/*
* Now again if there is a dotted version (thumbnail) of this file.
@@ -228,16 +181,11 @@ void Kill(void)
symlink(from, to);
fdb.Deleted = TRUE;
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
#endif
iMoved++;
} else {
WriteError("Move %s to area %d failed, %s", fdb.Name, area.MoveArea, strerror(rc));
@@ -245,16 +193,11 @@ void Kill(void)
} else {
Syslog('+', "Delete %s, area %d", fdb.LName, i);
fdb.Deleted = TRUE;
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
#endif
iKilled++;
sprintf(from, "%s/%s", area.Path, fdb.LName);
unlink(from);
@@ -270,31 +213,8 @@ void Kill(void)
* Now we must pack this area database otherwise
* we run into trouble later on.
*/
#ifdef USE_EXPERIMENT
mbsedb_PackFDB(fdb_area);
mbsedb_CloseFDB(fdb_area);
#else
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
sprintf(sTemp, "%s/fdb/filetmp.data", getenv("MBSE_ROOT"));
if ((pTemp = fopen(sTemp, "a+")) != NULL) {
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, pTemp);
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
if ((!fdb.Deleted) && strcmp(fdb.LName, "") != 0) {
fwrite(&fdb, fdbhdr.recsize, 1, pTemp);
}
}
fclose(pFile);
fclose(pTemp);
if ((rename(sTemp, fAreas)) == 0) {
unlink(sTemp);
chmod(fAreas, 006600);
}
} else
fclose(pFile);
free(fAreas);
#endif
iAreasNew++;
} /* if area.Available */

View File

@@ -46,11 +46,7 @@ void ListFileAreas(int Area)
int i, iAreas, fcount, tcount = 0, iTotal = 0, columns = 80;
long fsize, tsize = 0;
char *sAreas, *fAreas, *sTic, flags[6], *ticarea;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *pFile;
#endif
/*
* If nothing to display allowed, return at once.
@@ -108,30 +104,10 @@ void ListFileAreas(int Area)
if (area.Available) {
#ifdef USE_EXPERIMENT
/*
* Open the file database.
*/
fdb_area = mbsedb_OpenFDB(Area, 30);
#else
/*
* Open the file database, create new one if it doesn't exist.
*/
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
if ((pFile = fopen(fAreas, "r+")) == NULL) {
Syslog('!', "Creating new %s", fAreas);
if ((pFile = fopen(fAreas, "a+")) == NULL) {
WriteError("$Can't create %s", fAreas);
die(MBERR_GENERAL);
}
fdbhdr.hdrsize = sizeof(fdbhdr);
fdbhdr.recsize = sizeof(fdb);
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
} else {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
}
#endif
fcount = 0;
fsize = 0L;
colour(CYAN, BLACK);
@@ -144,11 +120,7 @@ void ListFileAreas(int Area)
colour(LIGHTGRAY, BLACK);
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
sprintf(flags, "---");
if (fdb.Deleted)
flags[0] = 'D';
@@ -171,11 +143,7 @@ void ListFileAreas(int Area)
printf("-");
printf("\n");
printf("%d file%s, %ld Kbytes\n", fcount, (fcount == 1) ? "":"s", fsize);
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(pFile);
#endif
} else {
WriteError("Area %d is not available", Area);
@@ -204,34 +172,10 @@ void ListFileAreas(int Area)
if (area.Available) {
#ifdef USE_EXPERIMENT
fdb_area = mbsedb_OpenFDB(i, 30);
#else
/*
* Open the file database, create new one if it doesn't exist.
*/
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
if ((pFile = fopen(fAreas, "r+")) == NULL) {
Syslog('!', "Creating new %s", fAreas);
if ((pFile = fopen(fAreas, "a+")) == NULL) {
WriteError("$Can't create %s", fAreas);
die(MBERR_GENERAL);
}
fdbhdr.hdrsize = sizeof(fdbhdr);
fdbhdr.recsize = sizeof(fdb);
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
} else {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
}
#endif
fcount = 0;
fsize = 0L;
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
fcount++;
fsize = fsize + fdb.Size;
}
@@ -241,11 +185,7 @@ void ListFileAreas(int Area)
printf("%5d %5d %5ld %-12s %s\n", i, fcount, fsize, area.BbsGroup, area.Name);
iTotal++;
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(pFile);
#endif
}
}

View File

@@ -49,13 +49,7 @@ void Move(int From, int To, char *File)
char *frompath, *topath, *temp1, *fromlink, *tolink, *fromthumb, *tothumb;
struct FILE_record f_db;
int rc = FALSE, Found = FALSE;
#ifdef USE_EXPERIMENT
struct _fdbarea *src_area = NULL;
#else
struct FILE_recordhdr f_dbhdr;
FILE *fp1, *fp2;
char *temp2;
#endif
IsDoing("Move file");
colour(LIGHTRED, BLACK);
@@ -92,7 +86,6 @@ void Move(int From, int To, char *File)
/*
* Find the file in the "from" area, check LFN and 8.3 names.
*/
#ifdef USE_EXPERIMENT
if ((src_area = mbsedb_OpenFDB(From, 30)) == NULL)
die(MBERR_GENERAL);
@@ -103,21 +96,6 @@ void Move(int From, int To, char *File)
}
}
temp1 = calloc(PATH_MAX, sizeof(char)); // not serious
#else
temp1 = calloc(PATH_MAX, sizeof(char));
sprintf(temp1, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), From);
if ((fp1 = fopen(temp1, "r")) == NULL)
die(MBERR_GENERAL);
fread(&f_dbhdr, sizeof(fdbhdr), 1, fp1);
while (fread(&f_db, f_dbhdr.recsize, 1, fp1) == 1) {
if ((strcmp(f_db.LName, File) == 0) || strcmp(f_db.Name, File) == 0) {
Found = TRUE;
break;
}
}
fclose(fp1);
#endif
if (!Found) {
WriteError("File %s not found in area %d", File, From);
if (!do_quiet)
@@ -175,7 +153,6 @@ void Move(int From, int To, char *File)
die(MBERR_COMMANDLINE);
}
#ifdef USE_EXPERIMENT
rc = AddFile(f_db, To, topath, frompath, tolink);
if (rc) {
unlink(fromlink);
@@ -196,67 +173,6 @@ void Move(int From, int To, char *File)
mbsedb_PackFDB(src_area);
mbsedb_CloseFDB(src_area);
colour(CYAN, BLACK);
#else
temp2 = calloc(PATH_MAX, sizeof(char));
sprintf(temp2, "%s/fdb/file%d.temp", getenv("MBSE_ROOT"), From);
if ((fp1 = fopen(temp1, "r")) == NULL)
die(MBERR_GENERAL);
fread(&f_dbhdr, sizeof(fdbhdr), 1, fp1);
if ((fp2 = fopen(temp2, "a+")) == NULL)
die(MBERR_GENERAL);
fwrite(&f_dbhdr, f_dbhdr.hdrsize, 1, fp2);
/*
* Search the file if the From area, if found, the
* temp database holds all records except the moved
* file.
*/
while (fread(&f_db, f_dbhdr.recsize, 1, fp1) == 1) {
if (strcmp(f_db.LName, File) && strcmp(f_db.Name, File))
fwrite(&f_db, f_dbhdr.recsize, 1, fp2);
else {
rc = AddFile(f_db, To, topath, frompath, tolink);
if (rc) {
unlink(fromlink);
unlink(frompath);
/*
* Try to move thumbnail if it exists
*/
if (file_exist(fromthumb, R_OK) == 0) {
file_mv(fromthumb, tothumb);
}
}
}
}
fclose(fp1);
fclose(fp2);
if (rc) {
/*
* The move was successfull
*/
if (unlink(temp1) == 0) {
rename(temp2, temp1);
chmod(temp1, 0660);
} else {
WriteError("$Can't unlink %s", temp1);
unlink(temp2);
}
colour(CYAN, BLACK);
} else {
/*
* The move failed, it is possible that the file is
* copied already. Don't remove it here, it might
* be removed if it was not meant to be, ie if you
* gave this command twice. Let "mbfile check" take
* care of unwanted copies.
*/
unlink(temp2);
}
free(temp2);
#endif
Syslog('+', "Move %s from %d to %d %s", File, From, To, rc ? "successfull":"failed");
if (!do_quiet)

View File

@@ -50,16 +50,8 @@ void PackFileBase(void)
FILE *pAreas;
int i, iAreas, iAreasNew = 0, rc, iTotal = 0, iRemoved = 0;
char *sAreas, fn[PATH_MAX];
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
int purge;
#else
FILE *pFile, *fp;
char *fAreas, *fTmp;
fAreas = calloc(PATH_MAX, sizeof(char));
fTmp = calloc(PATH_MAX, sizeof(char));
#endif
sAreas = calloc(PATH_MAX, sizeof(char));
@@ -96,50 +88,16 @@ void PackFileBase(void)
}
Marker();
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(i, 30)) == NULL)
die(MBERR_GENERAL);
purge = 0;
#else
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
sprintf(fTmp, "%s/fdb/file%d.temp", getenv("MBSE_ROOT"), i);
if ((pFile = fopen(fAreas, "r")) == NULL) {
Syslog('!', "Creating new %s", fAreas);
if ((pFile = fopen(fAreas, "a+")) == NULL) {
WriteError("$Can't create %s", fAreas);
die(MBERR_GENERAL);
}
fdbhdr.hdrsize = sizeof(fdbhdr);
fdbhdr.recsize = sizeof(fdb);
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
} else {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
}
if ((fp = fopen(fTmp, "a+")) == NULL) {
WriteError("$Can't create %s", fTmp);
die(MBERR_GENERAL);
}
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, fp);
#endif
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
#endif
iTotal++;
if ((!fdb.Deleted) && (!fdb.Double) && (strcmp(fdb.Name, "") != 0)) {
#ifndef USE_EXPERIMENT
fwrite(&fdb, fdbhdr.recsize, 1, fp);
#endif
} else {
if ((fdb.Deleted) || (fdb.Double) || (strcmp(fdb.Name, "") == 0)) {
iRemoved++;
#ifdef USE_EXPERIMENT
purge++;
#endif
if (fdb.Double) {
Syslog('+', "Removed double record file \"%s\" from area %d", fdb.LName, i);
} else {
@@ -162,19 +120,9 @@ void PackFileBase(void)
}
}
#ifdef USE_EXPERIMENT
if (purge)
mbsedb_PackFDB(fdb_area);
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
fclose(pFile);
if ((rename(fTmp, fAreas)) == 0) {
unlink(fTmp);
chmod(fAreas, 00660);
}
#endif
iAreasNew++;
} /* if area.Available */
@@ -188,12 +136,7 @@ void PackFileBase(void)
fflush(stdout);
}
#ifndef USE_EXPERIMENT
free(fTmp);
free(fAreas);
#endif
free(sAreas);
}

View File

@@ -50,11 +50,7 @@ void ReArc(int Area, char *File)
char *p, *temp, *mname, *linkpath, mask[256];
int i, rc = -1, count = 0, errors = 0;
struct utimbuf ut;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *fp;
#endif
IsDoing("ReArc file(s)");
colour(LIGHTRED, BLACK);
@@ -89,28 +85,15 @@ void ReArc(int Area, char *File)
temp = calloc(PATH_MAX, sizeof(char));
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(Area, 30)) == NULL)
die(MBERR_GENERAL);
#else
sprintf(temp, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
if ((fp = fopen(temp, "r+")) == NULL)
die(MBERR_GENERAL);
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
#endif
colour(CYAN, BLACK);
strcpy(mask, re_mask(File, FALSE));
if (re_comp(mask))
die(MBERR_GENERAL);
#ifdef USE_EXPERIMENT
while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) {
#else
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
#endif
if (re_exec(fdb.LName) || re_exec(fdb.Name)) {
Syslog('+', "Will rearc %s", fdb.LName);
sprintf(temp, "%s/%s", area.Path, fdb.Name);
@@ -200,16 +183,11 @@ void ReArc(int Area, char *File)
strcpy(temp, mname);
}
free(mname);
#ifdef USE_EXPERIMENT
if (mbsedb_LockFDB(fdb_area, 30)) {
fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp);
mbsedb_UnlockFDB(fdb_area);
}
#else
fseek(fp, - fdbhdr.recsize, SEEK_CUR);
fwrite(&fdb, fdbhdr.recsize, 1, fp);
#endif
/*
* Update symbolic link to long filename
@@ -234,11 +212,7 @@ void ReArc(int Area, char *File)
}
}
}
#ifdef USE_EXPERIMENT
mbsedb_CloseFDB(fdb_area);
#else
fclose(fp);
#endif
free(temp);
Syslog('+', "ReArc Files [%5d] Good [%5d] Errors [%5d]", count, count - errors, errors);
}

View File

@@ -40,84 +40,6 @@
extern int do_quiet; /* Suppress screen output */
extern int do_index; /* Reindex filebases */
#ifndef USE_EXPERIMENT
typedef struct _fdbs {
struct _fdbs *next;
struct FILE_record filrec;
} fdbs;
void fill_fdbs(struct FILE_record, fdbs **);
void fill_fdbs(struct FILE_record filrec, fdbs **fap)
{
fdbs *tmp;
tmp = (fdbs *)malloc(sizeof(fdbs));
tmp->next = *fap;
tmp->filrec = filrec;
*fap = tmp;
}
void tidy_fdbs(fdbs **);
void tidy_fdbs(fdbs **fap)
{
fdbs *tmp, *old;
for (tmp = *fap; tmp; tmp = old) {
old = tmp->next;
free(tmp);
}
*fap = NULL;
}
int comp_fdbs(fdbs **, fdbs **);
void sort_fdbs(fdbs **);
void sort_fdbs(fdbs **fap)
{
fdbs *ta, **vector;
size_t n = 0, i;
if (*fap == NULL)
return;
for (ta = *fap; ta; ta = ta->next)
n++;
vector = (fdbs **)malloc(n * sizeof(fdbs *));
i = 0;
for (ta = *fap; ta; ta = ta->next)
vector[i++] = ta;
qsort(vector, n, sizeof(fdbs *), (int(*)(const void*, const void *))comp_fdbs);
(*fap) = vector[0];
i = 1;
for (ta = *fap; ta; ta = ta->next) {
if (i < n)
ta->next = vector[i++];
else
ta->next = NULL;
}
free(vector);
return;
}
int comp_fdbs(fdbs **fap1, fdbs **fap2)
{
return strcasecmp((*fap1)->filrec.LName, (*fap2)->filrec.LName);
}
#endif
/*
@@ -128,16 +50,8 @@ void SortFileBase(int Area)
FILE *pAreas;
int iAreas;
char *sAreas;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
FILE *fp, *pFile;
char *fAreas, *fTmp;
fdbs *fdx = NULL, *tmp;
fAreas = calloc(PATH_MAX, sizeof(char));
fTmp = calloc(PATH_MAX, sizeof(char));
#endif
sAreas = calloc(PATH_MAX, sizeof(char));
IsDoing("Sort filebase");
@@ -174,61 +88,10 @@ void SortFileBase(int Area)
fflush(stdout);
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(Area, 30))) {
mbsedb_SortFDB(fdb_area);
mbsedb_CloseFDB(fdb_area);
}
#else
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
sprintf(fTmp, "%s/fdb/file%d.temp", getenv("MBSE_ROOT"), Area);
if ((pFile = fopen(fAreas, "r")) == NULL) {
Syslog('!', "Creating new %s", fAreas);
if ((pFile = fopen(fAreas, "a+")) == NULL) {
WriteError("$Can't create %s", fAreas);
die(MBERR_GENERAL);
}
fdbhdr.hdrsize = sizeof(fdbhdr);
fdbhdr.recsize = sizeof(fdb);
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
} else {
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
}
if ((fp = fopen(fTmp, "a+")) == NULL) {
WriteError("$Can't create %s", fTmp);
die(MBERR_GENERAL);
}
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, fp);
/*
* Fill the sort array
*/
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
fill_fdbs(fdb, &fdx);
Syslog('f', "Adding %s", fdb.LName);
}
sort_fdbs(&fdx);
/*
* Write sorted files to temp database
*/
for (tmp = fdx; tmp; tmp = tmp->next) {
Syslog('f', "Sorted %s", tmp->filrec.LName);
fwrite(&tmp->filrec, fdbhdr.recsize, 1, fp);
}
tidy_fdbs(&fdx);
fclose(fp);
fclose(pFile);
if ((rename(fTmp, fAreas)) == 0) {
unlink(fTmp);
chmod(fAreas, 00660);
}
#endif
Syslog('+', "Sorted file area %d: %s", Area, area.Name);
do_index = TRUE;
@@ -244,10 +107,6 @@ void SortFileBase(int Area)
fflush(stdout);
}
#ifndef USE_EXPERIMENT
free(fTmp);
free(fAreas);
#endif
free(sAreas);
}

View File

@@ -305,13 +305,7 @@ int UnpackFile(char *File)
int AddFile(struct FILE_record f_db, int Area, char *DestPath, char *FromPath, char *LinkPath)
{
int rc;
#ifdef USE_EXPERIMENT
struct _fdbarea *fdb_area = NULL;
#else
int i, Insert, Done = FALSE, Found = FALSE;
FILE *fp1, *fp2;
char *temp1, *temp2;
#endif
/*
* Copy file to the final destination and make a hard link with the
@@ -343,7 +337,6 @@ int AddFile(struct FILE_record f_db, int Area, char *DestPath, char *FromPath, c
}
}
#ifdef USE_EXPERIMENT
if ((fdb_area = mbsedb_OpenFDB(Area, 30))) {
Syslog('f', "opened");
rc = mbsedb_InsertFDB(fdb_area, f_db, TRUE);
@@ -353,102 +346,6 @@ int AddFile(struct FILE_record f_db, int Area, char *DestPath, char *FromPath, c
Syslog('f', "not opened");
return FALSE;
}
#else
temp1 = calloc(PATH_MAX, sizeof(char));
temp2 = calloc(PATH_MAX, sizeof(char));
sprintf(temp1, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
sprintf(temp2, "%s/fdb/file%d.temp", getenv("MBSE_ROOT"), Area);
fp1 = fopen(temp1, "r+");
fread(&fdbhdr, sizeof(fdbhdr.hdrsize), 1, fp1);
fseek(fp1, 0, SEEK_END);
if (ftell(fp1) == fdbhdr.hdrsize) {
/*
* No records yet
*/
fwrite(&f_db, fdbhdr.recsize, 1, fp1);
fclose(fp1);
} else {
/*
* Files are already there. Find the right spot.
*/
fseek(fp1, fdbhdr.hdrsize, SEEK_SET);
Insert = 0;
do {
if (fread(&fdb, fdbhdr.recsize, 1, fp1) != 1)
Done = TRUE;
if (!Done) {
if (strcmp(f_db.LName, fdb.LName) == 0) {
Found = TRUE;
Insert++;
} else {
if (strcmp(f_db.LName, fdb.LName) < 0)
Found = TRUE;
else
Insert++;
}
}
} while ((!Found) && (!Done));
if (Found) {
if ((fp2 = fopen(temp2, "a+")) == NULL) {
WriteError("Can't create %s", temp2);
return FALSE;
}
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, fp2);
fseek(fp1, fdbhdr.hdrsize, SEEK_SET);
/*
* Copy until the insert point
*/
for (i = 0; i < Insert; i++) {
fread(&fdb, fdbhdr.recsize, 1, fp1);
/*
* If we are importing a file with the same name,
* skip the original record and put the new one in place.
*/
if (strcmp(fdb.LName, f_db.LName) != 0)
fwrite(&fdb, fdbhdr.recsize, 1, fp2);
}
if (area.AddAlpha)
fwrite(&f_db, fdbhdr.recsize, 1, fp2);
/*
* Append the rest of the records
*/
while (fread(&fdb, fdbhdr.recsize, 1, fp1) == 1) {
if (strcmp(fdb.LName, f_db.LName) != 0)
fwrite(&fdb, fdbhdr.recsize, 1, fp2);
}
if (!area.AddAlpha)
fwrite(&f_db, fdbhdr.recsize, 1, fp2);
fclose(fp1);
fclose(fp2);
if (unlink(temp1) == 0) {
rename(temp2, temp1);
chmod(temp1, 0660);
} else {
WriteError("$Can't unlink %s", temp1);
unlink(temp2);
return FALSE;
}
} else { /* if (Found) */
/*
* Append file record
*/
fseek(fp1, 0, SEEK_END);
fwrite(&f_db, fdbhdr.recsize, 1, fp1);
fclose(fp1);
}
}
free(temp1);
free(temp2);
return TRUE;
#endif
}