// // Created by rick on 26-03-21. // #include #include #include #include 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); }