project_files/frontlib/model/mapcfg.c
author Wuzzy <Wuzzy2@mail.ru>
Fri, 27 Oct 2017 05:03:58 +0200
changeset 12782 389453e1e09e
parent 10017 de822cd3df3a
permissions -rw-r--r--
ACF7: Fix possible Lua error spam in intro sequence This was caused by a race of onGearDelete vs AnimationSetup. If AnimationSetup came first, it uses old values from the natives table. The solution is to force the code to guarantee that AnimationSetup always coms after deleting gears in the natives table.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     1
/*
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     2
 * Hedgewars, a free turn based strategy game
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     3
 * Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     4
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     5
 * This program is free software; you can redistribute it and/or
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     6
 * modify it under the terms of the GNU General Public License
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     7
 * as published by the Free Software Foundation; either version 2
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     8
 * of the License, or (at your option) any later version.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
     9
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    13
 * GNU General Public License for more details.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    14
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    15
 * You should have received a copy of the GNU General Public License
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    16
 * along with this program; if not, write to the Free Software
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    18
 */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    19
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    20
#include "mapcfg.h"
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    21
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    22
#include "../util/util.h"
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    23
#include "../util/logging.h"
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    24
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    25
#include <stdlib.h>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    26
#include <stdio.h>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    27
#include <string.h>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    28
#include <errno.h>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    29
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    30
void removeNewline(char *str) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    31
    for(;*str;str++) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    32
        if(*str=='\n' || *str=='\r') {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    33
            *str = 0;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    34
            return;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    35
        }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    36
    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    37
}
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    38
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    39
int flib_mapcfg_read(const char *dataDirPath, const char *mapname, flib_mapcfg *out) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    40
    int result = -1;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    41
    if(!log_badargs_if4(dataDirPath==NULL, mapname==NULL, out==NULL, flib_contains_dir_separator(mapname))) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    42
        char *path = flib_asprintf("%sMaps/%s/map.cfg", dataDirPath, mapname);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    43
        if(path) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    44
            FILE *file = fopen(path, "rb");
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    45
            if(!log_e_if(!file, "Unable to open map config file %s", path)) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    46
                if(!log_e_if(!fgets(out->theme, sizeof(out->theme), file), "Error reading theme from %s", path)) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    47
                    removeNewline(out->theme);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    48
                    char buf[64];
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    49
                    if(fgets(buf, sizeof(buf), file)) {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    50
                        removeNewline(buf);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    51
                        errno = 0;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    52
                        out->hogLimit = strtol(buf, NULL, 10);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    53
                        result = !log_e_if(errno, "Invalid hoglimit in %s: %i", path, buf);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    54
                    } else {
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    55
                        result = 0;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    56
                    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    57
                }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    58
                fclose(file);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    59
            }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    60
        }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    61
        free(path);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    62
    }
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    63
    return result;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 7497
diff changeset
    64
}