Commit f2968ae9883dbc866c7ee463457d3b4978115646
1 parent
1ae93975
Exists in
master
and in
2 other branches
Restoring detection of MAC datadir.
Showing
1 changed file
with
39 additions
and
26 deletions
Show diff stats
src/core/macos/util.c
1 | +/* SPDX-License-Identifier: LGPL-3.0-or-later */ | |
2 | + | |
1 | 3 | /* |
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob | |
5 | - * o nome G3270. | |
6 | - * | |
7 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | |
8 | - * | |
9 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
10 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
11 | - * Free Software Foundation. | |
12 | - * | |
13 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
14 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
15 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
16 | - * obter mais detalhes. | |
17 | - * | |
18 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
19 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
20 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | |
21 | - * | |
22 | - * Este programa está nomeado como - e possui - linhas de código. | |
4 | + * Copyright (C) 2008 Banco do Brasil S.A. | |
23 | 5 | * |
24 | - * Contatos: | |
6 | + * This program is free software: you can redistribute it and/or modify | |
7 | + * it under the terms of the GNU Lesser General Public License as published | |
8 | + * by the Free Software Foundation, either version 3 of the License, or | |
9 | + * (at your option) any later version. | |
25 | 10 | * |
26 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
27 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
11 | + * This program is distributed in the hope that it will be useful, | |
12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | + * GNU General Public License for more details. | |
28 | 15 | * |
16 | + * You should have received a copy of the GNU Lesser General Public License | |
17 | + * along with this program. If not, see <https://www.gnu.org/licenses/>. | |
29 | 18 | */ |
30 | 19 | |
31 | 20 | /** |
32 | - * @brief Linux Utility functions. | |
21 | + * @brief Mac Utility functions. | |
33 | 22 | */ |
34 | 23 | |
35 | 24 | |
36 | 25 | #include <config.h> |
37 | 26 | #include <stdarg.h> |
38 | 27 | #include <internals.h> |
28 | +#include <unistd.h> | |
29 | +#include <CoreFoundation/CFBundle.h> | |
30 | +#include <CoreFoundation/CFURL.h> | |
31 | +#include <sys/syslimits.h> | |
39 | 32 | #include <lib3270/os.h> |
40 | 33 | |
41 | 34 | static char * concat(char *path, const char *name, size_t *length) { |
... | ... | @@ -71,14 +64,34 @@ static char * build_filename(const char *root, const char *str, va_list args) { |
71 | 64 | } |
72 | 65 | |
73 | 66 | char * lib3270_build_data_filename(const char *str, ...) { |
67 | + | |
74 | 68 | va_list args; |
75 | 69 | va_start (args, str); |
76 | 70 | |
77 | - char *filename = build_filename(LIB3270_STRINGIZE_VALUE_OF(DATADIR), str, args); | |
71 | + char *filename; | |
72 | + CFBundleRef mainBundle = CFBundleGetMainBundle(); | |
73 | + if (mainBundle) { | |
74 | + CFURLRef url = CFBundleCopyBundleURL(mainBundle); | |
75 | + if (url) { | |
76 | + size_t szPath = PATH_MAX; | |
77 | + char *path = (char *) lib3270_malloc(szPath); | |
78 | + CFURLGetFileSystemRepresentation(url, true, path, szPath); | |
79 | + CFRelease(url); | |
80 | + path = concat(path, "Contents/Resources", &szPath); | |
81 | + filename = build_filename(path, str, args); | |
82 | + lib3270_free(path); | |
83 | + } else { | |
84 | + filename = build_filename(LIB3270_STRINGIZE_VALUE_OF(DATADIR), str, args); | |
85 | + } | |
86 | + } else { | |
87 | + filename = build_filename(LIB3270_STRINGIZE_VALUE_OF(DATADIR), str, args); | |
88 | + } | |
78 | 89 | |
79 | 90 | va_end (args); |
80 | 91 | |
81 | 92 | return filename; |
93 | + | |
94 | + return filename; | |
82 | 95 | } |
83 | 96 | |
84 | 97 | char * lib3270_build_config_filename(const char *str, ...) { | ... | ... |