X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=921ffdadb079440c1afadfb047efa26727c4b502;hb=297ee9b33dab3bca9433befc81d7c7ce91450dd0;hp=412779d0bc8ca28a90cd62a4cd1388578b73938d;hpb=31b462a53d66e5d4fb8701c2b7d31180af1f5f6d;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 412779d0..921ffdad 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "platform.h" @@ -1184,8 +1185,13 @@ void dumpTreeInfo(TreeInfo *node, int depth) for (i = 0; i < (depth + 1) * 3; i++) printf(" "); + printf("'%s' / '%s'\n", node->identifier, node->name); + + /* + // use for dumping artwork info tree printf("subdir == '%s' ['%s', '%s'] [%d])\n", node->subdir, node->fullpath, node->basepath, node->in_user_dir); + */ if (node->node_group != NULL) dumpTreeInfo(node->node_group, depth + 1); @@ -1452,7 +1458,8 @@ void createDirectory(char *dir, char *text, int permission_class) if (!fileExists(dir)) if (posix_mkdir(dir, dir_mode) != 0) - Error(ERR_WARN, "cannot create %s directory '%s'", text, dir); + Error(ERR_WARN, "cannot create %s directory '%s': %s", + text, dir, strerror(errno)); if (permission_class == PERMS_PUBLIC && !running_setgid) chmod(dir, dir_mode); @@ -1630,6 +1637,7 @@ SetupFileList *addListEntry(SetupFileList *list, char *token, char *value) return addListEntry(list->next, token, value); } +#if 0 #ifdef DEBUG static void printSetupFileList(SetupFileList *list) { @@ -1642,6 +1650,7 @@ static void printSetupFileList(SetupFileList *list) printSetupFileList(list->next); } #endif +#endif #ifdef DEBUG DEFINE_HASHTABLE_INSERT(insert_hash_entry, char, char); @@ -2770,7 +2779,7 @@ static int compareTreeInfoEntries(const void *object1, const void *object2) { const TreeInfo *entry1 = *((TreeInfo **)object1); const TreeInfo *entry2 = *((TreeInfo **)object2); - int class_sorting1, class_sorting2; + int class_sorting1 = 0, class_sorting2 = 0; int compare_result; if (entry1->type == TREE_TYPE_LEVEL_DIR) @@ -2778,7 +2787,9 @@ static int compareTreeInfoEntries(const void *object1, const void *object2) class_sorting1 = LEVELSORTING(entry1); class_sorting2 = LEVELSORTING(entry2); } - else + else if (entry1->type == TREE_TYPE_GRAPHICS_DIR || + entry1->type == TREE_TYPE_SOUNDS_DIR || + entry1->type == TREE_TYPE_MUSIC_DIR) { class_sorting1 = ARTWORKSORTING(entry1); class_sorting2 = ARTWORKSORTING(entry2); @@ -3061,8 +3072,8 @@ static boolean LoadLevelInfoFromLevelConf(TreeInfo **node_first, char *directory_name) { #if 0 - static unsigned long progress_delay = 0; - unsigned long progress_delay_value = 100; /* (in milliseconds) */ + static unsigned int progress_delay = 0; + unsigned int progress_delay_value = 100; /* (in milliseconds) */ #endif char *directory_path = getPath2(level_directory, directory_name); char *filename = getPath2(directory_path, LEVELINFO_FILENAME); @@ -3226,9 +3237,14 @@ static void LoadLevelInfoFromLevelDir(TreeInfo **node_first, struct dirent *dir_entry; boolean valid_entry_found = FALSE; +#if 1 + Error(ERR_INFO, "looking for levels in '%s' ...", level_directory); +#endif + if ((dir = opendir(level_directory)) == NULL) { Error(ERR_WARN, "cannot read level directory '%s'", level_directory); + return; } @@ -3625,8 +3641,8 @@ void LoadArtworkInfoFromLevelInfo(ArtworkDirTree **artwork_node, LevelDirTree *level_node) { #if 0 - static unsigned long progress_delay = 0; - unsigned long progress_delay_value = 100; /* (in milliseconds) */ + static unsigned int progress_delay = 0; + unsigned int progress_delay_value = 100; /* (in milliseconds) */ #endif int type = (*artwork_node)->type; @@ -3942,12 +3958,16 @@ void LoadLevelSetup_LastSeries() free(filename); } -void SaveLevelSetup_LastSeries() +static void SaveLevelSetup_LastSeries_Ext(boolean deactivate_last_level_series) { /* ----------------------------------------------------------------------- */ /* ~/./levelsetup.conf */ /* ----------------------------------------------------------------------- */ + // check if the current level directory structure is available at this point + if (leveldir_current == NULL) + return; + char *filename = getPath2(getSetupDir(), LEVELSETUP_FILENAME); char *level_subdir = leveldir_current->subdir; FILE *file; @@ -3957,12 +3977,18 @@ void SaveLevelSetup_LastSeries() if (!(file = fopen(filename, MODE_WRITE))) { Error(ERR_WARN, "cannot write setup file '%s'", filename); + free(filename); + return; } fprintf(file, "%s\n\n", getFormattedSetupEntry(TOKEN_STR_FILE_IDENTIFIER, getCookie("LEVELSETUP"))); + + if (deactivate_last_level_series) + fprintf(file, "# %s\n# ", "the following level set may have caused a problem and was deactivated"); + fprintf(file, "%s\n", getFormattedSetupEntry(TOKEN_STR_LAST_LEVEL_SERIES, level_subdir)); @@ -3973,11 +3999,23 @@ void SaveLevelSetup_LastSeries() free(filename); } +void SaveLevelSetup_LastSeries() +{ + SaveLevelSetup_LastSeries_Ext(FALSE); +} + +void SaveLevelSetup_LastSeries_Deactivate() +{ + SaveLevelSetup_LastSeries_Ext(TRUE); +} + static void checkSeriesInfo() { static char *level_directory = NULL; DIR *dir; +#if 0 struct dirent *dir_entry; +#endif /* check for more levels besides the 'levels' field of 'levelinfo.conf' */ @@ -3989,9 +4027,11 @@ static void checkSeriesInfo() if ((dir = opendir(level_directory)) == NULL) { Error(ERR_WARN, "cannot read level directory '%s'", level_directory); + return; } +#if 0 while ((dir_entry = readdir(dir)) != NULL) /* last directory entry */ { if (strlen(dir_entry->d_name) > 4 && @@ -4006,7 +4046,6 @@ static void checkSeriesInfo() levelnum_value = atoi(levelnum_str); -#if 0 if (levelnum_value < leveldir_current->first_level) { Error(ERR_WARN, "additional level %d found", levelnum_value); @@ -4017,9 +4056,9 @@ static void checkSeriesInfo() Error(ERR_WARN, "additional level %d found", levelnum_value); leveldir_current->last_level = levelnum_value; } -#endif } } +#endif closedir(dir); }