X-Git-Url: https://git.wpitchoune.net/gitweb/?p=prss.git;a=blobdiff_plain;f=src%2Furl.c;fp=src%2Furl.c;h=a08ccd3b2639876a717ee3fc38e09501290604e5;hp=0000000000000000000000000000000000000000;hb=f7dfdbf9d6e84e3eb9cdcc04d232d37ef5efe80e;hpb=479f4f78a5883feafa81b18497f60e2745dba8e3 diff --git a/src/url.c b/src/url.c new file mode 100644 index 0000000..a08ccd3 --- /dev/null +++ b/src/url.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2010-2013 jeanfi@gmail.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +/* + * Part of the following code is based on: + * http://www.geekhideout.com/urlcode.shtml + */ +#include "url.h" + +#include +#include +#include + +char *url_normalize(const char *url) +{ + int n = strlen(url); + char *ret = strdup(url); + + if (url[n - 1] == '/') + ret[n - 1] = '\0'; + + return ret; +} + +static char to_hex(char code) +{ + static const char hex[] = "0123456789abcdef"; + return hex[code & 0x0f]; +} + +/* + * Returns a url-encoded version of str. + */ +char *url_encode(const char *str) +{ + char *c, *buf, *pbuf; + + buf = malloc(strlen(str) * 3 + 1); + pbuf = buf; + + c = (char *)str; + + while (*c) { + + if (isalnum(*c) || + *c == '.' || *c == '_' || *c == '-' || *c == '~') + *pbuf++ = *c; + else { + *pbuf++ = '%'; + *pbuf++ = to_hex(*c >> 4); + *pbuf++ = to_hex(*c & 0x0f); + } + c++; + } + *pbuf = '\0'; + + return buf; +}