[sword-devel] Win32 FileMgr Subclass

Greg Hellings greg.hellings at gmail.com
Sun Jul 26 09:00:46 EDT 2020


On Sun, Jul 26, 2020 at 6:42 AM Troy A. Griffitts <scribe at crosswire.org>
wrote:

> I've just committed the last bit for fixing the WIN32 Unicode issues.  If
> anyone can try compiling and running Xiphos without the Xiphos patch or any
> other projects for Windows, and let me know if things work for them in
> folders which include Unicode character, I would appreciate it.  I've
> tested BibleCS and it now works with a SWORD_PATH defined to /books/χαρις.
> I've tested using and installing modules in this configuration and believe
> all the bugs are squashed, but I would love confirmation from other
> projects.
>
> Thanks for any feedback,
>
> Troy
>
During cross-compile I'm getting the following errors:

[  6%] Building CXX object CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj
/usr/bin/i686-w64-mingw32-g++  -DCLUCENE2 -DCURLAVAILABLE
-DCURLSFTPAVAILABLE -DEXCLUDEBZIP2 -DEXCLUDEXZ
-DGLOBCONFPATH=\"/usr/i686-w64-mingw32/sys-root/mingw/etc/sword.conf\"
-DUSEICUREGEX -DUSELUCENE -DU_USING_ICU_NAMESPACE -D_FTPLIB_NO_COMPAT
-D_ICU_ -Dsword_EXPORTS @CMakeFiles/sword.dir/includes_CXX.rsp -D_ICUSWORD_
-g3 -Wall -O0 -D_ICUSWORD_   -o
CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj -c
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp: In static member
function 'static std::vector<sword::DirEntry>
sword::FileMgr::getDirList(const char*, bool, bool)':
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:395:2: error:
'WIN32_FIND_DATAW' was not declared in this scope
  395 |  WIN32_FIND_DATAW fileData;
      |  ^~~~~~~~~~~~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:398:2: error:
'HANDLE' was not declared in this scope
  398 |  HANDLE findIterator = FindFirstFileW(wcharPath, &fileData);
      |  ^~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:399:6: error:
'findIterator' was not declared in this scope
  399 |  if (findIterator != INVALID_HANDLE_VALUE) {
      |      ^~~~~~~~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:399:22: error:
'INVALID_HANDLE_VALUE' was not declared in this scope
  399 |  if (findIterator != INVALID_HANDLE_VALUE) {
      |                      ^~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:401:35: error:
'fileData' was not declared in this scope
  401 |    SWBuf dirEntName = wcharToUTF8(fileData.cFileName);
      |                                   ^~~~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:405:49: error:
'FILE_ATTRIBUTE_DIRECTORY' was not declared in this scope
  405 |     i.isDirectory = fileData.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY;
      |
^~~~~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:409:40: error:
'fileData' was not declared in this scope
  409 |   } while (FindNextFile(findIterator, &fileData) != 0);
      |                                        ^~~~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:409:12: error:
'FindNextFile' was not declared in this scope
  409 |   } while (FindNextFile(findIterator, &fileData) != 0);
      |            ^~~~~~~~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:410:3: error:
'FindClose' was not declared in this scope; did you mean '_findclose'?
  410 |   FindClose(findIterator);
      |   ^~~~~~~~~
      |   _findclose
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:397:17: warning:
unused variable 'wcharPath' [-Wunused-variable]
  397 |  const wchar_t *wcharPath = (const wchar_t *)wcharBuf.getRawData();
      |                 ^~~~~~~~~
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp: In static member
function 'static int sword::FileMgr::createParent(const char*)':
/builddir/build/BUILD/sword-1.8.900/src/mgr/filemgr.cpp:436:5: error:
'_wmkdir' was not declared in this scope; did you mean 'mkdir'?
  436 |     _wmkdir((const wchar_t *)utf8ToWChar(buf).getRawData());
      |     ^~~~~~~
      |     mkdir
make[2]: *** [CMakeFiles/sword.dir/build.make:283:
CMakeFiles/sword.dir/src/mgr/filemgr.cpp.obj] Error 1

I'm assuming there's a new package or macro I need to define? On my system
the WIN32_FIND_DATAW struct is defined in both minwinbase.h and shtypes.h.
I'm building with MinGW which might have a different header structure than
your compilers, if you're using Borland?

--Greg

>
> On 7/20/20 7:18 PM, Greg Hellings wrote:
>
> Sorry for the previous blank email - user error when I tried to reply:
>
> On Sun, Jul 19, 2020 at 2:40 PM Tobias Klein <contact at tklein.info> wrote:
>
>> Thanks for giving me the background on this, Karl! I appreciate it!
>>
>> Is Xiphos the only frontend that has been patching Sword for this
>> purpose? Then I suppose all other frontends suffer from this issue, huh?
>>
>
> When I first encountered this patch in Xiphos I tested with BibleTime and
> The Sword Project for Windows and both of them do crash under these
> circumstances.
>
> Yes, other toolkits such as Qt do have wrappers for this shortcoming
> already, but none of the other front ends I've worked with have bothered to
> put in the effort to produce a patched version of Sword to fix the crash.
>
> --Greg
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.orghttp://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.crosswire.org/pipermail/sword-devel/attachments/20200726/400cef40/attachment.html>


More information about the sword-devel mailing list