#include #include #include #include "yuri.h" static int _eat(struct uri *u, int index) { int i; char **path; free(u->path[index]); for (i = index+1; i < u->npath; i++) u->path[i-1] = u->path[i]; u->npath--; path = realloc(u->path, sizeof(*u->path)*u->npath); if (path == NULL) return -1; u->path = path; return 0; } int uri_normalize(struct uri *u) { int i; for (i = 0; i < strlen(u->scheme); i++) { if (isalpha(u->scheme[i])) u->scheme[i] = tolower(u->scheme[i]); } if (u->authority.host) { for (i = 0; i < strlen(u->authority.host); i++) { if (isalpha(u->authority.host[i])) u->authority.host[i] = tolower(u->authority.host[i]); } } for (i = 0; i < u->npath; i++) { if (strcmp(u->path[i], ".") == 0 || strcmp(u->path[i], "..") == 0) { if (_eat(u, i) == -1) return -1; } } return 0; }