Made FDB experiment permanent and bumped to version 0.51.5
This commit is contained in:
245
mbfido/addbbs.c
245
mbfido/addbbs.c
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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.
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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 */
|
||||
}
|
||||
|
||||
|
@@ -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 */
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
143
mbfido/mbfsort.c
143
mbfido/mbfsort.c
@@ -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);
|
||||
}
|
||||
|
||||
|
103
mbfido/mbfutil.c
103
mbfido/mbfutil.c
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user