Commit 9eb2524eb713b382be36a0a1e4e4417ea94f432b

Authored by Perry Werneck
Committed by GitHub
2 parents 46eee001 34645c18
Exists in develop

Merge pull request #44 from PerryWerneck/develop

Better search for datafile, updating ci-build.
configure.ac
... ... @@ -114,6 +114,7 @@ case "$host" in
114 114 INSTALL_PACKAGES="$INSTALL_PACKAGES delayed"
115 115  
116 116 AC_CONFIG_FILES(win/lib3270.mak)
  117 + AC_CONFIG_FILES(win/build.conf)
117 118  
118 119 ;;
119 120  
... ...
locale/pt_BR.po
... ... @@ -5,7 +5,7 @@ msgid ""
5 5 msgstr ""
6 6 "Project-Id-Version: pw3270 5.0\n"
7 7 "Report-Msgid-Bugs-To: \n"
8   -"POT-Creation-Date: 2023-03-13 03:12-0300\n"
  8 +"POT-Creation-Date: 2023-03-28 21:15-0300\n"
9 9 "PO-Revision-Date: 2021-09-01 23:53-0300\n"
10 10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n"
11 11 "Language-Team: Português <perry.werneck@gmail.com>\n"
... ... @@ -2071,7 +2071,7 @@ msgstr &quot;Aguardando resposta do pedido de upload&quot;
2071 2071 msgid "Warning"
2072 2072 msgstr "Alerta"
2073 2073  
2074   -#: src/core/windows/util.c:126 src/core/windows/util.c:169
  2074 +#: src/core/windows/util.c:123 src/core/windows/util.c:166
2075 2075 #, c-format
2076 2076 msgid "Windows error %d"
2077 2077 msgstr "Erro windows foi %d"
... ...
src/core/windows/util.c
... ... @@ -33,6 +33,7 @@
33 33 #include <windows.h>
34 34 #include <lmcons.h>
35 35 #include <internals.h>
  36 +#include <io.h>
36 37  
37 38 #include "winversc.h"
38 39 #include <ws2tcpip.h>
... ... @@ -219,15 +220,23 @@ LIB3270_EXPORT const char * lib3270_win32_local_charset(void) {
219 220 #define SECS_TO_100NS 10000000ULL /* 10^7 */
220 221  
221 222 LIB3270_EXPORT char * lib3270_get_installation_path() {
222   - char lpFilename[4096];
  223 + char lpFilename[MAX_PATH+1];
223 224  
224 225 memset(lpFilename,0,sizeof(lpFilename));
225   - DWORD szPath = GetModuleFileName(hModule,lpFilename,sizeof(lpFilename));
  226 + DWORD szPath = GetModuleFileName(hModule,lpFilename,MAX_PATH);
226 227 lpFilename[szPath] = 0;
227 228  
228   - char * ptr = strrchr(lpFilename,'\\');
229   - if(ptr)
230   - ptr[1] = 0;
  229 + char *ptr = strrchr(lpFilename,'\\');
  230 + if(ptr) {
  231 + ptr[0] = 0;
  232 +
  233 + ptr = strrchr(lpFilename,'\\');
  234 + if(ptr && !(strcasecmp(ptr,"\\bin") && strcasecmp(ptr,"\\lib"))) {
  235 + *ptr = 0;
  236 + }
  237 +
  238 + strncat(lpFilename,"\\",MAX_PATH);
  239 + }
231 240  
232 241 return strdup(lpFilename);
233 242 }
... ... @@ -274,13 +283,8 @@ static char * build_filename(const char *str, va_list args) {
274 283  
275 284 memset(filename,0,szFilename);
276 285  
277   -#ifdef DEBUG
278   - filename[0] = '.';
279   - filename[1] = '\\';
280   -#else
281 286 DWORD szPath = GetModuleFileName(hModule,filename,szFilename);
282 287 filename[szPath] = 0;
283   -#endif // DEBUG
284 288  
285 289 ptr = strrchr(filename,'\\');
286 290 if(ptr) {
... ... @@ -303,14 +307,74 @@ static char * build_filename(const char *str, va_list args) {
303 307 }
304 308  
305 309 char * lib3270_build_data_filename(const char *str, ...) {
306   - va_list args;
307   - va_start (args, str);
308 310  
309   - char *filename = build_filename(str, args);
  311 + char *ptr;
  312 + lib3270_autoptr(char) instpath = lib3270_get_installation_path();
310 313  
311   - va_end (args);
  314 + for(ptr = instpath; *ptr; ptr++) {
  315 + if(*ptr == '/') {
  316 + *ptr = '\\';
  317 + }
  318 + }
312 319  
313   - return filename;
  320 + if( *(instpath+strlen(instpath)-1) = '\\') {
  321 + instpath[strlen(instpath)-1] = 0;
  322 + }
  323 +
  324 + char relative[MAX_PATH+1];
  325 + memset(relative,0,MAX_PATH);
  326 +
  327 + {
  328 + va_list args;
  329 + va_start (args, str);
  330 +
  331 + while(str) {
  332 +
  333 + if(str[0] == '\\' || str[0] == '/') {
  334 + strncat(relative,str,MAX_PATH);
  335 + } else {
  336 + strncat(relative,"\\",MAX_PATH);
  337 + strncat(relative,str,MAX_PATH);
  338 + }
  339 +
  340 + str = va_arg(args, const char *);
  341 + }
  342 +
  343 + va_end (args);
  344 + }
  345 +
  346 + for(ptr = relative; *ptr; ptr++) {
  347 + if(*ptr == '/') {
  348 + *ptr = '\\';
  349 + }
  350 + }
  351 +
  352 + char filename[MAX_PATH+1];
  353 + memset(filename,0,MAX_PATH+1);
  354 +
  355 + // Check instdir
  356 + strncpy(filename,instpath,MAX_PATH);
  357 + strncat(filename,"\\share",MAX_PATH);
  358 + strncat(filename,relative,MAX_PATH);
  359 +
  360 + if(access(filename,0) == 0) {
  361 + return strdup(filename);
  362 + }
  363 +
  364 + strncpy(filename,instpath,MAX_PATH);
  365 + strncat(filename,"\\share\\",MAX_PATH);
  366 + strncat(filename,LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME),MAX_PATH);
  367 + strncat(filename,relative,MAX_PATH);
  368 +
  369 + if(access(filename,0) == 0) {
  370 + return strdup(filename);
  371 + }
  372 +
  373 + // Default behavior.
  374 + strncpy(filename,instpath,MAX_PATH);
  375 + strncat(filename,relative,MAX_PATH);
  376 +
  377 + return strdup(filename);
314 378 }
315 379  
316 380 char * lib3270_build_config_filename(const char *str, ...) {
... ...
win/build.conf.in 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +LIBRARY_VERSION=@WIN32_VERSION@
  2 +TARGET_ARCH=@host_cpu@
... ...
win/ci-build.sh
... ... @@ -27,7 +27,10 @@ echo &quot;Building lib3270&quot;
27 27 make clean > $LOGFILE 2>&1 || die "Make clean failure"
28 28 make all > $LOGFILE 2>&1 || die "Make failure"
29 29 make DESTDIR=.bin/package install
30   -tar --create --xz --file=mingw-lib3270.tar.xz --directory=.bin/package --verbose .
  30 +
  31 +. ./win/build.conf
  32 +
  33 +tar --create --xz --file=mingw-lib3270.${TARGET_ARCH}.tar.xz --directory=.bin/package --verbose .
31 34  
32 35  
33 36  
... ...