PhysFS_init() возвращает ненулевое значение с ошибкой: "без ошибок"

Я испытываю довольно странный сбой в моем коде и не знаю, что его вызывает. Я пытаюсь использовать PhysFS в моем коде C++. приведенный ниже код является частью класса, и Visual Studio 2017 сообщает мне, что сбой появляется в PHYSFS_mount() и впоследствии в EnterCriticalSection(), который, насколько я понимаю, имеет отношение к мьютексам. Теперь, насколько я понимаю, это должно быть правильно (обратите внимание, что основные вызовы initArchives() первый)

physfs_initialized = false;

...

void scope::parse_archive(const std::string& archive_path, const std::string& path_in_archive)
{
    assert(physfs_initialized);

    m_archivePath = archive_path;
    m_relativeArchivePath = path_in_archive.substr(1);

    //fsx = std::filesystem or std::expiremental::filesystem whatever floats your boat
    if(exists(fsx::path(archive_path))) return;


    if(!PHYSFS_mount(m_archivePath.c_str(),"",0)) return;
    const auto file = PHYSFS_openRead(m_relativeArchivePath.c_str());

    if(file) m_isValid = true;

    PHYSFS_close(file);
    PHYSFS_unmount(m_archivePath.c_str());
}

...

void initArchives(char ** argv)
{
    if (!PHYSFS_init(argv[0])) physfs_initialized = true;
    //a bit of ugly syntax because of the need to consume the return type
    atexit([]() {PHYSFS_deinit(); });
}

Авария, видимо, появляется здесь


int __PHYSFS_platformGrabMutex(void *mutex)
{
    EnterCriticalSection((LPCRITICAL_SECTION) mutex); // <-- here 
    return 1;
} /* __PHYSFS_platformGrabMutex */

Я что-то здесь не так делаю? Это проблема библиотеки или даже с моей ОС? Было ли что-то в сборке PhysFS, что я пропустил?

Изменить: я заметил, что я прочитал возвращаемое значение PHYSFS_init() неправильно, однако теперь я еще больше запутался, как PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode()) возвращает "нет ошибки", что здесь происходит?

1 ответ

Решение

Очевидно, в PhysFS есть ошибка, связанная с Windows 10. Это запрещает корректное выполнение PHYSFS_init(), изменяя строку 578 phsyfs_platform_windows.c на

rc = pGetDir(accessToken, NULL, &psize);

и перекомпиляция библиотеки устранила проблему для меня: /

https://hg.icculus.org/icculus/physfs/rev/ece6769c0676

https://discourse.libsdl.org/t/resolved-physfs-exception-thrown/25697/11

Другие вопросы по тегам