src/filesystem.c

Mon, 21 Apr 2025 17:52:01 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 21 Apr 2025 17:52:01 +0200
changeset 90
aa8e7a38905c
parent 86
943bf9d7c6d6
permissions
-rw-r--r--

fix probably incorrect array access of struct members

86
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 * Copyright 2025 Mike Becker. All rights reserved.
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 *
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * modification, are permitted provided that the following conditions are met:
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 *
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 *
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * 2. Redistributions in binary form must reproduce the above copyright
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer in the
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * documentation and/or other materials provided with the distribution.
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 *
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * POSSIBILITY OF SUCH DAMAGE.
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 */
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 #include "ascension/filesystem.h"
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 bool asc_filesystem_is_absolute(cxstring path) {
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 #ifdef _WIN32
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 #error "Windows currently not supported."
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 #else
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 return path.length > 0 && path.ptr[0] == '/';
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 #endif
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 }
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 cxmutstr asc_filesystem_combine_paths(cxstring base, cxstring path) {
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 if (asc_filesystem_is_absolute(path)) {
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 return cx_strdup(path);
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 }
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 if (base.length == 0) {
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 return cx_strdup(path);
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 }
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 if (base.ptr[base.length - 1] == '/') base.length--;
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 if (cx_strprefix(path, CX_STR("./"))) {
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50 path = cx_strsubs(path, 2);
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 }
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 return cx_strcat(3, base, CX_STR("/"), path);
943bf9d7c6d6 make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 }

mercurial