Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelfmz <fenix1905@tut.by>2020-08-23 00:35:40 +0300
committerGitHub <noreply@github.com>2020-08-23 00:35:40 +0300
commit0486f5aef1aa8a95f308eae28b8b6a041c8774d2 (patch)
tree00fa098d06ea7adb7a80823ed43ecfd73b0fc471
parent6fcd193909b535a5a6fe5cd52dfd49338fece9e2 (diff)
parent2c6fb92414e0880a571055cd3feed812e6a52532 (diff)
Merge pull request #730 from elfmz/wx31alpha-17sep20
FreeBSD - support wxwidgets 3.1
-rw-r--r--CMakeLists.txt40
-rw-r--r--WinPort/CMakeLists.txt8
-rw-r--r--WinPort/src/APIFSNotify.cpp1
-rw-r--r--cmake/modules/FindLibsmbclient.cmake9
-rw-r--r--far2l/CMakeLists.txt4
-rw-r--r--far2l/bootstrap/CMakeLists.txt15
-rwxr-xr-xfar2l/bootstrap/roots.sh4
-rw-r--r--farlng/CMakeLists.txt11
-rw-r--r--farlng/src/lng.common.cpp21
-rw-r--r--farlng/src/lng.common.h19
-rw-r--r--farlng/src/lng.convertor.cpp101
-rw-r--r--farlng/src/lng.generator.cpp315
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);