bool ethash_get_default_dirname(char* strbuf, size_t buffsize) { static const char dir_suffix[] = ".ethash/"; strbuf[0] = '\0'; char* home_dir = getenv("HOME"); if (!home_dir || strlen(home_dir) == 0) { struct passwd* pwd = getpwuid(getuid()); if (pwd) home_dir = pwd->pw_dir; if (!home_dir) return false; } size_t len = strlen(home_dir); if (!ethash_strncat(strbuf, buffsize, home_dir, len)) { return false; } if (home_dir[len] != '/') { if (!ethash_strncat(strbuf, buffsize, "/", 1)) { return false; } } return ethash_strncat(strbuf, buffsize, dir_suffix, sizeof(dir_suffix)); }
bool ethash_get_default_dirname(char* strbuf, size_t buffsize) { static const char dir_suffix[] = "Appdata\\Ethash\\"; strbuf[0] = '\0'; if (!SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_PROFILE, NULL, 0, (WCHAR*)strbuf))) { return false; } if (!ethash_strncat(strbuf, buffsize, "\\", 1)) { return false; } return ethash_strncat(strbuf, buffsize, dir_suffix, sizeof(dir_suffix)); }
char* ethash_io_create_filename( char const* dirname, char const* filename, size_t filename_length ) { size_t dirlen = strlen(dirname); size_t dest_size = dirlen + filename_length + 1; if (dirname[dirlen] != '\\' || dirname[dirlen] != '/') { dest_size += 1; } char* name = malloc(dest_size); if (!name) { return NULL; } name[0] = '\0'; ethash_strncat(name, dest_size, dirname, dirlen); if (dirname[dirlen] != '\\' || dirname[dirlen] != '/') { ethash_strncat(name, dest_size, "\\", 1); } ethash_strncat(name, dest_size, filename, filename_length); return name; }