feat: added sling url decomposition
This commit is contained in:
71
kernel/util/slingurl.c
Normal file
71
kernel/util/slingurl.c
Normal file
@@ -0,0 +1,71 @@
|
||||
//
|
||||
// Created by rick on 26-03-21.
|
||||
//
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <myke/mem/malloc.h>
|
||||
|
||||
void slingurl_decompose(const char* url) {
|
||||
uint32_t urllen = strlen(url);
|
||||
if (urllen <= 0) {
|
||||
printf("Url empty");
|
||||
return;
|
||||
}
|
||||
char* lurl = malloc(urllen + 1);
|
||||
strcpy(lurl, url);
|
||||
|
||||
// get path section
|
||||
char* path = lurl;
|
||||
|
||||
// find fist selector
|
||||
char* selector = strchr(lurl, '.');
|
||||
int nselectors = 0;
|
||||
// to lazy to deal with urls without selectors and extension
|
||||
if (selector == NULL) goto free_malloc;
|
||||
selector[0] = 0;
|
||||
selector += 1;
|
||||
|
||||
// find suffix
|
||||
char* suffix = strchr(selector, '/');
|
||||
if (suffix != NULL) {
|
||||
suffix[0] = 0;
|
||||
suffix += 1;
|
||||
}
|
||||
|
||||
// pick last "suffix" as extension
|
||||
char* extension = strrchr(selector, '.');
|
||||
if (extension == NULL) {
|
||||
// no dots in suffix section, so only an extension
|
||||
extension = selector;
|
||||
selector = NULL;
|
||||
} else {
|
||||
extension[0] = 0;
|
||||
extension += 1;
|
||||
}
|
||||
|
||||
if (selector != NULL) {
|
||||
nselectors = 1;
|
||||
char* cselector = selector;
|
||||
while ((cselector = strchr(cselector, '.')) != NULL) {
|
||||
cselector[0] = 0;
|
||||
cselector += 1;
|
||||
nselectors++;
|
||||
}
|
||||
}
|
||||
|
||||
printf("path: %s\n", path);
|
||||
printf("selectors: ");
|
||||
char* cselector = selector;
|
||||
for (int i = 0; i < nselectors; ++i) {
|
||||
printf("%s,", cselector);
|
||||
cselector += strlen(cselector) + 1;
|
||||
}
|
||||
printf("\n");
|
||||
printf("extension: %s\n", extension);
|
||||
printf("suffix: %s\n", suffix);
|
||||
free_malloc:
|
||||
free(lurl);
|
||||
}
|
||||
Reference in New Issue
Block a user