diff options
author | elfmz <fenix1905@tut.by> | 2020-08-23 00:35:40 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-23 00:35:40 +0300 |
commit | 0486f5aef1aa8a95f308eae28b8b6a041c8774d2 (patch) | |
tree | 00fa098d06ea7adb7a80823ed43ecfd73b0fc471 | |
parent | 6fcd193909b535a5a6fe5cd52dfd49338fece9e2 (diff) | |
parent | 2c6fb92414e0880a571055cd3feed812e6a52532 (diff) |
Merge pull request #730 from elfmz/wx31alpha-17sep20
FreeBSD - support wxwidgets 3.1
-rw-r--r-- | CMakeLists.txt | 40 | ||||
-rw-r--r-- | WinPort/CMakeLists.txt | 8 | ||||
-rw-r--r-- | WinPort/src/APIFSNotify.cpp | 1 | ||||
-rw-r--r-- | cmake/modules/FindLibsmbclient.cmake | 9 | ||||
-rw-r--r-- | far2l/CMakeLists.txt | 4 | ||||
-rw-r--r-- | far2l/bootstrap/CMakeLists.txt | 15 | ||||
-rwxr-xr-x | far2l/bootstrap/roots.sh | 4 | ||||
-rw-r--r-- | farlng/CMakeLists.txt | 11 | ||||
-rw-r--r-- | farlng/src/lng.common.cpp | 21 | ||||
-rw-r--r-- | farlng/src/lng.common.h | 19 | ||||
-rw-r--r-- | farlng/src/lng.convertor.cpp | 101 | ||||
-rw-r--r-- | farlng/src/lng.generator.cpp | 315 |
12 files changed, 218 insertions, 330 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 20f6917c..0444b106 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,34 +37,40 @@ if (NOT DEFINED FARFTP) set(FARFTP "NO") endif() -if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config") - set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.0") -endif() - if (NOT ${USEWX}) set(USEWX_INCS "") set(USEWX_LIBS "") set(USEWX_CXX_FLAGS "") + set(USEWX_USEFILE "") else() + if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") + if (DEFINED wxWidgets_CONFIG_EXECUTABLE) + message(STATUS "Using pre-defined wx config: ${wxWidgets_CONFIG_EXECUTABLE}") + + elseif(EXISTS "/usr/local/bin/wxgtk3u-3.1-config") + set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.1-config") + set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.1") + message(STATUS "Using known location of wx-config 3.1") + + elseif (EXISTS "/usr/local/bin/wxgtk3u-3.0-config") + set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config") + set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.0") + message(STATUS "Using known location of wx-config 3.0") + + else() + message(STATUS "No wxgtk3u-3.*-config in expected locations") + endif() +endif() + find_package(wxWidgets REQUIRED net core base) include(${wxWidgets_USE_FILE}) + set(USEWX_USEFILE ${wxWidgets_USE_FILE}) set(USEWX_INCS ${wxWidgets_INCLUDE_DIRS}) set(USEWX_LIBS ${wxWidgets_LIBRARIES}) set(USEWX_CXX_FLAGS ${wxWidgets_CXX_FLAGS}) endif() -find_program (HAVE_GAWK NAMES gawk) -if(NOT HAVE_GAWK) - message(FATAL_ERROR "${Esc}[1;31mgawk not found - please install it${Esc}[39;22m") -endif () -find_program (HAVE_M4 NAMES m4) -if(NOT HAVE_M4) - message(FATAL_ERROR "${Esc}[1;31mm4 not found - please install it${Esc}[39;22m") -endif () - - if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # workaround for brew vs system openssl conflicts if(IS_DIRECTORY "/usr/local/opt/openssl@1.1/include" AND IS_DIRECTORY "/usr/local/opt/openssl@1.1/lib") @@ -219,8 +225,8 @@ install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "share/far2l" USE_SOURCE_PERMISS # setup some symlinks and remove deprecated stuff from previous installation install(CODE " - execute_process(COMMAND ln -s ${CMAKE_INSTALL_PREFIX}/bin/far2l ${CMAKE_INSTALL_PREFIX}/lib/far2l/far2l_askpass) - execute_process(COMMAND ln -s ${CMAKE_INSTALL_PREFIX}/bin/far2l ${CMAKE_INSTALL_PREFIX}/lib/far2l/far2l_sudoapp) + execute_process(COMMAND ln -s ../../bin/far2l ${CMAKE_INSTALL_PREFIX}/lib/far2l/far2l_askpass) + execute_process(COMMAND ln -s ../../bin/far2l ${CMAKE_INSTALL_PREFIX}/lib/far2l/far2l_sudoapp) execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/objinfo/plug/objinfo.far-plug-mb) " ) diff --git a/WinPort/CMakeLists.txt b/WinPort/CMakeLists.txt index d5f58e02..c0099b03 100644 --- a/WinPort/CMakeLists.txt +++ b/WinPort/CMakeLists.txt @@ -1,15 +1,7 @@ project(WinPort) -find_package(PkgConfig REQUIRED) - -if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config") - set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.0") -endif() - if (${USEWX}) - find_package(wxWidgets REQUIRED net core base) include(${wxWidgets_USE_FILE}) endif() diff --git a/WinPort/src/APIFSNotify.cpp b/WinPort/src/APIFSNotify.cpp index 12a7bdc2..53e14734 100644 --- a/WinPort/src/APIFSNotify.cpp +++ b/WinPort/src/APIFSNotify.cpp @@ -6,6 +6,7 @@ #include <thread> #include <condition_variable> #if defined(__APPLE__) || defined(__FreeBSD__) +# include <sys/types.h> # include <sys/event.h> # include <sys/time.h> #elif !defined(__CYGWIN__) diff --git a/cmake/modules/FindLibsmbclient.cmake b/cmake/modules/FindLibsmbclient.cmake index dc1109a5..c447a271 100644 --- a/cmake/modules/FindLibsmbclient.cmake +++ b/cmake/modules/FindLibsmbclient.cmake @@ -28,16 +28,15 @@ else (LIBSMBCLIENT_LIBRARIES AND LIBSMBCLIENT_INCLUDE_DIRS) /sw/include PATH_SUFFIXES samba-4.0 + samba4 ) find_library(SMBCLIENT_LIBRARY NAMES smbclient - PATHS - /usr/lib - /usr/local/lib - /opt/local/lib - /sw/lib + PATH_SUFFIXES + samba-4.0 + samba4 ) if (SMBCLIENT_LIBRARY) diff --git a/far2l/CMakeLists.txt b/far2l/CMakeLists.txt index 446c448e..16df0f5b 100644 --- a/far2l/CMakeLists.txt +++ b/far2l/CMakeLists.txt @@ -166,10 +166,6 @@ target_include_directories(far2l PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) add_dependencies(far2l bootstrap) -if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config") -endif() - if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") find_package(wxWidgets REQUIRED net core base) SET (WINPORT "-force_load \"${CMAKE_BINARY_DIR}/WinPort/libWinPort.a\" -framework IOKit -framework Carbon -framework Cocoa -framework AudioToolbox -framework System -framework OpenGL" wineguts utils ${wxWidgets_LIBRARIES} ${wxWidgets_CXX_FLAGS}) diff --git a/far2l/bootstrap/CMakeLists.txt b/far2l/bootstrap/CMakeLists.txt index 06635394..29b80271 100644 --- a/far2l/bootstrap/CMakeLists.txt +++ b/far2l/bootstrap/CMakeLists.txt @@ -18,12 +18,21 @@ set(DIRBIT 64) # set(RM rm) actually not needed: use $(CMAKE_COMMAND) -E remove -set(GAWK gawk) +find_program (GAWK NAMES gawk) +if(NOT GAWK) + message(FATAL_ERROR "${Esc}[1;31mgawk not found - please install it${Esc}[39;22m") +endif () + if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - set(M4 gm4 -P "-DARCH=${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}") + find_program (M4_PROG NAMES gm4) else() - set(M4 m4 -P "-DARCH=${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}") + find_program (M4_PROG NAMES m4) endif() +if(NOT M4_PROG) + message(FATAL_ERROR "${Esc}[1;31mgawk not found - please install it${Esc}[39;22m") +endif () + +set(M4 ${M4_PROG} -P "-DARCH=${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}") set(BOOTSTRAP "${PROJECT_BINARY_DIR}/bootstrap") set(SCRIPTS "${CMAKE_CURRENT_SOURCE_DIR}/scripts") diff --git a/far2l/bootstrap/roots.sh b/far2l/bootstrap/roots.sh index 79170e5f..d6f9de89 100755 --- a/far2l/bootstrap/roots.sh +++ b/far2l/bootstrap/roots.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash ########################################################## #This script used during FAR's Alt+F1/Alt+F2 menu building @@ -36,7 +36,7 @@ tab=$'\t' #FIXME: pathes that contain repeated continuos spaces sysname=`uname` -if [ "$sysname" == "Linux" ]; then +if [ "$sysname" == "Linux" ] || [ "$sysname" == "FreeBSD" ]; then dfout=`df -T | awk "-F " '{n=NF; while (n>5 && ! ($n ~ "/")) n--; for (;n<NF;n++) printf "%s ", $n; print $n "\t" $2 }'` else dfout=`df -t | awk "-F " '{n=NF; while (n>5 && ! ($n ~ "/")) n--; for (;n<NF;n++) printf "%s ", $n; print $n "\t" $1 }'` diff --git a/farlng/CMakeLists.txt b/farlng/CMakeLists.txt index 3f2ce40d..6cbc8c3c 100644 --- a/farlng/CMakeLists.txt +++ b/farlng/CMakeLists.txt @@ -12,15 +12,6 @@ set(SOURCES set(CMAKE_CXX_VISIBILITY_PRESET default) set(CMAKE_C_VISIBILITY_PRESET default) -find_package(PkgConfig REQUIRED) - add_executable (farlng ${SOURCES}) -target_include_directories(farlng PRIVATE ../WinPort) - -if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config") - target_link_libraries (farlng WinPort utils ${wxWidgets_LIBRARIES} c) -else() - target_link_libraries (farlng WinPort utils ${wxWidgets_LIBRARIES} dl) -endif() +target_link_libraries(farlng utils) diff --git a/farlng/src/lng.common.cpp b/farlng/src/lng.common.cpp index 3ac0ec75..7ce74e57 100644 --- a/farlng/src/lng.common.cpp +++ b/farlng/src/lng.common.cpp @@ -1,5 +1,6 @@ #include "lng.common.h" #include <stdarg.h> +#include <sys/stat.h> void TrimEnd (char *lpStr) { @@ -60,3 +61,23 @@ void strmove(char *dst, const char *src) { memmove(dst, src, strlen(src) + 1); } + +int OpenInputFile(const char *path) +{ + return open(path, O_RDONLY, 0644); +} + +int CreateOutputFile(const char *path) +{ + return open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); +} + +size_t QueryFileSize(int fd) +{ + struct stat s{}; + if (fstat(fd, &s) == -1) + return 0; + + return (size_t)s.st_size; +} + diff --git a/farlng/src/lng.common.h b/farlng/src/lng.common.h index 35016b33..e4ef53ac 100644 --- a/farlng/src/lng.common.h +++ b/farlng/src/lng.common.h @@ -1,21 +1,26 @@ #pragma once -#include <windows.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> + #include <utils.h> +#include <ScopeHelpers.h> -extern unsigned long CRC32 ( +unsigned long CRC32 ( unsigned long crc, const char *buf, unsigned int len ); -extern "C" int __cdecl sprintf (char *pBuffer, const char * format, ...); -extern "C" int __cdecl printf (const char * format, ...); - #define _tchartodigit(c) ((c) >= '0' && (c) <= '9' ? (c) - '0' : -1) -long __cdecl atol (const char *nptr); - void TrimEnd (char *lpStr); void TrimStart (char *lpStr); void Trim (char *lpStr); void strmove(char *dst, const char *src); + +int OpenInputFile(const char *path); +int CreateOutputFile(const char *path); +size_t QueryFileSize(int fd); diff --git a/farlng/src/lng.convertor.cpp b/farlng/src/lng.convertor.cpp index 64322a4f..2c7b226a 100644 --- a/farlng/src/lng.convertor.cpp +++ b/farlng/src/lng.convertor.cpp @@ -192,57 +192,31 @@ int main_convertor (int argc, char** argv) return 0; } - HANDLE hFeedFile = WINPORT(CreateFile) ( - MB2Wide(argv[1]).c_str(), - GENERIC_WRITE, - FILE_SHARE_READ, - NULL, - CREATE_ALWAYS, - 0, - NULL - ); - - if ( hFeedFile == INVALID_HANDLE_VALUE ) + FDScope hFeedFile(CreateOutputFile(argv[1])); + if (!hFeedFile.Valid()) { - printf ("ERROR: Can't create the feed file, exiting.\n\r"); + printf ("ERROR: Can't create the feed file, exiting.\n"); return 0; } - - HANDLE hHFile = WINPORT(CreateFile) ( - MB2Wide(argv[2]).c_str(), - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - 0, - NULL - ); - - if ( hHFile == INVALID_HANDLE_VALUE ) + FDScope hHFile(OpenInputFile(argv[2])); + if ( !hHFile.Valid() ) { - printf ("ERROR: Can't open the header file, exiting.\n\r"); - return 0; + printf ("ERROR: Can't open the header file, exiting.\n"); + return 0; } int dwLangs = atol(argv[3]); - if ( dwLangs<=0 ) { - printf ("ERROR: Zero language files to process, exiting.\n\r"); + printf ("ERROR: Zero language files to process, exiting.\n"); return 0; } - DWORD dwRead; - DWORD dwSize = WINPORT(GetFileSize) (hHFile, NULL); - - char *pHBuffer = (char*)malloc (dwSize+1); + size_t dwSize = QueryFileSize(hHFile); + char *pHBuffer = (char*)calloc(1, dwSize+1); - memset (pHBuffer, 0, dwSize+1); - - WINPORT(ReadFile) (hHFile, pHBuffer, dwSize, &dwRead, NULL); - - WINPORT(CloseHandle) (hHFile); + ReadAll(hHFile, pHBuffer, dwSize); char *lpStart = pHBuffer; @@ -250,43 +224,30 @@ int main_convertor (int argc, char** argv) memset (pLangEntries, 0, dwLangs*sizeof (LanguageEntry)); - HANDLE hFile; - for (int i = 0; i < dwLangs; i++) { - hFile = WINPORT(CreateFile) ( - MB2Wide(argv[4+i]).c_str(), - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - 0, - NULL - ); - - if ( hFile != INVALID_HANDLE_VALUE ) + FDScope hFile(OpenInputFile(argv[4+i])); + if (hFile.Valid()) { - dwSize = WINPORT(GetFileSize) (hFile, NULL); + dwSize = QueryFileSize(hFile); - pLangEntries[i].lpBuffer = (char*)malloc (dwSize+1); + pLangEntries[i].lpBuffer = (char*)calloc(1, dwSize+1); pLangEntries[i].lpStart = pLangEntries[i].lpBuffer; memset (pLangEntries[i].lpBuffer, 0, dwSize+1); - WINPORT(ReadFile) (hFile, pLangEntries[i].lpBuffer, dwSize, &dwRead, NULL); - - WINPORT(CloseHandle) (hFile); + ReadAll(hFile, pLangEntries[i].lpBuffer, dwSize); } else printf ("WARNING: Can't open the language file \"%s\", skiping\n\r", argv[4+i]); } - char *lpTmp = (char*)malloc (2048); + char *lpTmp = (char*)malloc(0x10000); char *lpString; sprintf (lpTmp, "#hpp file name\r\n%s\r\n#number of languages\r\n%s\r\n", argv[2], argv[3]); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); for (int i = 0; i < dwLangs; i++) { @@ -296,12 +257,12 @@ int main_convertor (int argc, char** argv) sprintf (lpTmp, "#id:%d language file name, language name, language description\r\n%s", i, argv[4+i]); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); ReadLanguage (pLangEntries[i].lpStart, &lpLngName, &lpLngDesc); sprintf (lpTmp," %s %s\r\n", lpLngName, lpLngDesc); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); free (lpLngName); free (lpLngDesc); @@ -310,7 +271,7 @@ int main_convertor (int argc, char** argv) sprintf(lpTmp,"\r\n#head of the hpp file\r\n"); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); while ( ReadFromBufferEx (lpStart, &lpString) ) { @@ -346,13 +307,13 @@ int main_convertor (int argc, char** argv) sprintf (lpTmp, "\r\n#tail of the hpp file\r\n"); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); while ( ReadFromBufferEx (lpStart, &lpString) ) { sprintf (lpTmp, "htail:%s\r\n", lpString); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); free(lpString); } @@ -364,7 +325,7 @@ int main_convertor (int argc, char** argv) else { sprintf(lpTmp, "hhead:%s\r\n", lpString); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); } free(lpString); @@ -374,7 +335,7 @@ int main_convertor (int argc, char** argv) while ( true ) { - WINPORT(WriteFile) (hFeedFile, "\r\n", 2, &dwRead, NULL); + WriteAll(hFeedFile, "\r\n", 2); lpOldStart = lpStart; @@ -393,7 +354,7 @@ int main_convertor (int argc, char** argv) else { sprintf (lpTmp, "h:%s\r\n", lpString); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); } free(lpString); @@ -420,7 +381,7 @@ int main_convertor (int argc, char** argv) sprintf (lpTmp, "%s\r\n", lpString); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); free(lpString); @@ -464,7 +425,7 @@ int main_convertor (int argc, char** argv) if ( *pLangEntries[0].lpString ) { sprintf (lpTmp, "l:%s\r\n", pLangEntries[0].lpString); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); } for (int i = 0; i < dwLangs; i++) @@ -482,7 +443,7 @@ int main_convertor (int argc, char** argv) { sprintf(lpTmp,"ls:%s\r\n",pLangEntries[i].lpString); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); free(pLangEntries[i].lpString); } @@ -493,7 +454,7 @@ int main_convertor (int argc, char** argv) strcat(lpTmp,"\r\n"); - WINPORT(WriteFile) (hFeedFile, lpTmp, strlen (lpTmp), &dwRead, NULL); + WriteAll(hFeedFile, lpTmp, strlen (lpTmp)); free(pLangEntries[i].lpString); } @@ -503,8 +464,6 @@ int main_convertor (int argc, char** argv) break; } - WINPORT(CloseHandle)(hFeedFile); - free(pHBuffer); for (int i = 0; i < dwLangs; i++) diff --git a/farlng/src/lng.generator.cpp b/farlng/src/lng.generator.cpp index d02f13f4..dc5ebc5d 100644 --- a/farlng/src/lng.generator.cpp +++ b/farlng/src/lng.generator.cpp @@ -55,10 +55,10 @@ struct LanguageEntry { char *lpLanguageName; char *lpLanguageDescription; - HANDLE hLNGFile; + int hLNGFile; - DWORD dwCRC32; - DWORD dwOldCRC32; + uint32_t dwCRC32; + uint32_t dwOldCRC32; int cNeedUpdate; @@ -189,57 +189,20 @@ bool ReadComments ( } void SmartWrite ( - HANDLE hFile, + int hFile, const char *lpStr, - DWORD *pCRC32, - int nOutCP + uint32_t *pCRC32 ) { - DWORD dwWritten; - - if ( nOutCP == CP_UTF8 ) - { - WINPORT(WriteFile) (hFile, lpStr, strlen(lpStr), &dwWritten, NULL); - *pCRC32 = CRC32(*pCRC32, lpStr, dwWritten); - } - else - { - DWORD dwSize = WINPORT(MultiByteToWideChar)(CP_UTF8, 0, lpStr, -1, NULL, 0); - - wchar_t* pBuffer = new wchar_t[dwSize+1]; - - WINPORT(MultiByteToWideChar)(CP_UTF8, 0, lpStr, -1, pBuffer, dwSize); - - if ( nOutCP == 1200/*CP_UNICODE*/ ) - { - WINPORT(WriteFile) (hFile, pBuffer, (dwSize-1)*sizeof(wchar_t), &dwWritten, NULL); - *pCRC32 = CRC32(*pCRC32, (const char*)pBuffer, dwWritten); - } - else - { - DWORD dwSizeAnsi = WINPORT(WideCharToMultiByte)(nOutCP, 0, pBuffer, -1, NULL, 0, NULL, NULL); - - char* pAnsiBuffer = new char[dwSizeAnsi+1]; - - WINPORT(WideCharToMultiByte)(nOutCP, 0, pBuffer, -1, pAnsiBuffer, dwSize, NULL, NULL); - - WINPORT(WriteFile) (hFile, pAnsiBuffer, dwSizeAnsi-1, &dwWritten, NULL); - *pCRC32 = CRC32(*pCRC32, pAnsiBuffer, dwWritten); - - delete [] pAnsiBuffer; - } - - delete [] pBuffer; - } + size_t dwWritten = WriteAll(hFile, lpStr, strlen(lpStr)); + *pCRC32 = CRC32(*pCRC32, lpStr, dwWritten); } -char *GetTempName () +static char *GetTempName(const char *base_name) { - std::vector<WCHAR> tmp(MAX_PATH); - WINPORT(GetTempFileName) (L".", L"lngg", 0, &tmp[0]); - return strdup(Wide2MB(&tmp[0]).c_str()); - //char *lpTempName = (char*)malloc (MAX_PATH); - //return lpTempName; + char *out = (char *)malloc(strlen(base_name) + 8); + sprintf(out, "%s.tmp", base_name); + return out; } @@ -255,23 +218,10 @@ int ReadInteger(char*& lpStart) return nResult; } -void WriteSignatureIfNeeded(HANDLE hFile, int nEncoding) +void WriteSignatureIfNeeded(int hFile) { - DWORD dwID; - DWORD dwWritten; - - if ( nEncoding == CP_UTF8 ) - { - dwID = 0xBFBBEF; - WINPORT(WriteFile)(hFile, &dwID, 3, &dwWritten, NULL); - } - else - - if ( nEncoding == 1200/*CP_UNICODE*/ ) - { - dwID = 0xFEFF; - WINPORT(WriteFile)(hFile, &dwID, 2, &dwWritten, NULL); - } + uint32_t dwID = 0xBFBBEF; + WriteAll(hFile, &dwID, 3); } bool CheckExists(const char *path) @@ -282,19 +232,18 @@ bool CheckExists(const char *path) int main_generator (int argc, char** argv) { - printf (".LNG Generator " VERSION "\n\r"); - printf ("Copyright (C) 2003-2009 WARP ItSelf\n\r"); - printf ("Copyright (C) 2005 WARP ItSelf & Alex Yaroslavsky\n\n\r"); + printf (".LNG Generator " VERSION "\n"); + printf ("Copyright (C) 2003-2009 WARP ItSelf\n"); + printf ("Copyright (C) 2005 WARP ItSelf & Alex Yaroslavsky\n\n"); if ( argc < 2 ) { - printf ("Usage: generator [options] feed_file\n\r"); + printf ("Usage: generator [options] feed_file\n"); printf ("\nOptions:\n"); - printf ("\t-i filename - optional ini file with update status.\n\r"); - printf ("\t-ol output_path - language files output path.\n\r"); - printf ("\t-oh output_path - header file output path.\n\r"); - printf ("\t-nc - don't write copyright info to generated files.\n\r"); - printf ("\t-e - output encoding set in feed file for each output file (UTF8 otherwise).\n\r"); + printf ("\t-i filename - optional ini file with update status.\n"); + printf ("\t-ol output_path - language files output path.\n"); + printf ("\t-oh output_path - header file output path.\n"); + printf ("\t-nc - don't write copyright info to generated files.\n"); return 0; } @@ -305,8 +254,6 @@ int main_generator (int argc, char** argv) bool bWriteCopyright = true; - bool bOutputInUTF8 = true; - if ( argc > 2 ) { for (int i = 1; i < argc-1; i++) @@ -315,10 +262,6 @@ int main_generator (int argc, char** argv) bWriteCopyright = false; else - if ( strcmp (argv[i],"-e") == 0 ) - bOutputInUTF8 = false; - else - if ( strcmp (argv[i],"-i") == 0 && ++i < argc-1 ) { key_file.reset(new KeyFileHelper(argv[i])); @@ -340,60 +283,53 @@ int main_generator (int argc, char** argv) UnquoteIfNeeded (lpHOutputPath); } + + else + { + fprintf(stderr, "Bad argument: %s\n", argv[i]); + return -1; + } } } - fprintf(stderr, "lpLNGOutputPath=%s\n", lpLNGOutputPath); - - HANDLE hFeedFile = WINPORT(CreateFile) ( - MB2Wide(argv[argc-1]).c_str(), - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - 0, - NULL - ); + fprintf(stderr, "lpLNGOutputPath=%s\n", lpLNGOutputPath); - if ( hFeedFile == INVALID_HANDLE_VALUE ) + FDScope hFeedFile(OpenInputFile(argv[argc-1])); + if (!hFeedFile.Valid()) { - printf ("ERROR: Can't open the feed file, exiting.\n\r"); + printf ("ERROR: Can't open the feed file, exiting.\n"); return 0; } - DWORD dwRead; -// DWORD dwWritten; - DWORD dwID; + size_t dwSize = QueryFileSize(hFeedFile); - bool bUTF8 = false; - - WINPORT(ReadFile) (hFeedFile, &dwID, 3, &dwRead, NULL); - - bUTF8 = ((dwID & 0x00FFFFFF) == 0xBFBBEF); - - if ( !bUTF8 ) - WINPORT(SetFilePointer) (hFeedFile, 0, NULL, FILE_BEGIN); + if (dwSize >= 3) + { + uint32_t dwID = 0; + ReadAll(hFeedFile, &dwID, 3); + if ( ((dwID & 0x00FFFFFF) == 0xBFBBEF) ) + dwSize-= 3; + else + lseek(hFeedFile, 0, SEEK_SET); + } bool bUpdate; LanguageEntry *pLangEntries; - DWORD dwHeaderCRC32; - DWORD dwHeaderOldCRC32; + uint32_t dwHeaderCRC32; + uint32_t dwHeaderOldCRC32; char *lpHPPFileName = NULL; - char *lpHPPFileNameTemp = GetTempName (); + char *lpHPPFileNameTemp = NULL; - char *lpFullName = (char*)malloc (MAX_PATH); + char *lpFullName = (char*)malloc(0x10000); char *lpString = (char*)malloc (1024); - DWORD dwSize = WINPORT(GetFileSize) (hFeedFile, NULL); + char *pFeedBuffer = (char*)calloc(1, dwSize+1); - char *pFeedBuffer = (char*)malloc (dwSize+1); - memset (pFeedBuffer, 0, dwSize+1); - - WINPORT(ReadFile) (hFeedFile, pFeedBuffer, dwSize, &dwRead, NULL); + ReadAll(hFeedFile, pFeedBuffer, dwSize); char *lpStart = pFeedBuffer; @@ -402,9 +338,6 @@ int main_generator (int argc, char** argv) ReadFromBufferEx (lpStart, &lpHPPFileName); UnquoteIfNeeded (lpHPPFileName); - // read h encoding - int nHPPEncoding = bOutputInUTF8 ? CP_UTF8 : ReadInteger(lpStart); - // read language count int dwLangs = ReadInteger(lpStart); @@ -415,76 +348,58 @@ int main_generator (int argc, char** argv) dwHeaderCRC32 = 0; dwHeaderOldCRC32 = (CheckExists(lpFullName) && key_file) ? key_file->GetInt( lpFullName, "CRC32") : 0; - HANDLE hHFile = WINPORT(CreateFile) ( - MB2Wide(lpHPPFileNameTemp).c_str(), - GENERIC_WRITE, - FILE_SHARE_READ, - NULL, - CREATE_ALWAYS, - 0, - NULL - ); - - if ( hHFile != INVALID_HANDLE_VALUE ) - { - WriteSignatureIfNeeded(hHFile, nHPPEncoding); + lpHPPFileNameTemp = GetTempName(lpFullName); - if ( bWriteCopyright ) - { - sprintf (lpString, "// This C++ include file was generated by .LNG Generator " VERSION "\r\n// Copyright (C) 2003-2005 WARP ItSelf\r\n// Copyright (C) 2005 WARP ItSelf & Alex Yaroslavsky\r\n\r\n"); - SmartWrite (hHFile, lpString, &dwHeaderCRC32, nHPPEncoding); - } + FDScope hHFile(CreateOutputFile(lpHPPFileNameTemp)); + if ( hHFile.Valid() ) + { + WriteSignatureIfNeeded(hHFile); - pLangEntries = (LanguageEntry*)malloc (dwLangs*sizeof (LanguageEntry)); + if ( bWriteCopyright ) + { + sprintf (lpString, "// This C++ include file was generated by .LNG Generator " VERSION "\r\n// Copyright (C) 2003-2005 WARP ItSelf\r\n// Copyright (C) 2005 WARP ItSelf & Alex Yaroslavsky\r\n\n"); + SmartWrite (hHFile, lpString, &dwHeaderCRC32); + } - // read language names and create .lng files + pLangEntries = (LanguageEntry*)malloc (dwLangs*sizeof (LanguageEntry)); - for (int i = 0; i < dwLangs; i++) - { - ReadFromBufferEx (lpStart, &pLangEntries[i].lpLNGFileName); - - pLangEntries[i].nEncoding = bOutputInUTF8 ? CP_UTF8 : ReadInteger(lpStart); + // read language names and create .lng files - ReadFromBufferEx (lpStart, &pLangEntries[i].lpLanguageName); - ReadFromBufferEx (lpStart, &pLangEntries[i].lpLanguageDescription); + for (int i = 0; i < dwLangs; i++) + { + ReadFromBufferEx (lpStart, &pLangEntries[i].lpLNGFileName); - UnquoteIfNeeded (pLangEntries[i].lpLanguageName); - UnquoteIfNeeded (pLangEntries[i].lpLanguageDescription); - UnquoteIfNeeded (pLangEntries[i].lpLNGFileName); + ReadFromBufferEx (lpStart, &pLangEntries[i].lpLanguageName); + ReadFromBufferEx (lpStart, &pLangEntries[i].lpLanguageDescription); - sprintf (lpFullName, "%s/%s", lpLNGOutputPath?lpLNGOutputPath:".", pLangEntries[i].lpLNGFileName); + UnquoteIfNeeded (pLangEntries[i].lpLanguageName); + UnquoteIfNeeded (pLangEntries[i].lpLanguageDescription); + UnquoteIfNeeded (pLangEntries[i].lpLNGFileName); - pLangEntries[i].cNeedUpdate = 0; + sprintf (lpFullName, "%s/%s", lpLNGOutputPath?lpLNGOutputPath:".", pLangEntries[i].lpLNGFileName); - pLangEntries[i].dwCRC32 = 0; - pLangEntries[i].dwOldCRC32 = (CheckExists(lpFullName) && key_file) ? key_file->GetInt ( lpFullName, "CRC32") : 0; + pLangEntries[i].cNeedUpdate = 0; - pLangEntries[i].lpLNGFileNameTemp = GetTempName (); + pLangEntries[i].dwCRC32 = 0; + pLangEntries[i].dwOldCRC32 = (CheckExists(lpFullName) && key_file) ? key_file->GetInt ( lpFullName, "CRC32") : 0; - pLangEntries[i].hLNGFile = WINPORT(CreateFile) ( - MB2Wide(pLangEntries[i].lpLNGFileNameTemp).c_str(), - GENERIC_WRITE, - FILE_SHARE_READ, - NULL, - CREATE_ALWAYS, - 0, - NULL - ); + pLangEntries[i].lpLNGFileNameTemp = GetTempName(lpFullName); - if ( pLangEntries[i].hLNGFile == INVALID_HANDLE_VALUE ) - printf ("WARNING: Can't create the language file \"%s\".\n\r", pLangEntries[i].lpLNGFileName); - else + pLangEntries[i].hLNGFile = CreateOutputFile(pLangEntries[i].lpLNGFileNameTemp); + if ( pLangEntries[i].hLNGFile == -1) + printf ("WARNING: Can't create the language file \"%s\".\n", pLangEntries[i].lpLNGFileName); + else { - WriteSignatureIfNeeded(pLangEntries[i].hLNGFile, pLangEntries[i].nEncoding); + WriteSignatureIfNeeded(pLangEntries[i].hLNGFile); if ( bWriteCopyright ) { - sprintf (lpString, "// This .lng file was generated by .LNG Generator " VERSION "\r\n// Copyright (C) 2003-2005 WARP ItSelf\r\n// Copyright (C) 2005 WARP ItSelf & Alex Yaroslavsky\r\n\r\n"); - SmartWrite (pLangEntries[i].hLNGFile, lpString, &pLangEntries[i].dwCRC32, pLangEntries[i].nEncoding); + sprintf (lpString, "// This .lng file was generated by .LNG Generator " VERSION "\r\n// Copyright (C) 2003-2005 WARP ItSelf\r\n// Copyright (C) 2005 WARP ItSelf & Alex Yaroslavsky\r\n\n"); + SmartWrite (pLangEntries[i].hLNGFile, lpString, &pLangEntries[i].dwCRC32); } - sprintf (lpString, ".Language=%s,%s\r\n\r\n", pLangEntries[i].lpLanguageName, pLangEntries[i].lpLanguageDescription); - SmartWrite (pLangEntries[i].hLNGFile, lpString, &pLangEntries[i].dwCRC32, pLangEntries[i].nEncoding); + sprintf (lpString, ".Language=%s,%s\r\n\n", pLangEntries[i].lpLanguageName, pLangEntries[i].lpLanguageDescription); + SmartWrite (pLangEntries[i].hLNGFile, lpString, &pLangEntries[i].dwCRC32); } } @@ -494,7 +409,7 @@ int main_generator (int argc, char** argv) if ( ReadComments (lpStart, &lpHHead, "hhead:", "") ) { - SmartWrite (hHFile, lpHHead, &dwHeaderCRC32, nHPPEncoding); + SmartWrite (hHFile, lpHHead, &dwHeaderCRC32); free(lpHHead); } @@ -503,7 +418,7 @@ int main_generator (int argc, char** argv) ReadComments (lpStart, &lpEnum, "enum:", ""); sprintf (lpString, "enum %s{\r\n", lpEnum? lpEnum : ""); free(lpEnum); - SmartWrite (hHFile, lpString, &dwHeaderCRC32, nHPPEncoding); + SmartWrite (hHFile, lpString, &dwHeaderCRC32); // read strings @@ -517,7 +432,7 @@ int main_generator (int argc, char** argv) if ( ReadComments(lpStart, &lpHComments, "h:", "") ) { - SmartWrite (hHFile, lpHComments, &dwHeaderCRC32, nHPPEncoding); + SmartWrite (hHFile, lpHComments, &dwHeaderCRC32); free (lpHComments); } @@ -532,7 +447,7 @@ int main_generator (int argc, char** argv) char *lpSpecificLngComments = NULL; sprintf (lpString, "\t%s,\r\n", lpMsgID); - SmartWrite (hHFile, lpString, &dwHeaderCRC32, nHPPEncoding); + SmartWrite (hHFile, lpString, &dwHeaderCRC32); ReadComments(lpStart, &lpLngComments, "l:", ""); ReadComments(lpStart, &lpELngComments, "le:", ""); @@ -540,11 +455,11 @@ int main_generator (int argc, char** argv) for (int i = 0; i < dwLangs; i++) { if ( lpLngComments ) - SmartWrite (pLangEntries[i].hLNGFile, lpLngComments, &pLangEntries[i].dwCRC32, pLangEntries[i].nEncoding); + SmartWrite (pLangEntries[i].hLNGFile, lpLngComments, &pLangEntries[i].dwCRC32); if ( ReadComments(lpStart, &lpSpecificLngComments, "ls:", "") ) { - SmartWrite (pLangEntries[i].hLNGFile, lpSpecificLngComments, &pLangEntries[i].dwCRC32, pLangEntries[i].nEncoding); + SmartWrite (pLangEntries[i].hLNGFile, lpSpecificLngComments, &pLangEntries[i].dwCRC32); free (lpSpecificLngComments); } @@ -561,29 +476,29 @@ int main_generator (int argc, char** argv) /* printf ( - "WARNING: String %s (ID = %s) of %s language needs update!\n\r", + "WARNING: String %s (ID = %s) of %s language needs update!\n", lpLNGString, lpMsgID, pLangEntries[i].lpLanguageName ); */ - SmartWrite (pLangEntries[i].hLNGFile, "// need translation:\r\n", &pLangEntries[i].dwCRC32, pLangEntries[i].nEncoding); + SmartWrite (pLangEntries[i].hLNGFile, "// need translation:\r\n", &pLangEntries[i].dwCRC32); pLangEntries[i].cNeedUpdate++; } sprintf (lpString, "//[%s]\r\n%s\r\n", lpMsgID, lpLNGString); - SmartWrite (pLangEntries[i].hLNGFile, lpString, &pLangEntries[i].dwCRC32, pLangEntries[i].nEncoding); + SmartWrite (pLangEntries[i].hLNGFile, lpString, &pLangEntries[i].dwCRC32); free (lpLNGString); } if ( lpSpecificLngComments ) { - SmartWrite (pLangEntries[i].hLNGFile, lpSpecificLngComments, &pLangEntries[i].dwCRC32, pLangEntries[i].nEncoding); + SmartWrite (pLangEntries[i].hLNGFile, lpSpecificLngComments, &pLangEntries[i].dwCRC32); free (lpSpecificLngComments); } if ( lpELngComments ) - SmartWrite (pLangEntries[i].hLNGFile, lpELngComments, &pLangEntries[i].dwCRC32, pLangEntries[i].nEncoding); + SmartWrite (pLangEntries[i].hLNGFile, lpELngComments, &pLangEntries[i].dwCRC32); } free (lpMsgID); @@ -598,7 +513,7 @@ int main_generator (int argc, char** argv) if ( lpHComments ) { - SmartWrite (hHFile, lpHComments, &dwHeaderCRC32, nHPPEncoding); + SmartWrite (hHFile, lpHComments, &dwHeaderCRC32); free (lpHComments); } } @@ -608,7 +523,7 @@ int main_generator (int argc, char** argv) { if (pLangEntries[i].cNeedUpdate > 0) { - printf ("INFO: There are %d strings that require review in %s translation!\n\n\r", + printf ("INFO: There are %d strings that require review in %s translation!\n\n", pLangEntries[i].cNeedUpdate, pLangEntries[i].lpLanguageName); } @@ -616,14 +531,14 @@ int main_generator (int argc, char** argv) // write .h file footer - WINPORT(SetFilePointer) (hHFile, -2, NULL, FILE_CURRENT); + lseek(hHFile, -2, SEEK_CUR); sprintf (lpString, "\r\n};\r\n"); - SmartWrite (hHFile, lpString, &dwHeaderCRC32, nHPPEncoding); + SmartWrite (hHFile, lpString, &dwHeaderCRC32); if ( lpHTail ) { - SmartWrite (hHFile, lpHTail, &dwHeaderCRC32, nHPPEncoding); + SmartWrite (hHFile, lpHTail, &dwHeaderCRC32); free (lpHTail); } @@ -631,7 +546,8 @@ int main_generator (int argc, char** argv) for (int i = 0; i < dwLangs; i++) { - WINPORT(CloseHandle) (pLangEntries[i].hLNGFile); + close(pLangEntries[i].hLNGFile); + pLangEntries[i].hLNGFile = -1; sprintf (lpFullName, "%s/%s", lpLNGOutputPath?lpLNGOutputPath:".", pLangEntries[i].lpLNGFileName); @@ -652,14 +568,13 @@ int main_generator (int argc, char** argv) if ( bUpdate ) { - WINPORT(MoveFileEx) ( - MB2Wide(pLangEntries[i].lpLNGFileNameTemp).c_str(), - MB2Wide(lpFullName).c_str(), - MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED - ); + if (rename(pLangEntries[i].lpLNGFileNameTemp, lpFullName) == -1) { + printf ("ERROR: Failed to rename '%s' -> '%s'.\n", + pLangEntries[i].lpLNGFileNameTemp, lpFullName); + } } - WINPORT(DeleteFile) (MB2Wide(pLangEntries[i].lpLNGFileNameTemp).c_str()); + unlink(pLangEntries[i].lpLNGFileNameTemp); free (pLangEntries[i].lpLNGFileNameTemp); free (pLangEntries[i].lpLNGFileName); @@ -667,9 +582,7 @@ int main_generator (int argc, char** argv) free (pLangEntries[i].lpLanguageDescription); } - free(pLangEntries); - - WINPORT(CloseHandle) (hHFile); + free(pLangEntries); sprintf (lpFullName, "%s/%s", lpHOutputPath?lpHOutputPath:".", lpHPPFileName); @@ -690,29 +603,25 @@ int main_generator (int argc, char** argv) if ( bUpdate ) { - WINPORT(MoveFileEx) ( - MB2Wide(lpHPPFileNameTemp).c_str(), - MB2Wide(lpFullName).c_str(), - MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED - ); + if (rename(lpHPPFileNameTemp, lpFullName) == -1) { + printf ("ERROR: Failed to rename '%s' -> '%s'.\n", lpHPPFileNameTemp, lpFullName); + } } } else - printf ("ERROR: Can't create the header file, exiting.\n\r"); + printf ("ERROR: Can't create the header file, exiting.\n"); } else - printf ("ERROR: Zero languages to process, exiting.\n\r"); + printf ("ERROR: Zero languages to process, exiting.\n"); - WINPORT(DeleteFile) (MB2Wide(lpHPPFileNameTemp).c_str()); + unlink(lpHPPFileNameTemp); free (lpHPPFileNameTemp); free (lpHPPFileName); free (pFeedBuffer); free (lpString); - WINPORT(CloseHandle) (hFeedFile); - free (lpFullName); free (lpHOutputPath); free (lpLNGOutputPath); |