--- shared.c.orig Thu Dec 2 11:49:23 2004 +++ shared.c Thu Dec 2 11:52:16 2004 @@ -58,7 +58,7 @@ #include "bitmap/window.bits" #include "bitmap/anti.bits" -char *sprintf(); /* UNIX brain damage */ +/* char *sprintf(); /* UNIX brain damage */ /* All in and out movements except up */ #define NOUPBITS DLEAVE | LLEAVE | RLEAVE | HENTER | VENTER @@ -312,21 +312,25 @@ FILE *levelfile; register int i,j; int x,y; - char buf[300]; + char buf[1300]; /* Manufaction the file name by starting with the world name and */ /* appending the level number to it. */ - strcpy(filename,LIB); - strcat(filename,"/"); - strcat(filename,worldname); + if (strchr (worldname, '/')) + *filename = 0; + else { + strncpy(filename,LIB,sizeof(filename) - 3); + strncat(filename,"/",sizeof(filename) - 3); + } + strncat(filename,worldname,sizeof(filename) - 3); sprintf(filename + strlen(filename),"%03d",levelnum); /* Open level file for reading */ levelfile = fopen(filename,"r"); /* If level file does not exist, use the default level file. */ if(levelfile == NULL) { /* Build the default level name */ - strcpy(buf,LIB); - strcat(buf,"/default"); + strncpy(buf,LIB,sizeof(filename)); + strncat(buf,"/default",sizeof(filename)); /* Open default level file for reading */ levelfile = fopen(buf,"r"); if(levelfile == NULL) {