mirror of https://github.com/pygos/pkg-utils.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
823 B
56 lines
823 B
/* SPDX-License-Identifier: ISC */ |
|
#include <string.h> |
|
|
|
#include "util/util.h" |
|
|
|
int canonicalize_name(char *filename) |
|
{ |
|
char *ptr = filename; |
|
int i; |
|
|
|
while (*ptr == '/') |
|
++ptr; |
|
|
|
if (ptr != filename) { |
|
memmove(filename, ptr, strlen(ptr) + 1); |
|
ptr = filename; |
|
} |
|
|
|
while (*ptr != '\0') { |
|
if (*ptr == '/') { |
|
for (i = 0; ptr[i] == '/'; ++i) |
|
; |
|
|
|
if (i > 1) |
|
memmove(ptr + 1, ptr + i, strlen(ptr + i) + 1); |
|
} |
|
|
|
if (ptr[0] == '/' && ptr[1] == '\0') { |
|
*ptr = '\0'; |
|
break; |
|
} |
|
|
|
++ptr; |
|
} |
|
|
|
ptr = filename; |
|
|
|
while (*ptr != '\0') { |
|
if (ptr[0] == '.') { |
|
if (ptr[1] == '/' || ptr[1] == '\0') |
|
return -1; |
|
|
|
if (ptr[1] == '.' && |
|
(ptr[2] == '/' || ptr[2] == '\0')) { |
|
return -1; |
|
} |
|
} |
|
|
|
while (*ptr != '\0' && *ptr != '/') |
|
++ptr; |
|
if (*ptr == '/') |
|
++ptr; |
|
} |
|
|
|
return 0; |
|
}
|
|
|