X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=0996d10dfea85596e4fdc50b8fb39e380af069e8;hb=e1fdeb57afb3db322b3757d8105c66ba33cadca4;hp=7754e5e4ff42861a6d25f9c681610caca47bb7c8;hpb=a19647f4f265bb23bc249aa28a10d1d47a6179e1;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 7754e5e4..0996d10d 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -170,7 +170,7 @@ static char *getTapeDir(char *level_subdir) static char *getScoreDir(char *level_subdir) { static char *score_dir = NULL; - char *data_dir = options.rw_base_directory; + char *data_dir = getCommonDataDir(); char *score_subdir = SCORES_DIRECTORY; if (score_dir) @@ -425,11 +425,11 @@ static char *getCorrectedImageBasename(char *basename) { static char *msdos_filename = NULL; - if (filename != NULL) - free(filename); + if (msdos_filename != NULL) + free(msdos_filename); - filename = getStringCopy(basename_corrected); - strncpy(&filename[8], &basename[strlen(basename) - 1+3], 1+3 + 1); + msdos_filename = getStringCopy(basename_corrected); + strncpy(&msdos_filename[8], &basename[strlen(basename) - 1+3], 1+3 + 1); } } #endif @@ -437,15 +437,6 @@ static char *getCorrectedImageBasename(char *basename) return basename_corrected; } -static boolean fileExists(char *filename) -{ -#if 0 - printf("checking file '%s'\n", filename); -#endif - - return (access(filename, F_OK) == 0); -} - char *getCustomImageFilename(char *basename) { static char *filename = NULL; @@ -610,6 +601,7 @@ void InitTapeDirectory(char *level_subdir) void InitScoreDirectory(char *level_subdir) { + createDirectory(getCommonDataDir(), "common data", PERMS_PUBLIC); createDirectory(getScoreDir(NULL), "main score", PERMS_PUBLIC); createDirectory(getScoreDir(level_subdir), "level score", PERMS_PUBLIC); } @@ -885,15 +877,33 @@ char *getUserDataDir(void) { static char *userdata_dir = NULL; - if (!userdata_dir) + if (userdata_dir == NULL) + userdata_dir = getPath2(getHomeDir(), program.userdata_directory); + + return userdata_dir; +} + +char *getCommonDataDir(void) +{ + static char *common_data_dir = NULL; + +#if defined(PLATFORM_WIN32) + if (common_data_dir == NULL) { - char *home_dir = getHomeDir(); - char *data_dir = program.userdata_directory; + char *dir = checked_malloc(MAX_PATH + 1); - userdata_dir = getPath2(home_dir, data_dir); + if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, 0, dir)) + && strcmp(dir, "") != 0) /* empty for Windows 95/98 */ + common_data_dir = getPath2(dir, program.userdata_directory); + else + common_data_dir = options.rw_base_directory; } +#else + if (common_data_dir == NULL) + common_data_dir = options.rw_base_directory; +#endif - return userdata_dir; + return common_data_dir; } char *getSetupDir() @@ -1031,7 +1041,7 @@ char *getFormattedSetupEntry(char *token, char *value) void freeSetupFileList(struct SetupFileList *setup_file_list) { - if (!setup_file_list) + if (setup_file_list == NULL) return; if (setup_file_list->token) @@ -1043,15 +1053,12 @@ void freeSetupFileList(struct SetupFileList *setup_file_list) free(setup_file_list); } -static struct SetupFileList *newSetupFileList(char *token, char *value) +struct SetupFileList *newSetupFileList(char *token, char *value) { struct SetupFileList *new = checked_malloc(sizeof(struct SetupFileList)); - new->token = checked_malloc(strlen(token) + 1); - strcpy(new->token, token); - - new->value = checked_malloc(strlen(value) + 1); - strcpy(new->value, value); + new->token = getStringCopy(token); + new->value = getStringCopy(value); new->next = NULL; @@ -1060,7 +1067,7 @@ static struct SetupFileList *newSetupFileList(char *token, char *value) char *getTokenValue(struct SetupFileList *setup_file_list, char *token) { - if (!setup_file_list) + if (setup_file_list == NULL) return NULL; if (strcmp(setup_file_list->token, token) == 0) @@ -1072,14 +1079,15 @@ char *getTokenValue(struct SetupFileList *setup_file_list, char *token) void setTokenValue(struct SetupFileList *setup_file_list, char *token, char *value) { - if (!setup_file_list) + if (setup_file_list == NULL) return; if (strcmp(setup_file_list->token, token) == 0) { - free(setup_file_list->value); - setup_file_list->value = checked_malloc(strlen(value) + 1); - strcpy(setup_file_list->value, value); + if (setup_file_list->value) + free(setup_file_list->value); + + setup_file_list->value = getStringCopy(value); } else if (setup_file_list->next == NULL) setup_file_list->next = newSetupFileList(token, value); @@ -1107,7 +1115,6 @@ struct SetupFileList *loadSetupFileList(char *filename) char *token, *value, *line_ptr; struct SetupFileList *setup_file_list = newSetupFileList("", ""); struct SetupFileList *first_valid_list_entry; - FILE *file; if (!(file = fopen(filename, MODE_READ)))