X-Git-Url: https://git.draconx.ca/gitweb/upkg.git/blobdiff_plain/aa3d8014ba02b49656689d1b4951ea79de76a414..HEAD:/src/uobject/package.c diff --git a/src/uobject/package.c b/src/uobject/package.c index 2da23b3..30a42cc 100644 --- a/src/uobject/package.c +++ b/src/uobject/package.c @@ -1,21 +1,22 @@ /* - * upkg: tool for manipulating Unreal Tournament packages. - * Copyright (C) 2009 Nick Bowler + * upkg: tool for manipulating Unreal Tournament packages. + * Copyright © 2009-2011, 2022 Nick Bowler * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ +#include #include #include #include @@ -37,13 +38,6 @@ struct upkg_priv { G_DEFINE_TYPE(UPkg, u_pkg, G_TYPE_TYPE_MODULE); -/* Package search path. */ -static char *search_path; -static size_t search_path_sz; - -/* List of package file extensions, in descending order of precedence. */ -static const char u_pkg_exts[][5] = { ".u", ".utx", ".umx", ".uax", ".unr" }; - static char *str_cpy_lower(char *dst, const char *src) { size_t i; @@ -55,25 +49,6 @@ static char *str_cpy_lower(char *dst, const char *src) return dst; } -static int str_cmp_lower(const char *s1, const char *s2) -{ - size_t i; - - for (i = 0; s1[i] && s2[i]; i++) { - int c1 = tolower(s1[i]), c2 = tolower(s2[i]); - if (c1 < c2) - return -1; - if (c1 > c2) - return 1; - } - - if (s1[i]) - return 1; - if (s2[i]) - return -1; - return 0; -} - static void dl_print_errors(const char *prefix) { const char *err; @@ -165,55 +140,6 @@ static void u_pkg_class_init(UPkgClass *class) objclass->finalize = u_pkg_finalize; } -static int expand_search_path(size_t need) -{ - size_t want = search_path_sz; - if (want == 0) want = 1; - - while (want < need) - want *= 2; - - if (want > search_path_sz) { - char *new = realloc(search_path, want); - if (!new) { - return -1; - } - - search_path = new; - search_path_sz = want; - } - - return 0; -} - -const char *u_pkg_get_search_path(void) -{ - return search_path ? search_path : ""; -} - -int u_pkg_set_search_path(const char *path) -{ - if (expand_search_path(strlen(path)+1) != 0) - return -1; - strcpy(search_path, path); - return 0; -} - -int u_pkg_add_search_dir(const char *path) -{ - size_t end = search_path ? strlen(search_path) : 0; - - if (end == 0) { - return u_pkg_set_search_path(path); - } - - if (expand_search_path(end + strlen(path) + 2) != 0) - return -1; - search_path[end] = LT_PATHSEP_CHAR; - strcpy(search_path+end+1, path); - return 0; -} - GTypeModule *u_pkg_open(const char *name) { g_return_val_if_fail(name != NULL, NULL); @@ -232,3 +158,10 @@ GTypeModule *u_pkg_open(const char *name) mod->name = str_cpy_lower(pkgname, name); return mod; } + +int u_pkg_is_native(GTypeModule *m) +{ + struct upkg_priv *priv = U_PKG_GET_PRIV(m); + + return !!priv->native; +}