String getArgV(const StringRef& find , bool getValue , const StringRef& def) { if (find.isWide() || def.isWide()) { return getArgV((const wchar_t**)__wargv+1 , __argc-1 , find.w_str() , getValue , def.w_str()); } else { return getArgV((const char**)__argv+1 , __argc-1 , find.a_str() , getValue , def.a_str()); } }
bool fileExists(const StringRef& file) { if (file.isWide()) { return _access(file.a_str(), 0) == 0; } else { return _waccess(file.w_str(), 0) == 0; } }
__int64 chtoint64(const StringRef& str , unsigned char base) { if (str.isWide()) { const wchar_t* s = str.w_str(); int sign = checkIntChar(s, base); return sign * _wcstoui64(s, 0, base); } else { const char* s = str.a_str(); int sign = checkIntChar(s, base); return sign * _strtoui64(s, 0, base); } }
String Internet::combineUrl(const StringRef& url, const StringRef& parent) { Stamina::RegEx regex; if (url.empty() || regex.match("#^\\w+://#", url.c_str())) { return url; } // wyci¹gamy poszczególne elementy URLa if (!regex.match("#^(\\w+://[^/]+/)([^\\?]+/)?([^\\?/]*)(\\?.*)?$#", parent.c_str())) return url; if (url.a_str()[0] == '.' && (url.length() < 2 || url.a_str()[1] != '.')) { // (http://..../) + (katalog/) + url bez kropki return regex[1] + regex[2] + url.substr(1); } else if (url.a_str()[0] == '/') { // (http://..../) + url bez kreski return regex[1] + url.substr(1); } else { // (http://..../) + (katalog/) + url return regex[1] + regex[2] + url; } }
int chtoint(const StringRef& str , unsigned char base) { if (str.isWide()) { const wchar_t* s = str.w_str(); int sign = checkIntChar(s, base); return sign * wcstoul(s, 0, base); } else { const char* s = str.a_str(); int sign = checkIntChar(s, base); return sign * strtoul(s, 0, base); } //return strToNumber<unsigned int>(str, base); }
bool isDirectory(const StringRef& path) { if (path == ".") return true; DWORD attr; if (path.isWide()) { attr = GetFileAttributesA(path.a_str()); } else { attr = GetFileAttributesW(path.w_str()); } if (attr == INVALID_FILE_ATTRIBUTES) return false; else return (attr & FILE_ATTRIBUTE_DIRECTORY) != 0; }
void splitCommand(const StringRef& txt , char splitter , tStringVector& list) { if (txt.empty()) return; char end; size_t pos = 0; do { // Ustalamy jakim znakiem ma sià zakonczyc parametr if (splitter && txt.a_str()[pos]=='"') {pos++; end = '"';} else end = splitter; size_t fnd = txt.find(end , pos); list.push_back(txt.substr(pos , (fnd != -1)?fnd-pos:fnd)); pos = fnd; if (pos != -1) { pos += (end=='"')?2:1; if (pos>=txt.size()) break; } else break; } while (1); }