Mercurial > hg > early-roguelike
comparison srogue/main.c @ 184:7c059ec2a2c7
Merge Super-Rogue fixes into the MSVC testing branch.
author | John "Elwin" Edwards |
---|---|
date | Sun, 02 Aug 2015 12:25:44 -0400 |
parents | db1c9a21a7c3 |
children | 7c552cbc6ad9 |
comparison
equal
deleted
inserted
replaced
183:7f5f5f1ba09c | 184:7c059ec2a2c7 |
---|---|
32 #include <sys/time.h> | 32 #include <sys/time.h> |
33 #endif | 33 #endif |
34 | 34 |
35 #include "rogue.ext" | 35 #include "rogue.ext" |
36 | 36 |
37 void open_records(void); | |
38 | |
39 extern int scorefd; | |
40 extern FILE *logfile; | |
41 | |
37 main(argc, argv, envp) | 42 main(argc, argv, envp) |
38 char **argv; | 43 char **argv; |
39 char **envp; | 44 char **envp; |
40 { | 45 { |
41 register char *env; | 46 register char *env; |
62 #ifdef SCOREFILE | 67 #ifdef SCOREFILE |
63 strncpy(scorefile, SCOREFILE, LINLEN); | 68 strncpy(scorefile, SCOREFILE, LINLEN); |
64 scorefile[LINLEN - 1] = '\0'; | 69 scorefile[LINLEN - 1] = '\0'; |
65 #else | 70 #else |
66 | 71 |
67 strcpy(scorefile, homedir); | 72 strncpy(scorefile, homedir, LINLEN-11); |
73 if (scorefile[LINLEN-12] != '\0') | |
74 scorefile[0] = '\0'; | |
68 | 75 |
69 if (*scorefile) | 76 if (*scorefile) |
70 strcat(scorefile,"/"); | 77 strcat(scorefile,"/"); |
71 strcat(scorefile, "srogue.scr"); | 78 strcat(scorefile, "srogue.scr"); |
72 #endif | 79 #endif |
80 open_records(); | |
73 | 81 |
74 if(argc >= 2 && strcmp(argv[1], "-s") == 0) | 82 if(argc >= 2 && strcmp(argv[1], "-s") == 0) |
75 { | 83 { |
76 showtop(0); | 84 showtop(0); |
77 exit(0); | 85 exit(0); |
113 } | 121 } |
114 } | 122 } |
115 #endif | 123 #endif |
116 | 124 |
117 if (!use_savedir) | 125 if (!use_savedir) |
118 md_droppriv(); | 126 md_normaluser(); |
119 | 127 |
120 /* get home and options from environment */ | 128 /* get home and options from environment */ |
121 | 129 |
122 if ((env = getenv("HOME")) != NULL) | 130 if ((env = getenv("HOME")) != NULL) |
123 strcpy(home, env); | 131 strcpy(home, env); |
436 } | 444 } |
437 | 445 |
438 char * | 446 char * |
439 roguehome() | 447 roguehome() |
440 { | 448 { |
441 static char path[1024]; | 449 static char path[LINLEN+16]; |
442 char *end,*home; | 450 char *end,*home; |
443 | 451 |
444 if ( (home = getenv("ROGUEHOME")) != NULL) | 452 if ( (home = getenv("ROGUEHOME")) != NULL) |
445 { | 453 { |
446 if (*home) | 454 if (*home) |
447 { | 455 { |
448 strncpy(path, home, PATH_MAX - 20); | 456 /* LINLEN - 11 is all that will fit into scorefile */ |
449 | 457 strncpy(path, home, LINLEN - 11); |
450 end = &path[strlen(path)-1]; | 458 if (path[LINLEN - 12] == '\0') |
451 | 459 { |
452 | 460 end = &path[strlen(path)-1]; |
453 while( (end >= path) && ((*end == '/') || (*end == '\\'))) | 461 while( (end >= path) && ((*end == '/') || (*end == '\\'))) |
454 *end-- = '\0'; | 462 *end-- = '\0'; |
455 | 463 |
456 if (directory_exists(path)) | 464 if (directory_exists(path)) |
457 return(path); | 465 return(path); |
466 } | |
467 /* Otherwise home was truncated and should be ignored */ | |
458 } | 468 } |
459 } | 469 } |
460 | 470 |
461 if (directory_exists("/var/games/roguelike")) | 471 if (directory_exists("/var/games/roguelike")) |
462 return("/var/games/roguelike"); | 472 return("/var/games/roguelike"); |
470 return("/games/roguelik"); | 480 return("/games/roguelik"); |
471 | 481 |
472 return(NULL); | 482 return(NULL); |
473 } | 483 } |
474 | 484 |
485 void | |
486 open_records(void) | |
487 { | |
488 if (scorefd < 0) | |
489 scorefd = open(scorefile, O_RDWR | O_CREAT, 0666); | |
490 #ifdef LOGFILE | |
491 if (logfile == NULL) | |
492 logfile = fopen(LOGFILE, "a"); | |
493 #endif | |
494 } | |
495 |