init commit
This commit is contained in:
Executable
+68
@@ -0,0 +1,68 @@
|
||||
long long
|
||||
stlen(char *buf)
|
||||
{
|
||||
long long i = 0;
|
||||
for (; buf[i] != '\0'; ++i) {
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
long long
|
||||
shift(char *buf, long long st, long long sh, long long len)
|
||||
{
|
||||
long long i = st;
|
||||
if (i + sh > len) {
|
||||
return len;
|
||||
}
|
||||
for (; i + sh <= len; ++i) {
|
||||
buf[i] = buf[i + sh];
|
||||
}
|
||||
return len - sh;
|
||||
}
|
||||
|
||||
void
|
||||
normalize_path(char *buf)
|
||||
{
|
||||
long long len = stlen(buf);
|
||||
for (int i = 1; buf[i]; ++i) {
|
||||
if (buf[i] == '.' && buf[i - 1] == '/') {
|
||||
if (buf[i + 1] == '.' && (buf[i + 2] == '/' buf[i + 2] == '\0')) {
|
||||
if (i - 2 >= 0) {
|
||||
int j;
|
||||
for (j = i - 2; buf[j] != '/'; --j) {
|
||||
}
|
||||
++j;
|
||||
if (buf[i + 2] == '/') {
|
||||
len = shift(buf, j, i + 3 - j, len);
|
||||
i = j - 1;
|
||||
} else if (!buf[i + 2]) {
|
||||
len = shift(buf, j, i + 2 - j, len);
|
||||
i = j - 1;
|
||||
}
|
||||
} else {
|
||||
if (buf[i + 2] == '/') {
|
||||
len = shift(buf, i, 3, len);
|
||||
--i;
|
||||
} else if (!buf[i + 2]) {
|
||||
len = shift(buf, i, 2, len);
|
||||
--i;
|
||||
}
|
||||
}
|
||||
} else if (buf[i + 1] == '/' buf[i + 1] == '\0') {
|
||||
if (buf[i + 1] == '/') {
|
||||
len = shift(buf, i, 2, len);
|
||||
--i;
|
||||
} else if (!buf[i + 1]) {
|
||||
len = shift(buf, i, 1, len);
|
||||
--i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
len = stlen(buf);
|
||||
if (len != 1) {
|
||||
if (buf[len - 1] == '/') {
|
||||
buf[len - 1] = '\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user