36{
37 const char* debug_file_name = debug_file.string();
38 static FILE *debugfp = nullptr;
39
40 if (debug_file_name == nullptr) {
41
42 return;
43 }
44
45#ifdef _WIN32
46
47 if (strcmp(debug_file_name, "/dev/null") == 0) {
48 debug_file_name = "nul";
49 debug_file.set_value(debug_file_name);
50 }
51#endif
52
53 if (debugfp == nullptr && debug_file_name[0] != '\0') {
54 debugfp = fopen(debug_file_name, "wb");
55 } else if (debugfp != nullptr && debug_file_name[0] == '\0') {
56 fclose(debugfp);
57 debugfp = nullptr;
58 }
59
60 va_list args;
61 va_start(args, format);
62 if (debugfp != nullptr) {
63 vfprintf(debugfp, format, args);
64 } else {
65 vfprintf(stderr, format, args);
66 }
67 va_end(args);
68}