--- sbbs/src/sbbs3/filedat.c 2018/04/24 16:41:23 1.1.1.1 +++ sbbs/src/sbbs3/filedat.c 2018/04/24 16:43:43 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet file database-related exported functions */ -/* $Id: filedat.c,v 1.1.1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: filedat.c,v 1.1.1.2 2018/04/24 16:43:43 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -52,7 +52,7 @@ BOOL DLLCALL getfiledat(scfg_t* cfg, fil if((file=sopen(str,O_RDONLY|O_BINARY,SH_DENYWR))==-1) { return(FALSE); } - length=filelength(file); + length=(long)filelength(file); if(f->datoffset>length) { close(file); return(FALSE); @@ -74,13 +74,14 @@ BOOL DLLCALL getfiledat(scfg_t* cfg, fil if(!f->size) { /* only read disk if this is null */ getfilepath(cfg,f,str); - f->size=flength(str); - f->date=fdate(str); + if((f->size=(long)flength(str))>=0) + f->date=fdate(str); /* } else { f->size=f->cdt; - f->date=0; } + f->date=0; + } */ } #if 0 @@ -129,7 +130,7 @@ BOOL DLLCALL putfiledat(scfg_t* cfg, fil if((file=sopen(str,O_WRONLY|O_BINARY,SH_DENYRW))==-1) { return(FALSE); } - length=filelength(file); + length=(long)filelength(file); if(length%F_LEN) { close(file); return(FALSE); @@ -143,7 +144,7 @@ BOOL DLLCALL putfiledat(scfg_t* cfg, fil close(file); return(FALSE); } - length=filelength(file); + length=(long)filelength(file); close(file); if(length%F_LEN) { return(FALSE); @@ -170,10 +171,10 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, fil /* Add data to DAT File */ /************************/ SAFEPRINTF2(str,"%s%s.dat",cfg->dir[f->dir]->data_dir,cfg->dir[f->dir]->code); - if((file=sopen(str,O_RDWR|O_BINARY|O_CREAT,SH_DENYRW,S_IREAD|S_IWRITE))==-1) { + if((file=sopen(str,O_RDWR|O_BINARY|O_CREAT,SH_DENYRW,DEFFILEMODE))==-1) { return(FALSE); } - length=filelength(file); + length=(long)filelength(file); if(length==0L) l=0L; else { @@ -186,7 +187,7 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, fil read(file,&c,1); if(c==ETX) break; } - if(l/F_LEN>=MAX_FILES || l/F_LEN>=cfg->dir[f->dir]->maxfiles) { + if(l/F_LEN>=MAX_FILES) { close(file); return(FALSE); } @@ -212,7 +213,7 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, fil close(file); return(FALSE); } - length=filelength(file); + length=(long)filelength(file); close(file); if(length%F_LEN) { return(FALSE); @@ -222,8 +223,9 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, fil /* Update last upload date/time stamp file */ /*******************************************/ SAFEPRINTF2(str,"%s%s.dab",cfg->dir[f->dir]->data_dir,cfg->dir[f->dir]->code); - if((file=sopen(str,O_WRONLY|O_CREAT|O_BINARY,SH_DENYRW,S_IREAD|S_IWRITE))!=-1) { + if((file=sopen(str,O_WRONLY|O_CREAT|O_BINARY,SH_DENYRW,DEFFILEMODE))!=-1) { now=time(NULL); + /* TODO: 32-bit *or* LE required */ write(file,&now,4); close(file); } @@ -235,10 +237,10 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, fil for(i=8;i<12;i++) /* Turn FILENAME.EXT into FILENAMEEXT */ fname[i]=fname[i+1]; SAFEPRINTF2(str,"%s%s.ixb",cfg->dir[f->dir]->data_dir,cfg->dir[f->dir]->code); - if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IREAD|S_IWRITE))==-1) { + if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,DEFFILEMODE))==-1) { return(FALSE); } - length=filelength(file); + length=(long)filelength(file); if(length) { /* IXB file isn't empty */ if(length%F_IXBSIZE) { close(file); @@ -293,14 +295,15 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, fil free((char *)ixbbuf); return(FALSE); } - write(file,&f->dateuled,sizeof(time_t)); + write(file,&f->dateuled,4); write(file,&f->datedled,4); /* Write 0 for datedled */ if(lwrite(file,&ixbbuf[l],length-l)!=length-l) { /* Write rest of IXB */ close(file); free((char *)ixbbuf); return(FALSE); } - free((char *)ixbbuf); } + free((char *)ixbbuf); + } else { /* IXB file is empty... No files */ if(write(file,fname,11)!=11) { /* Write filename it IXB file */ close(file); @@ -310,10 +313,10 @@ BOOL DLLCALL addfiledat(scfg_t* cfg, fil close(file); return(FALSE); } - write(file,&f->dateuled,sizeof(time_t)); + write(file,&f->dateuled,4); write(file,&f->datedled,4); } - length=filelength(file); + length=(long)filelength(file); close(file); return(TRUE); } @@ -334,7 +337,7 @@ BOOL DLLCALL getfileixb(scfg_t* cfg, fil if((file=sopen(str,O_RDONLY|O_BINARY,SH_DENYWR))==-1) { return(FALSE); } - length=filelength(file); + length=(long)filelength(file); if(length%F_IXBSIZE) { close(file); return(FALSE); @@ -385,7 +388,7 @@ BOOL DLLCALL putfileixb(scfg_t* cfg, fil if((file=sopen(str,O_RDWR|O_BINARY,SH_DENYRW))==-1) { return(FALSE); } - length=filelength(file); + length=(long)filelength(file); if(length%F_IXBSIZE) { close(file); return(FALSE); @@ -416,8 +419,8 @@ BOOL DLLCALL putfileixb(scfg_t* cfg, fil lseek(file,l+11+3,SEEK_SET); - write(file,&f->dateuled,sizeof(f->dateuled)); - write(file,&f->datedled,sizeof(f->datedled)); + write(file,&f->dateuled,4); + write(file,&f->datedled,4); close(file); @@ -441,7 +444,7 @@ BOOL DLLCALL removefiledat(scfg_t* cfg, if((file=sopen(str,O_RDONLY|O_BINARY,SH_DENYWR))==-1) { return(FALSE); } - length=filelength(file); + length=(long)filelength(file); if(!length) { close(file); return(FALSE); @@ -505,22 +508,26 @@ BOOL DLLCALL findfile(scfg_t* cfg, uint fname[i]=fname[i+1]; SAFEPRINTF2(str,"%s%s.ixb",cfg->dir[dirnum]->data_dir,cfg->dir[dirnum]->code); if((file=sopen(str,O_RDONLY|O_BINARY,SH_DENYWR))==-1) return(FALSE); - length=filelength(file); + length=(long)filelength(file); if(!length) { close(file); - return(FALSE); } + return(FALSE); + } if((ixbbuf=(char *)malloc(length))==NULL) { close(file); - return(FALSE); } + return(FALSE); + } if(lread(file,ixbbuf,length)!=length) { close(file); free((char *)ixbbuf); - return(FALSE); } + return(FALSE); + } close(file); for(l=0;ldir[f->dir]->data_dir,cfg->dir[f->dir]->code); if((file=nopen(str,O_RDWR))==-1) return(errno); - length=filelength(file); + length=(long)filelength(file); if(length%F_IXBSIZE) { close(file); return(-1); @@ -687,7 +701,8 @@ int DLLCALL update_uldate(scfg_t* cfg, f for(l=0;l=length) { close(file); return(-2);