in src/main/cpp/launcher/windows/src/FileUtils.c [276:332]
void createDirectory(LauncherProperties * props, WCHAR * directory) {
WCHAR * parent;
// now directory is the absolute path with normalized slashes
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "Getting parent directory of ", 0);
writeMessageW(props, OUTPUT_LEVEL_DEBUG, 0, directory, 1);
parent = getParentDirectory(directory);
if(parent!=NULL) {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, " parent = ", 0);
writeMessageW(props, OUTPUT_LEVEL_DEBUG, 0, parent, 1);
if(!fileExists(parent)) {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "... doesn`t exist. Create it...", 1);
createDirectory(props, parent);
} else {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, " ... exist. ", 1);
}
if(isOK(props)) {
DWORD parentAttrs = GetFileAttributesW(parent);
if(parentAttrs == INVALID_FILE_ATTRIBUTES) {
props-> status = ERROR_INPUTOUPUT;
} else {
SECURITY_ATTRIBUTES secattr;
int64t * minSize = newint64_t(0, 0);
secattr.nLength = sizeof(SECURITY_ATTRIBUTES);
secattr.lpSecurityDescriptor = 0;
secattr.bInheritHandle = 1;
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 1, "... creating directory itself... ", 0);
writeMessageW(props, OUTPUT_LEVEL_DEBUG, 1, directory, 1);
checkFreeSpace(props, parent, minSize);
FREE(minSize);
if(isOK(props)) {
props->status = (CreateDirectoryExW(parent, directory, &secattr)) ? ERROR_OK : ERROR_INPUTOUPUT;
if(!isOK(props)) {
props->status = (CreateDirectoryW(directory, &secattr)) ? ERROR_OK : ERROR_INPUTOUPUT;
}
props->status = (fileExists(directory)) ? ERROR_OK : ERROR_INPUTOUPUT;
if(isOK(props)) {
SetFileAttributesW(directory, parentAttrs);
} else {
writeErrorA(props, OUTPUT_LEVEL_DEBUG, 1, "Error! Can`t create directory : ", directory, GetLastError());
}
}
}
}
FREE(parent);
} else {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, " parent is NULL ", 1);
props-> status = ERROR_INPUTOUPUT;
}
}