|
@@ -3967,26 +3967,42 @@ bool String::is_rel_path() const {
|
|
}
|
|
}
|
|
|
|
|
|
String String::get_base_dir() const {
|
|
String String::get_base_dir() const {
|
|
- int basepos = find(":/");
|
|
|
|
- if (basepos == -1) {
|
|
|
|
- basepos = find(":\\");
|
|
|
|
|
|
+ int end = 0;
|
|
|
|
+
|
|
|
|
+ // url scheme style base
|
|
|
|
+ int basepos = find("://");
|
|
|
|
+ if (basepos != -1) {
|
|
|
|
+ end = basepos + 3;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // windows top level directory base
|
|
|
|
+ if (end == 0) {
|
|
|
|
+ basepos = find(":/");
|
|
|
|
+ if (basepos == -1) {
|
|
|
|
+ basepos = find(":\\");
|
|
|
|
+ }
|
|
|
|
+ if (basepos != -1) {
|
|
|
|
+ end = basepos + 2;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // unix root directory base
|
|
|
|
+ if (end == 0) {
|
|
|
|
+ if (begins_with("/")) {
|
|
|
|
+ end = 1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
String rs;
|
|
String rs;
|
|
String base;
|
|
String base;
|
|
- if (basepos != -1) {
|
|
|
|
- int end = basepos + 3;
|
|
|
|
|
|
+ if (end != 0) {
|
|
rs = substr(end, length());
|
|
rs = substr(end, length());
|
|
base = substr(0, end);
|
|
base = substr(0, end);
|
|
} else {
|
|
} else {
|
|
- if (begins_with("/")) {
|
|
|
|
- rs = substr(1, length());
|
|
|
|
- base = "/";
|
|
|
|
- } else {
|
|
|
|
- rs = *this;
|
|
|
|
- }
|
|
|
|
|
|
+ rs = *this;
|
|
}
|
|
}
|
|
|
|
|
|
- int sep = MAX(rs.find_last("/"), rs.find_last("\\"));
|
|
|
|
|
|
+ int sep = MAX(rs.rfind("/"), rs.rfind("\\"));
|
|
if (sep == -1) {
|
|
if (sep == -1) {
|
|
return base;
|
|
return base;
|
|
}
|
|
}
|