diff -urN xscavenger-1.4.4.orig/src/Imakefile xscavenger-1.4.4/src/Imakefile --- xscavenger-1.4.4.orig/src/Imakefile +++ xscavenger-1.4.4/src/Imakefile @@ -1,20 +1,36 @@ # set this to the path where data files should be stored. LIBDIR # is automatically defined by imake, usually to /usr/X11R6/lib/X11, so # this should be a good default. -LIBNAME = $(LIBDIR)/scavenger +LIBNAME = GENTOO_DATADIR/scavenger SRCS = anim.c edit.c scav.c x.c sound.c OBJS = $(SRCS:.c=.o) +# the "subst" hack below is because imake uses the C preprocessor, which +# will interpret an unquoted "/*" as a comment beginning. +#LIB_DATA = $(subst S,/,..SdataS*) LIB_DATA = \ - ../data/badguy.lbm ../data/brownblue.lbm ../data/death.raw \ - ../data/dig.raw ../data/fall.raw ../data/levels.scl \ - ../data/microman.lbm ../data/pop.raw ../data/redbrick.lbm \ - ../data/reddevil.lbm ../data/regularguy.lbm ../data/spiralthing.lbm \ + ../data/badguy.lbm \ + ../data/brownblue.lbm \ + ../data/death.raw \ + ../data/dig.raw \ + ../data/fall.raw \ + ../data/flashspiral.lbm \ + ../data/gems.lbm \ + ../data/jungle.lbm \ + ../data/levels.scl \ + ../data/microman.lbm \ + ../data/pop.raw \ + ../data/redbrick.lbm \ + ../data/reddevil.lbm \ + ../data/regularguy.lbm \ + ../data/spiralthing.lbm \ ../data/victory.raw LOCAL_LIBRARIES = $(XLIB) EXTRA_DEFINES = -DLIBNAME=\"$(LIBNAME)\" -ComplexProgramTarget(scavenger) +AllTarget(scavenger) +NormalProgramTarget(scavenger,$(OBJS),,,$(XLIB)) +InstallProgram(scavenger,GENTOO_BINDIR) InstallMultipleFlags($(LIB_DATA),$(LIBNAME),-m 644) diff -urN xscavenger-1.4.4.orig/src/scav.c xscavenger-1.4.4/src/scav.c --- xscavenger-1.4.4.orig/src/scav.c +++ xscavenger-1.4.4/src/scav.c @@ -240,15 +240,19 @@ +/* 14 Dec 2002: re-wrote to be more portable - don't assume two's-complement + * representation for integers, and fix bug when sizeof(long) > 4. + */ long readlong() { -long val1=0; - - val1=myci()<<24L; - val1|=myci()<<16L; - val1|=myci()<<8; - val1|=myci(); + long val1=0; + int i,j; + for (i=0; i<4; i++) { + j = myci(); + if (j==-1) return -1L; + val1 = (val1<<8) + j; + } return val1; } int rbs() @@ -309,7 +313,7 @@ bmw=bmh=byteswide=0; while( (type=readlong()) ) { - if(type==0xffffffffL) break; + if(type==-1L) break; size=readlong(); if(size&1) size++; if(type==BMHD) @@ -402,16 +406,16 @@ input=open(resourcename,O_RDONLY); if(input<0) return -1; got=read(input,buff,8); - if(got!=8) return -2; - if (strncmp(buff,"SCAV",4)) return -3; + if(got!=8) {close(input);return -2;} + if (strncmp(buff,"SCAV",4)) {close(input);return -3;} max=(buff[4]<<24) | (buff[5]<<16) | (buff[6]<<8) | buff[7]; - if(num>=max) return 0; + if(num>=max) {close(input);return 0;} lseek(input,(num+1)<<3,SEEK_SET); got=read(input,buff,8); offset=(buff[0]<<24) | (buff[1]<<16) | (buff[2]<<8) | buff[3]; length=(buff[4]<<24) | (buff[5]<<16) | (buff[6]<<8) | buff[7]; if(len>length) len=length; - if(!offset || !len) return 0; + if(!offset || !len) {close(input);return 0;} lseek(input,offset,SEEK_SET); got=read(input,put,len); close(input); @@ -448,8 +452,8 @@ input=open(resourcename,O_RDONLY); if(input==-1) return -4; got=read(input,buff,8); - if(got!=8) return -2; - if(strncmp(buff,"SCAV",4)) return -3; + if(got!=8) {close(input);return -2;} + if(strncmp(buff,"SCAV",4)) {close(input);return -3;} output=creat(bakname,00600); if(output==-1) {close(input);return -6;} @@ -473,12 +477,12 @@ for(i=0;i1024 ? 1024 : count; - if (read(input,copybuff,got) != got) return -200; - if (write(output,copybuff,got) != got) return -200; + if (read(input,copybuff,got) != got) {close(input);close(output);return -200;} + if (write(output,copybuff,got) != got) {close(input);close(output);return -200;} count-=got; } lseek(input,length,SEEK_CUR); @@ -498,17 +502,17 @@ { got=read(input, copybuff, 1024); if (!got) break; - if (write (output, copybuff, got) != got) return -200; + if (write (output, copybuff, got) != got) {close(input);close(output);return -200;} offset += got; } if(len) { - if (write (output, take, len) != len) return -200; + if (write (output, take, len) != len) {close(input);close(output);return -200;} lseek (output, (num+1) << 3, SEEK_SET); - if (!rlout (output, offset)) return -200; + if (!rlout (output, offset)) {close(input);close(output);return -200;} } close (input); - if (fsync(output)) return -200; + if (fsync(output)) {close(output);return -200;} if (close(output)) return -200; err=rename(bakname,resourcename); if(err) return -1; @@ -1382,6 +1386,7 @@ break; } } + close(file); } void remslash(char *str) @@ -1416,6 +1421,8 @@ return -3; } } while(len); + close(input); + close(output); return 0; } @@ -1448,7 +1455,7 @@ printf("Failed to create directory %s, exiting\n",temp); exit(1); } - } + } else close(file); sprintf(resourcename,"%s/%s/%s",localname,localdirname,LEVELSNAME); file=open(resourcename,O_RDONLY); @@ -1485,7 +1492,7 @@ printf("Couldn't create %s\n",temp); exit(1); } - } + } else close(file); } void makercname(char *str)