diff --git a/url.c b/url.c index 0a3708f..a713058 100644 --- a/url.c +++ b/url.c @@ -28,6 +28,35 @@ extern void parse_scheme(const char *cp, unsigned size, URLComponents *c); * */ +char *URLComponentGetCMalloc( + const char *url, + URLComponents *components, + int type) +{ + URLRange *rangePtr; + URLRange r; + char *tmp; + + if (!url || !components) return NULL; + + if (type < URLComponentScheme || type > URLComponentPathAndQuery) + return NULL; + + rangePtr = &components->scheme; + + r = rangePtr[type]; + + if (!r.length) return NULL; + + tmp = (char *)malloc(r.length + 1); + if (!tmp) return NULL; + + memcpy(tmp, url + r.location, r.length); + tmp[r.length] = 0; + + return tmp; +} + int URLComponentGetC(const char *url, URLComponents *components, int type, char *dest) { URLRange *rangePtr; diff --git a/url.h b/url.h index d9dec86..5343365 100644 --- a/url.h +++ b/url.h @@ -57,6 +57,8 @@ typedef struct URLComponents { int ParseURL(const char *url, int length, URLComponents *components); +char *URLComponentGetCMalloc(const char *url, URLComponents *, int); + int URLComponentGet(const char *url, URLComponents *, int, char *); int URLComponentGetC(const char *url, URLComponents *, int, char *); //int URLComponentGetGS(const char *url, URLComponents *, int, GSString255Ptr);