[Bug 51846] Standard library call fopen(..., "wx") not recognized - causes destruction of data

WineHQ Bugzilla wine-bugs at winehq.org
Fri Oct 8 08:37:21 CDT 2021


https://bugs.winehq.org/show_bug.cgi?id=51846

--- Comment #2 from Ted Lyngmo <ted at lyncon.se> ---
Comment on attachment 70740
  --> https://bugs.winehq.org/attachment.cgi?id=70740
open_excl.cpp

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>

static const char* const testfile = "fileexcl.tst";

static void ok(bool status, const std::string& msg) {
    if(!status) throw std::runtime_error(msg);
}

struct closer {
    void operator()(std::FILE* fp) const { std::fclose(fp); }
};

using File = std::unique_ptr<std::FILE, closer>;

static void test_fopen_exclusive() {
    for(auto mode : {"wx", "w+x"}) {
        { // this should create the file
            File fp(std::fopen(testfile, mode));

            ok(bool(fp), "failed creating file with mode " +
std::string(mode));
        }

        { // this should fail to overwrite the file
            File fp(std::fopen(testfile, mode));

            ok(!fp, "overwrote existing file with mode " + std::string(mode));
        }

        std::remove(testfile);
    }
}

int main() {
    try {
        test_fopen_exclusive();
        std::cout << "All's well\n";
    } catch(const std::runtime_error& ex) {
        std::cout << ex.what() << '\n';
        std::remove(testfile);
    }
}

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list