project_files/frontlib/model/mapcfg.c
author Wuzzy <Wuzzy2@mail.ru>
Tue, 07 Jan 2020 13:21:04 +0100
changeset 15537 bbb98e22a303
parent 10017 de822cd3df3a
permissions -rw-r--r--
Fix impossible to become mutant after mutant gear got deleted (bug #804)
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
}