mirror of git://gcc.gnu.org/git/gcc.git
273 lines
8.9 KiB
C
273 lines
8.9 KiB
C
/* Reduced from Doom's d_main.c, which is under the GPLv2 or later. */
|
|
|
|
/* { dg-additional-options "-std=gnu17 -Wno-analyzer-too-complex" } */
|
|
|
|
typedef __SIZE_TYPE__ size_t;
|
|
typedef struct _IO_FILE FILE;
|
|
|
|
extern int
|
|
printf(const char* __restrict, ...);
|
|
|
|
extern int
|
|
sprintf(char* __restrict __s, const char* __restrict, ...)
|
|
__attribute__((__nothrow__));
|
|
|
|
extern void*
|
|
malloc(size_t __size) __attribute__((__nothrow__, __leaf__))
|
|
__attribute__((__malloc__)) __attribute__((__alloc_size__(1)));
|
|
extern char*
|
|
getenv(const char* __name) __attribute__((__nothrow__, __leaf__))
|
|
__attribute__((__nonnull__(1)));
|
|
extern int
|
|
access(const char* __name, int __type) __attribute__((__nothrow__, __leaf__))
|
|
__attribute__((__nonnull__(1)));
|
|
extern char*
|
|
strcpy(char* __restrict __dest, const char* __restrict __src)
|
|
__attribute__((__nothrow__, __leaf__)) __attribute__((__nonnull__(1, 2)));
|
|
extern size_t
|
|
strlen(const char* __s) __attribute__((__nothrow__, __leaf__))
|
|
__attribute__((__pure__)) __attribute__((__nonnull__(1)));
|
|
|
|
typedef enum
|
|
{
|
|
shareware,
|
|
registered,
|
|
commercial,
|
|
|
|
retail,
|
|
indetermined
|
|
|
|
} GameMode_t;
|
|
|
|
typedef enum
|
|
{
|
|
doom,
|
|
doom2,
|
|
pack_tnt,
|
|
pack_plut,
|
|
none
|
|
|
|
} GameMission_t;
|
|
|
|
typedef enum
|
|
{
|
|
english,
|
|
french,
|
|
german,
|
|
unknown
|
|
|
|
} Language_t;
|
|
|
|
typedef enum
|
|
{
|
|
false,
|
|
true
|
|
} boolean;
|
|
|
|
extern boolean devparm;
|
|
extern GameMode_t gamemode;
|
|
extern Language_t language;
|
|
extern char basedefault[1024];
|
|
int
|
|
M_CheckParm(char* check);
|
|
void
|
|
I_Error(char* error, ...);
|
|
|
|
extern char* wadfiles[20];
|
|
|
|
void
|
|
D_AddFile(char* file)
|
|
{
|
|
int numwadfiles;
|
|
char* newfile;
|
|
|
|
for (numwadfiles = 0; wadfiles[numwadfiles]; numwadfiles++)
|
|
;
|
|
|
|
newfile = malloc(strlen(file) + 1);
|
|
strcpy(newfile, file); /* { dg-warning "use of possibly-NULL 'newfile' where non-null expected" } */
|
|
|
|
wadfiles[numwadfiles] = newfile;
|
|
}
|
|
|
|
void
|
|
IdentifyVersion(void)
|
|
{
|
|
|
|
char* doom1wad;
|
|
char* doomwad;
|
|
char* doomuwad;
|
|
char* doom2wad;
|
|
|
|
char* doom2fwad;
|
|
char* plutoniawad;
|
|
char* tntwad;
|
|
|
|
char* home;
|
|
char* doomwaddir;
|
|
doomwaddir = getenv("DOOMWADDIR");
|
|
if (!doomwaddir)
|
|
doomwaddir = ".";
|
|
|
|
doom2wad = malloc(strlen(doomwaddir) + 1 + 9 + 1);
|
|
sprintf(doom2wad, "%s/doom2.wad", doomwaddir); /* { dg-warning "possibly-NULL 'doom2wad'" } */
|
|
|
|
doomuwad = malloc(strlen(doomwaddir) + 1 + 8 + 1);
|
|
sprintf(doomuwad, "%s/doomu.wad", doomwaddir); /* { dg-warning "possibly-NULL 'doomuwad'" } */
|
|
|
|
doomwad = malloc(strlen(doomwaddir) + 1 + 8 + 1);
|
|
sprintf(doomwad, "%s/doom.wad", doomwaddir); /* { dg-warning "possibly-NULL 'doomwad'" } */
|
|
|
|
doom1wad = malloc(strlen(doomwaddir) + 1 + 9 + 1);
|
|
sprintf(doom1wad, "%s/doom1.wad", doomwaddir); /* { dg-warning "possibly-NULL 'doom1wad'" } */
|
|
|
|
plutoniawad = malloc(strlen(doomwaddir) + 1 + 12 + 1);
|
|
sprintf(plutoniawad, "%s/plutonia.wad", doomwaddir); /* { dg-warning "possibly-NULL 'plutoniawad'" } */
|
|
|
|
tntwad = malloc(strlen(doomwaddir) + 1 + 9 + 1);
|
|
sprintf(tntwad, "%s/tnt.wad", doomwaddir); /* { dg-warning "possibly-NULL 'tntwad'" } */
|
|
|
|
doom2fwad = malloc(strlen(doomwaddir) + 1 + 10 + 1);
|
|
sprintf(doom2fwad, "%s/doom2f.wad", doomwaddir); /* { dg-warning "possibly-NULL 'doom2fwad'" } */
|
|
|
|
home = getenv("HOME");
|
|
if (!home)
|
|
I_Error("Please set $HOME to your home directory");
|
|
sprintf(basedefault, "%s/.doomrc", home);
|
|
|
|
if (M_CheckParm("-shdev")) {
|
|
gamemode = shareware;
|
|
devparm = true;
|
|
D_AddFile("devdata"
|
|
"doom1.wad");
|
|
D_AddFile("devmaps"
|
|
"data_se/texture1.lmp");
|
|
D_AddFile("devmaps"
|
|
"data_se/pnames.lmp");
|
|
strcpy(basedefault,
|
|
"devdata"
|
|
"default.cfg");
|
|
return; /* { dg-warning "leak of 'doom2wad'" } */
|
|
/* { dg-warning "leak of 'doomuwad'" "leak" { target *-*-* } .-1 } */
|
|
/* { dg-warning "leak of 'doomwad'" "leak" { target *-*-* } .-2 } */
|
|
/* { dg-warning "leak of 'doom1wad'" "leak" { target *-*-* } .-3 } */
|
|
/* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
|
|
/* { dg-warning "leak of 'tntwad'" "leak" { target *-*-* } .-5 } */
|
|
/* { dg-warning "leak of 'doom2fwad'" "leak" { target *-*-* } .-6 } */
|
|
}
|
|
|
|
if (M_CheckParm("-regdev")) {
|
|
gamemode = registered;
|
|
devparm = true;
|
|
D_AddFile("devdata"
|
|
"doom.wad");
|
|
D_AddFile("devmaps"
|
|
"data_se/texture1.lmp");
|
|
D_AddFile("devmaps"
|
|
"data_se/texture2.lmp");
|
|
D_AddFile("devmaps"
|
|
"data_se/pnames.lmp");
|
|
strcpy(basedefault,
|
|
"devdata"
|
|
"default.cfg");
|
|
return; /* { dg-warning "leak of 'doom2wad'" } */
|
|
/* { dg-warning "leak of 'doomuwad'" "leak" { target *-*-* } .-1 } */
|
|
/* { dg-warning "leak of 'doomwad'" "leak" { target *-*-* } .-2 } */
|
|
/* { dg-warning "leak of 'doom1wad'" "leak" { target *-*-* } .-3 } */
|
|
/* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
|
|
/* { dg-warning "leak of 'tntwad'" "leak" { target *-*-* } .-5 } */
|
|
/* { dg-warning "leak of 'doom2fwad'" "leak" { target *-*-* } .-6 } */
|
|
}
|
|
|
|
if (M_CheckParm("-comdev")) {
|
|
gamemode = commercial;
|
|
devparm = true;
|
|
|
|
D_AddFile("devdata"
|
|
"doom2.wad");
|
|
|
|
D_AddFile("devmaps"
|
|
"cdata/texture1.lmp");
|
|
D_AddFile("devmaps"
|
|
"cdata/pnames.lmp");
|
|
strcpy(basedefault,
|
|
"devdata"
|
|
"default.cfg");
|
|
return; /* { dg-warning "leak of 'doom2wad'" } */
|
|
/* { dg-warning "leak of 'doomuwad'" "leak" { target *-*-* } .-1 } */
|
|
/* { dg-warning "leak of 'doomwad'" "leak" { target *-*-* } .-2 } */
|
|
/* { dg-warning "leak of 'doom1wad'" "leak" { target *-*-* } .-3 } */
|
|
/* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
|
|
/* { dg-warning "leak of 'tntwad'" "leak" { target *-*-* } .-5 } */
|
|
/* { dg-warning "leak of 'doom2fwad'" "leak" { target *-*-* } .-6 } */
|
|
}
|
|
|
|
if (!access(doom2fwad, 4)) {
|
|
gamemode = commercial;
|
|
|
|
language = french;
|
|
printf("French version\n");
|
|
D_AddFile(doom2fwad);
|
|
return; /* { dg-warning "leak of 'doom2wad'" } */
|
|
/* { dg-warning "leak of 'doomuwad'" "leak" { target *-*-* } .-1 } */
|
|
/* { dg-warning "leak of 'doomwad'" "leak" { target *-*-* } .-2 } */
|
|
/* { dg-warning "leak of 'doom1wad'" "leak" { target *-*-* } .-3 } */
|
|
/* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
|
|
/* { dg-warning "leak of 'tntwad'" "leak" { target *-*-* } .-5 } */
|
|
/* { dg-warning "leak of 'doom2fwad'" "leak" { target *-*-* } .-6 } */
|
|
}
|
|
|
|
if (!access(doom2wad, 4)) {
|
|
gamemode = commercial;
|
|
D_AddFile(doom2wad);
|
|
return; /* { dg-warning "leak of 'doom2wad'" } */
|
|
/* { dg-warning "leak of 'doomuwad'" "leak" { target *-*-* } .-1 } */
|
|
/* { dg-warning "leak of 'doomwad'" "leak" { target *-*-* } .-2 } */
|
|
/* { dg-warning "leak of 'doom1wad'" "leak" { target *-*-* } .-3 } */
|
|
/* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
|
|
/* { dg-warning "leak of 'tntwad'" "leak" { target *-*-* } .-5 } */
|
|
/* { dg-warning "leak of 'doom2fwad'" "leak" { target *-*-* } .-6 } */
|
|
}
|
|
|
|
if (!access(plutoniawad, 4)) {
|
|
gamemode = commercial;
|
|
D_AddFile(plutoniawad);
|
|
return; /* { dg-warning "leak of 'doom2wad'" } */
|
|
/* { dg-warning "leak of 'doomuwad'" "leak" { target *-*-* } .-1 } */
|
|
/* { dg-warning "leak of 'doomwad'" "leak" { target *-*-* } .-2 } */
|
|
/* { dg-warning "leak of 'doom1wad'" "leak" { target *-*-* } .-3 } */
|
|
/* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
|
|
/* { dg-warning "leak of 'tntwad'" "leak" { target *-*-* } .-5 } */
|
|
/* { dg-warning "leak of 'doom2fwad'" "leak" { target *-*-* } .-6 } */
|
|
}
|
|
|
|
if (!access(tntwad, 4)) {
|
|
gamemode = commercial;
|
|
D_AddFile(tntwad);
|
|
return; /* { dg-warning "leak of 'doom2wad'" } */
|
|
/* { dg-warning "leak of 'doomuwad'" "leak" { target *-*-* } .-1 } */
|
|
/* { dg-warning "leak of 'doomwad'" "leak" { target *-*-* } .-2 } */
|
|
/* { dg-warning "leak of 'doom1wad'" "leak" { target *-*-* } .-3 } */
|
|
/* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
|
|
/* { dg-warning "leak of 'tntwad'" "leak" { target *-*-* } .-5 } */
|
|
/* { dg-warning "leak of 'doom2fwad'" "leak" { target *-*-* } .-6 } */
|
|
}
|
|
|
|
if (!access(doomuwad, 4)) {
|
|
gamemode = retail;
|
|
D_AddFile(doomuwad);
|
|
return; /* { dg-warning "leak of 'doom2wad'" } */
|
|
/* { dg-warning "leak of 'doomuwad'" "leak" { target *-*-* } .-1 } */
|
|
/* { dg-warning "leak of 'doomwad'" "leak" { target *-*-* } .-2 } */
|
|
/* { dg-warning "leak of 'doom1wad'" "leak" { target *-*-* } .-3 } */
|
|
/* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
|
|
/* { dg-warning "leak of 'tntwad'" "leak" { target *-*-* } .-5 } */
|
|
/* { dg-warning "leak of 'doom2fwad'" "leak" { target *-*-* } .-6 } */
|
|
}
|
|
|
|
/* [...snip...] */
|
|
|
|
printf("Game mode indeterminate.\n");
|
|
gamemode = indetermined;
|
|
}
|