From 7e3f91d3d8bb0a672bd9803b84c2f08b76c92b60 Mon Sep 17 00:00:00 2001 From: Michiel Van Der Kolk Date: Wed, 27 Apr 2005 12:11:50 +0000 Subject: [PATCH] Obvious optimizations (i wasn't quite awake yet) + Code formatting policy. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6365 a1c6a512-1295-4272-9138-f99709370657 --- apps/database.c | 207 ++++++++++++++++++++++++------------------------ 1 file changed, 104 insertions(+), 103 deletions(-) diff --git a/apps/database.c b/apps/database.c index 7f605baa16..615403dbed 100644 --- a/apps/database.c +++ b/apps/database.c @@ -115,138 +115,139 @@ void tagdb_shutdown(void) /*** TagDatabase code ***/ void writetagdbheader() { - lseek(tagdb_fd,0,SEEK_SET); - write(tagdb_fd, &tagdbheader, 68); + lseek(tagdb_fd,0,SEEK_SET); + write(tagdb_fd, &tagdbheader, 68); } void getfentrybyoffset(int offset) { - lseek(tagdb_fd,offset,SEEK_SET); - fread(tagdb_fd,sbuf,tagdbheader.filelen); - fread(tagdb_fd,&fe+sizeof(char *),12); - fe.name=sbuf; - currentfeoffset=offset; - currentferecord=(offset-tagdbheader.filestart)/FILEENTRY_SIZE; + lseek(tagdb_fd,offset,SEEK_SET); + fread(tagdb_fd,sbuf,tagdbheader.filelen); + fread(tagdb_fd,&fe+sizeof(char *),12); + fe.name=sbuf; + currentfeoffset=offset; + currentferecord=(offset-tagdbheader.filestart)/FILEENTRY_SIZE; } #define getfentrybyrecord(_x_) getfentrybyoffset(FILERECORD2OFFSET(_x_)) int getfentrybyfilename(char *fname) { - int min=0; - int max=tagdbheader.filecount; - while(min=startingoffset) { - splash(HZ*2,"Woah. no beeping way. (tagdb_shiftdown)"); - return 0; +int tagdb_shiftdown(int targetoffset, int startingoffset, int bytes) { + int amount; + if(targetoffset>=startingoffset) { + splash(HZ*2,"Woah. no beeping way. (tagdb_shiftdown)"); + return 0; + } + lseek(tagdb_fd,startingoffset,SEEK_SET); + while(amount=read(tagdb_fd,sbuf,bytes > 1024 ? 1024 : bytes)) { + int written; + startingoffset+=amount; + lseek(tagdb_fd,targetoffset,SEEK_SET); + written=write(tagdb_fd,sbuf,amount); + targetoffset+=written; + if(amount!=written) { + splash(HZ*2,"Something went very wrong. expect database corruption. (tagdb_shiftdown)"); + return 0; } lseek(tagdb_fd,startingoffset,SEEK_SET); - while(amount=read(tagdb_fd,sbuf,1024)) { - int written; - startingoffset+=amount; - lseek(tagdb_fd,targetoffset,SEEK_SET); - written=write(tagdb_fd,sbuf,amount); - targetoffset+=written; - if(amount!=written) { - splash(HZ*2,"Something went very wrong. expect database corruption. (tagdb_shiftdown)"); - return 0; - } - lseek(tagdb_fd,startingoffset,SEEK_SET); - } - ftruncate(tagdb_fd,lseek(tagdb_fd,0,SEEK_END) - (startingoffset-targetoffset)); - return 1; + bytes-=amount; + } + return 1; } -int tagdb_shiftup(int targetoffset, int startingoffset) { - int amount,amount2; - int readpos,writepos,filelen; - int ok; - if(targetoffset<=startingoffset) { - splash(HZ*2,"Um. no. (tagdb_shiftup)"); +int tagdb_shiftup(int targetoffset, int startingoffset, int bytes) { + int amount,amount2; + int readpos,writepos,filelen; + int ok; + if(targetoffset<=startingoffset) { + splash(HZ*2,"Um. no. (tagdb_shiftup)"); + return 0; + } + filelen=lseek(tagdb_fd,0,SEEK_END); + readpos=startingoffset+bytes; + do { + amount=bytes>1024 ? 1024 : bytes; + readpos-=amount; + writepos=readpos+targetoffset-startingoffset; + lseek(tagdb_fd,readpos,SEEK_SET); + amount2=read(tagdb_fd,sbuf,amount); + if(amount2!=amount) { + splash(HZ*2,"Something went very wrong. expect database corruption. (tagdb_shiftup)"); + return 0; } - filelen=lseek(tagdb_fd,0,SEEK_END); - readpos=filelen; - do { - amount=readpos-startingoffset>1024 ? 1024 : readpos-startingoffset; - readpos-=amount; - writepos=readpos+(targetoffset-startingoffset); - lseek(tagdb_fd,readpos,SEEK_SET); - amount2=read(tagdb_fd,sbuf,amount); - if(amount2!=amount) { - splash(HZ*2,"Something went very wrong. expect database corruption. (tagdb_shiftup)"); - } - lseek(tagdb_fd,writepos,SEEK_SET); - amount=write(tagdb_fd,sbuf,amount2); - if(amount2!=amount) { - splash(HZ*2,"Something went very wrong. expect database corruption. (tagdb_shiftup)"); - } - } while (amount>0); - if(amount==0) - return 1; - else { - splash(HZ*2,"Something went wrong, >.>;; (tagdb_shiftup)"); - return 0; + lseek(tagdb_fd,writepos,SEEK_SET); + amount=write(tagdb_fd,sbuf,amount2); + if(amount2!=amount) { + splash(HZ*2,"Something went very wrong. expect database corruption. (tagdb_shiftup)"); + return 0; } + bytes-=amount; + } while (amount>0); + if(bytes==0) + return 1; + else { + splash(HZ*2,"Something went wrong, >.>;; (tagdb_shiftup)"); + return 0; + } } /*** end TagDatabase code ***/