tBetter error reporting for failed file opens - vaccinewars - be a doctor and t… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f9bb1a00231cba2fb81329110c8fdfae02005770 | |
parent 9c098d6cea6de068c73d28d1bcc76425055fdbfc | |
Author: Ben Webb <[email protected]> | |
Date: Fri, 14 Sep 2001 19:21:16 +0000 | |
Better error reporting for failed file opens | |
Diffstat: | |
M src/serverside.c | 71 ++++++++++++++++++++---------… | |
1 file changed, 46 insertions(+), 25 deletions(-) | |
--- | |
diff --git a/src/serverside.c b/src/serverside.c | |
t@@ -577,6 +577,7 @@ void CreatePidFile(void) { | |
/* Creates a pid file (if "PidFile" is non-NULL) and writes the process */ | |
/* ID into it */ | |
FILE *fp; | |
+ char *OpenError; | |
if (!PidFile) return; | |
fp=fopen(PidFile,"w"); | |
if (fp) { | |
t@@ -584,7 +585,10 @@ void CreatePidFile(void) { | |
fprintf(fp,"%ld\n",(long)getpid()); | |
fclose(fp); | |
chmod(PidFile,S_IREAD|S_IWRITE); | |
- } else g_warning(_("Cannot create pid file %s"),PidFile); | |
+ } else { | |
+ OpenError=strerror(errno); | |
+ g_warning(_("Cannot create pid file %s: %s"),PidFile,OpenError); | |
+ } | |
} | |
void RemovePidFile(void) { | |
t@@ -1215,6 +1219,7 @@ void ConvertHighScoreFile(void) { | |
/* Converts an old format high score file to the new format. */ | |
FILE *old,*backup; | |
gchar *BackupFile,ch; | |
+ char *OldError=NULL,*BackupError=NULL; | |
struct HISCORE MultiScore[NUMHISCORE],AntiqueScore[NUMHISCORE]; | |
/* The user running dopewars must be allowed to mess with the score file */ | |
t@@ -1223,40 +1228,54 @@ void ConvertHighScoreFile(void) { | |
BackupFile = g_strdup_printf("%s.bak",ConvertFile); | |
old=fopen(ConvertFile,"r+"); | |
+ if (!old) OldError = strerror(errno); | |
+ | |
backup=fopen(BackupFile,"w"); | |
+ if (!backup) BackupError = strerror(errno); | |
if (old && backup) { | |
-/* First, make a backup of the old file */ | |
- ftruncate(fileno(backup),0); rewind(backup); | |
+/* First, make sure that the "old" file doesn't have a valid "new" header */ | |
rewind(old); | |
- while(1) { | |
- ch = fgetc(old); | |
- if (ch==EOF) break; else fputc(ch,backup); | |
- } | |
- fclose(backup); | |
- | |
-/* Read in the scores without the header, and then write out with the header */ | |
- if (!HighScoreRead(old,MultiScore,AntiqueScore,FALSE)) { | |
- g_log(NULL,G_LOG_LEVEL_CRITICAL,_("Error reading scores from %s."), | |
+ if (HighScoreReadHeader(old,NULL)) { | |
+ g_log(NULL,G_LOG_LEVEL_CRITICAL, | |
+ _("The high score file %s\n" | |
+ "is already in the new format! Aborting."), | |
ConvertFile); | |
+ fclose(old); fclose(backup); | |
} else { | |
- ftruncate(fileno(old),0); rewind(old); | |
- if (HighScoreWrite(old,MultiScore,AntiqueScore)) { | |
- g_message(_("The high score file %s has been converted to the new " | |
- "format.\nA backup of the old file has been created " | |
- "as %s.\n"),ConvertFile,BackupFile); | |
+/* Make a backup of the old file */ | |
+ ftruncate(fileno(backup),0); rewind(backup); | |
+ rewind(old); | |
+ while(1) { | |
+ ch = fgetc(old); | |
+ if (ch==EOF) break; else fputc(ch,backup); | |
} | |
+ fclose(backup); | |
+ | |
+/* Read in the scores without the header, and then write out with the header */ | |
+ if (!HighScoreRead(old,MultiScore,AntiqueScore,FALSE)) { | |
+ g_log(NULL,G_LOG_LEVEL_CRITICAL,_("Error reading scores from %s."), | |
+ ConvertFile); | |
+ } else { | |
+ ftruncate(fileno(old),0); rewind(old); | |
+ if (HighScoreWrite(old,MultiScore,AntiqueScore)) { | |
+ g_message(_("The high score file %s has been converted to the " | |
+ "new format.\nA backup of the old file has been " | |
+ "created as %s.\n"),ConvertFile,BackupFile); | |
+ } | |
+ } | |
+ fclose(old); | |
} | |
- fclose(old); | |
} else { | |
if (!old) { | |
- g_log(NULL,G_LOG_LEVEL_CRITICAL,_("Cannot open high score file %s."), | |
- ConvertFile); | |
+ g_log(NULL,G_LOG_LEVEL_CRITICAL, | |
+ _("Cannot open high score file %s: %s."), | |
+ ConvertFile,OldError); | |
} else if (!backup) { | |
g_log(NULL,G_LOG_LEVEL_CRITICAL, | |
- _("Cannot create backup of the high score file (%s)."), | |
- BackupFile); | |
+ _("Cannot create backup (%s) of the\nhigh score file: %s."), | |
+ BackupFile,BackupError); | |
} | |
} | |
t@@ -1267,6 +1286,7 @@ int InitHighScoreFile(void) { | |
/* Opens the high score file for later use, and then drops privileges. */ | |
/* If the high score file cannot be found, returns -1 (0=success) */ | |
gboolean NewFile=FALSE; | |
+ char *OpenError=NULL; | |
if (ScoreFP) return 0; /* If already opened, then we're done */ | |
t@@ -1274,6 +1294,7 @@ int InitHighScoreFile(void) { | |
ScoreFP=fopen(HiScoreFile,"r+"); | |
if (!ScoreFP) { | |
ScoreFP=fopen(HiScoreFile,"w+"); | |
+ if (!ScoreFP) OpenError=strerror(errno); | |
NewFile=TRUE; | |
} | |
t@@ -1281,9 +1302,9 @@ int InitHighScoreFile(void) { | |
if (!ScoreFP) { | |
g_log(NULL,G_LOG_LEVEL_CRITICAL,_("Cannot open high score file %s.\n" | |
- "Either ensure you have permissions to access this file and " | |
- "directory, or\nspecify an alternate high score file with " | |
- "the -f command line option."),HiScoreFile); | |
+ "(%s.) Either ensure you have permissions to access\n" | |
+ "this file and directory, or specify an alternate high score " | |
+ "file with the\n-f command line option."),HiScoreFile,OpenError); | |
return -1; | |
} | |