X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fos.c;h=a4142ff04e051750eebb14778fa6621fd2638d5d;hp=ccb0041e257d797910b88064450012c6d78fe0bc;hb=8589e0d1f5e47c05458033e750fd6182ca704fbe;hpb=fcd944d85fae1750294f8fd387fe947b845d6eb9 diff --git a/lib/os.c b/lib/os.c index ccb0041..a4142ff 100755 --- a/lib/os.c +++ b/lib/os.c @@ -192,8 +192,8 @@ static char* getTempDir() return dir; } -char* mktempname(char*ptr) { - static char tmpbuf[128]; +char* mktempname(char*ptr, const char*ext) { + static char tmpbuf[160]; char*dir = getTempDir(); int l = strlen(dir); char*sep = ""; @@ -207,20 +207,24 @@ char* mktempname(char*ptr) { #endif } - // used to be mktemp. This does remove the warnings, but - // It's not exactly an improvement. #ifdef HAVE_LRAND48 - sprintf(ptr, "%s%s%08x%08x",dir,sep,lrand48(),lrand48()); + unsigned int r1 = (unsigned int)lrand48(); + unsigned int r2 = (unsigned int)lrand48(); +#elif HAVE_RAND + unsigned int r1 = rand(); + unsigned int r2 = rand(); #else -# ifdef HAVE_RAND - sprintf(ptr, "%s%s%08x%08x",dir,sep,rand(),rand()); -# else - static int count = 1; - sprintf(ptr, "%s%s%08x%04x%04x",dir,sep,time(0),(unsigned int)tmpbuf^((unsigned int)tmpbuf)>>16,count); - count ++; -# endif + static int count = 1; + unsigned int r1 = time(0); + unsigned int r2 = (unsigned int)tmpbuf<<8^count; + count ++; #endif - return ptr; + if(ext) { + sprintf(ptr, "%s%s%04x%04x.%s",dir,sep,r1,r2,ext); + } else { + sprintf(ptr, "%s%s%04x%04x",dir,sep,r1,r2); + } + return ptr; } memfile_t* memfile_open(const char*path) @@ -274,3 +278,33 @@ void memfile_close(memfile_t*file) free(file); } +void move_file(const char*from, const char*to) +{ + int result = rename(from, to); + + if(result==0) return; //done! + + /* if we can't rename, for some reason, copy the file + manually */ + FILE*fi = fopen(from, "rb"); + if(!fi) { + perror(from); + return; + } + FILE*fo = fopen(to, "wb"); + if(!fo) { + perror(to); + return; + } + char buffer[16384]; + while(1) { + int bytes = fread(buffer, 16384, 1, fi); + if(bytes<=0) + return; + fwrite(buffer, bytes, 1, fo); + } + + fclose(fo); + fclose(fi); +} +