X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_bd%2Fbd_caveset.c;h=50598fb7a0ec4dbe69a68e0bc69f7bc582a4de78;hb=402106d4fc637bdda3f3b75f190a6b9335fc99d0;hp=e25fa6263a70c2acdfdec691d5afc1bf80839013;hpb=e25acb01746ef65a1c5d4919b0e7c2c5d48b6807;p=rocksndiamonds.git diff --git a/src/game_bd/bd_caveset.c b/src/game_bd/bd_caveset.c index e25fa626..50598fb7 100644 --- a/src/game_bd/bd_caveset.c +++ b/src/game_bd/bd_caveset.c @@ -22,7 +22,7 @@ /* this stores the caves. */ -GList *gd_caveset; +List *gd_caveset; /* the data of the caveset: name, highscore, max number of lives, etc. */ GdCavesetData *gd_caveset_data; @@ -45,7 +45,7 @@ char *gd_caveset_extensions[] = NULL }; -#define CAVESET_OFFSET(property) (G_STRUCT_OFFSET(GdCavesetData, property)) +#define CAVESET_OFFSET(property) (STRUCT_OFFSET(GdCavesetData, property)) const GdStructDescriptor gd_caveset_properties[] = { @@ -115,8 +115,8 @@ void gd_caveset_clear(void) { if (gd_caveset) { - g_list_foreach(gd_caveset, (GFunc) gd_cave_free, NULL); - g_list_free(gd_caveset); + list_foreach(gd_caveset, (list_fn) gd_cave_free, NULL); + list_free(gd_caveset); gd_caveset = NULL; } @@ -135,13 +135,13 @@ void gd_caveset_clear(void) /* return number of caves currently in memory. */ int gd_caveset_count(void) { - return g_list_length(gd_caveset); + return list_length(gd_caveset); } /* return index of first selectable cave */ static int caveset_first_selectable_cave_index(void) { - GList *iter; + List *iter; int i; for (i = 0, iter = gd_caveset; iter != NULL; i++, iter = iter->next) @@ -161,7 +161,7 @@ static int caveset_first_selectable_cave_index(void) /* return a cave identified by its index */ GdCave *gd_return_nth_cave(const int cave) { - return g_list_nth_data(gd_caveset, cave); + return list_nth_data(gd_caveset, cave); } /* get a selected cave from the loaded caveset (original, unmodified cave) */ @@ -318,11 +318,11 @@ static void brc_import(guint8 *data) imported[level * 20 + cavenum] = cave; if (cavenum < 16) - g_snprintf(cave->name, sizeof(GdString), "Cave %c/%d", 'A' + cavenum, - level + 1); + snprintf(cave->name, sizeof(GdString), "Cave %c/%d", 'A' + cavenum, + level + 1); else - g_snprintf(cave->name, sizeof(GdString), "Intermission %d/%d", - cavenum - 15, level + 1); + snprintf(cave->name, sizeof(GdString), "Intermission %d/%d", + cavenum - 15, level + 1); /* fixed intermission caves; are smaller. */ if (cavenum >= 16) @@ -469,20 +469,20 @@ static void brc_import(guint8 *data) /* append to caveset or forget it. */ if (!only_dirt) - gd_caveset = g_list_append(gd_caveset, cave); + gd_caveset = list_append(gd_caveset, cave); else gd_cave_free(cave); } } } -static void caveset_name_set_from_filename(const char *filename) +static void caveset_name_set_from_filename(char *filename) { char *name; char *c; /* make up a caveset name from the filename. */ - name = g_path_get_basename(filename); + name = getBaseName(filename); gd_strcpy(gd_caveset_data->name, name); free(name); @@ -504,14 +504,13 @@ static void caveset_name_set_from_filename(const char *filename) */ boolean gd_caveset_load_from_file(char *filename) { - GError *error = NULL; gsize length; char *buf; - boolean read; - GList *new_caveset; + List *new_caveset; struct stat st; + File *file; - if (g_stat(filename, &st) != 0) + if (stat(filename, &st) != 0) { Warn("cannot stat() file"); @@ -525,12 +524,22 @@ boolean gd_caveset_load_from_file(char *filename) return FALSE; } - read = g_file_get_contents (filename, &buf, &length, &error); - if (!read) + if (!(file = openFile(filename, MODE_READ))) { - Warn("%s", error->message); + Warn("cannot open file '%s'", filename); - g_error_free(error); + return FALSE; + } + + buf = checked_malloc(st.st_size + 1); + length = readFile(file, buf, 1, st.st_size); + buf[length] = '\0'; + + closeFile(file); + + if (length < st.st_size) + { + Warn("cannot read file '%s'", filename); return FALSE; } @@ -606,7 +615,7 @@ boolean gd_caveset_load_from_file(char *filename) int gd_cave_check_replays(GdCave *cave, boolean report, boolean remove, boolean repair) { - GList *riter; + List *riter; int wrong = 0; riter = cave->replays; @@ -615,7 +624,7 @@ int gd_cave_check_replays(GdCave *cave, boolean report, boolean remove, boolean GdReplay *replay = (GdReplay *)riter->data; guint32 checksum; GdCave *rendered; - GList *next = riter->next; + List *next = riter->next; rendered = gd_cave_new_rendered(cave, replay->level, replay->seed); checksum = gd_cave_adler_checksum(rendered); @@ -646,7 +655,7 @@ int gd_cave_check_replays(GdCave *cave, boolean report, boolean remove, boolean if (remove) { /* may remove */ - cave->replays = g_list_remove_link(cave->replays, riter); + cave->replays = list_remove_link(cave->replays, riter); gd_replay_free(replay); } } @@ -661,7 +670,7 @@ int gd_cave_check_replays(GdCave *cave, boolean report, boolean remove, boolean boolean gd_caveset_has_replays(void) { - GList *citer; + List *citer; /* for all caves */ for (citer = gd_caveset; citer != NULL; citer = citer->next)