static BOOL WLog_BinaryAppender_Open(wLog* log, wLogAppender* appender) { wLogBinaryAppender* binaryAppender; if (!log || !appender) return FALSE; binaryAppender = (wLogBinaryAppender *)appender; if (!binaryAppender->FileName) { binaryAppender->FileName = (char*) malloc(MAX_PATH); if (!binaryAppender->FileName) return FALSE; sprintf_s(binaryAppender->FileName, MAX_PATH, "%"PRIu32".wlog", GetCurrentProcessId()); } if (!binaryAppender->FilePath) { binaryAppender->FilePath = GetKnownSubPath(KNOWN_PATH_TEMP, "wlog"); if (!binaryAppender->FilePath) return FALSE; } if (!binaryAppender->FullFileName) { binaryAppender->FullFileName = GetCombinedPath(binaryAppender->FilePath, binaryAppender->FileName); if (!binaryAppender->FullFileName) return FALSE; } if (!PathFileExistsA(binaryAppender->FilePath)) { if (!PathMakePathA(binaryAppender->FilePath, 0)) return FALSE; UnixChangeFileMode(binaryAppender->FilePath, 0xFFFF); } binaryAppender->FileDescriptor = fopen(binaryAppender->FullFileName, "a+"); if (!binaryAppender->FileDescriptor) return FALSE; return TRUE; }
BOOL WLog_FileAppender_Open(wLog* log, wLogFileAppender* appender) { if (!log || !appender) return FALSE; if (!appender->FilePath) { appender->FilePath = GetKnownSubPath(KNOWN_PATH_TEMP, "wlog"); if (!appender->FilePath) return FALSE; } if (!appender->FileName) { appender->FileName = (char*) malloc(MAX_PATH); if (!appender->FileName) return FALSE; sprintf_s(appender->FileName, MAX_PATH, "%u.log", (unsigned int) GetCurrentProcessId()); } if (!appender->FullFileName) { appender->FullFileName = GetCombinedPath(appender->FilePath, appender->FileName); if (!appender->FullFileName) return FALSE; } if (!PathFileExistsA(appender->FilePath)) { if (!PathMakePathA(appender->FilePath, 0)) return FALSE; UnixChangeFileMode(appender->FilePath, 0xFFFF); } appender->FileDescriptor = fopen(appender->FullFileName, "a+"); if (!appender->FileDescriptor) return FALSE; return TRUE; }
char* WLog_Message_GetOutputFileName(int id, const char* ext) { DWORD ProcessId; char* FilePath; char* FileName; char* FullFileName; if (!(FileName = (char*) malloc(256))) return NULL; FilePath = GetKnownSubPath(KNOWN_PATH_TEMP, "wlog"); if (!PathFileExistsA(FilePath)) { if (!PathMakePathA(FilePath, NULL)) { free(FileName); free(FilePath); return NULL; } } ProcessId = GetCurrentProcessId(); if (id >= 0) sprintf_s(FileName, 256, "%u-%d.%s", (unsigned int) ProcessId, id, ext); else sprintf_s(FileName, 256, "%u.%s", (unsigned int) ProcessId, ext); FullFileName = GetCombinedPath(FilePath, FileName); free(FileName); free(FilePath); return FullFileName; }
int TestPathMakePath(int argc, char* argv[]) { int x; size_t baseLen; BOOL success; char tmp[64]; char* path; char* cur; char delim = PathGetSeparatorA(0); char* base = GetKnownPath(KNOWN_PATH_TEMP); if (!base) { fprintf(stderr, "Failed to get temporary directory!\n"); return -1; } baseLen = strlen(base); srand(time(NULL)); for (x = 0; x < 5; x++) { sprintf_s(tmp, ARRAYSIZE(tmp), "%08X", rand()); path = GetCombinedPath(base, tmp); free(base); if (!path) { fprintf(stderr, "GetCombinedPath failed!\n"); return -1; } base = path; } printf("Creating path %s\n", path); success = PathMakePathA(path, NULL); if (!success) { fprintf(stderr, "MakePath failed!\n"); free(path); return -1; } success = PathFileExistsA(path); if (!success) { fprintf(stderr, "MakePath lied about success!\n"); free(path); return -1; } while (strlen(path) > baseLen) { if (!RemoveDirectoryA(path)) { fprintf(stderr, "RemoveDirectoryA %s failed!\n", path); free(path); return -1; } cur = strrchr(path, delim); if (cur) *cur = '\0'; } free(path); printf("%s success!\n", __FUNCTION__); return 0; }