diff --git a/.gitignore b/.gitignore index 35ccb46..38c2c24 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ test test.exe +reference.out +reference.exe +parse.out +parse.exe diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..debe651 --- /dev/null +++ b/build.bat @@ -0,0 +1,2 @@ +gcc url.c examples/reference.c -o reference.exe -Wall -Wextra -ggdb +gcc url.c examples/parse.c -o parse.exe -Wall -Wextra -ggdb diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..1a4ab96 --- /dev/null +++ b/build.sh @@ -0,0 +1,2 @@ +gcc url.c examples/reference.c -o reference.out -Wall -Wextra -ggdb +gcc url.c examples/parse.c -o parse.out -Wall -Wextra -ggdb diff --git a/examples/parse.c b/examples/parse.c new file mode 100644 index 0000000..c1eb8d7 --- /dev/null +++ b/examples/parse.c @@ -0,0 +1,62 @@ +#include +#include +#include "../url.h" + +int main(void) +{ + char src[] = "http://website.com/users/000?filter=no#title"; + + URL parsed; + int ret = url_parse(src, strlen(src), NULL, 1, &parsed); + if (ret < 0) { + printf("Couldn't parse base URL\n"); + return -1; + } + + // http + printf("scheme=%.*s\n", + parsed.scheme.len, + parsed.scheme.ptr); + + // (empty) + if (parsed.username.len == 0) + printf("username=(empty)\n"); + else + printf("username=%.*s\n", + parsed.username.len, + parsed.username.ptr); + + // (password) + if (parsed.password.len == 0) + printf("password=(empty)\n"); + else + printf("password=%.*s\n", + parsed.password.len, + parsed.password.ptr); + + if (parsed.host_type == URL_HOST_EMPTY) + printf("host=(empty)\n"); + else + printf("host=%.*s\n", + parsed.host_text.len, + parsed.host_text.ptr); + + if (parsed.no_port) + printf("port=(empty)\n"); + else + printf("port=%d\n", parsed.port); + + printf("path=%.*s\n", + parsed.path.len, + parsed.path.ptr); + + printf("query=%.*s\n", + parsed.query.len, + parsed.query.ptr); + + printf("fragment=%.*s\n", + parsed.fragment.len, + parsed.fragment.ptr); + + return 0; +} diff --git a/examples/reference.c b/examples/reference.c new file mode 100644 index 0000000..4b4dadb --- /dev/null +++ b/examples/reference.c @@ -0,0 +1,27 @@ +#include +#include +#include "../url.h" + +int main(void) +{ + char base[] = "http://website.com/users/000"; + char ref[] = "../images/cat.png"; + + URL parsed_base; + int ret = url_parse(base, strlen(base), NULL, 1, &parsed_base); + if (ret < 0) { + printf("Couldn't parse base URL\n"); + return -1; + } + + char dst[1<<10]; + ret = url_resolve_reference(ref, strlen(ref), NULL, &parsed_base, 1, dst, (int) sizeof(dst)); + if (ret < 0) { + printf("Couldn't resolve reference\n"); + return -1; + } + + // http://website.com/images/cat.png + printf("%.*s\n", ret, dst); + return 0; +}