#include #include #include #include "web_utils.h" gchar * web_get_base_url (const gchar *abs_url) { const gchar *base = strrchr (abs_url, '/'); if (!base || (base == (strstr (abs_url, "://")+2))) return g_strdup (abs_url); return g_strndup (abs_url, base - abs_url); } gchar * web_get_abs_url (const gchar *base, const gchar *url) { gchar *abs_url = NULL; if (strstr (url, "://") != NULL) { abs_url = g_strdup (url); } else if (base) { if (url[0] == '/') { if (url[1] == '/') { gchar *proto = strstr (base, "://"); if (proto) { proto = g_strndup (base, (proto - base) + 1); abs_url = g_strconcat (proto, url, NULL); g_free (proto); } } else { guint len = strchr (base, ':') - base; const gchar *root = strchr (base + len + 3, '/'); if (root) len = root - base; else len = strlen (base); abs_url = g_new (gchar, len + strlen (url) + 1); g_memmove (abs_url, base, len); g_memmove (abs_url + len, url, strlen (url) + 1); } } else { if (base[strlen (base)-1] == '/') abs_url = g_strconcat (base, url, NULL); else abs_url = g_strjoin ("/", base, url, NULL); } } return abs_url; }