okra | C99 URI parser library. |
| download: http://git.y1.nz/archives/okra.tar.gz | |
| README | Files | Log | Refs |
test/okra.c
1 /**
2 * This provides a basic command-line interface for testing okra manually.
3 * Its purpose is to help developers get familiar with okra and how it
4 * works, and is not intended to be a useful command-line tool. It's not
5 * recommended, to pass URLs around raw via the command line.
6 */
7
8 #include <stdio.h> /* printf */
9
10 #include "okra.h"
11
12 #define SAFE_PRINT(name, value) { \
13 if (value != NULL) printf(name " [%s]" "\n", value); \
14 }
15 #define PRINT_URI(u) { \
16 SAFE_PRINT("uri ", u->uri); \
17 SAFE_PRINT("scheme ", u->scheme); \
18 SAFE_PRINT("authority ", u->authority); \
19 SAFE_PRINT("> host ", u->host); \
20 SAFE_PRINT("> userinfo", u->userinfo); \
21 SAFE_PRINT("> port ", u->port); \
22 SAFE_PRINT("path ", u->path); \
23 SAFE_PRINT("query ", u->query); \
24 SAFE_PRINT("fragment ", u->fragment); \
25 }
26
27 #define usage \
28 "This is a basic program for using okra in the terminal." "\n" \
29 "Usage: %s URI (parse)" "\n" \
30 " %s BASE_URI REL_REF (resolve)" "\n"
31
32 int
33 main(int argc, const char *argv[])
34 {
35 if (argc == 2) {
36 const char *buffer = argv[1];
37 OkraUri *uri = okra_parse(argv[1]);
38
39 if (uri == NULL) {
40 printf("Invalid URI :(" "\n");
41 return 0;
42 }
43 PRINT_URI(uri);
44 okra_free(uri);
45 return 0;
46 }
47
48 if (argc == 3) {
49 OkraUri *base = okra_parse(argv[1]);
50 OkraUri *ref = okra_parse(argv[2]);
51 OkraUri *result = okra_merge(base, ref);
52 if (base == NULL) {
53 printf("Invalid base URI :(" "\n");
54 return 0;
55 }
56 if (ref == NULL) {
57 printf("Invalid ref URI :(" "\n");
58 return 0;
59 }
60 printf(
61 " [%s]" "\n"
62 "+ [%s]" "\n"
63 "-------------------------------------" "\n",
64 base->uri, ref->uri
65 );
66 PRINT_URI(result);
67 okra_free(base);
68 okra_free(ref);
69 okra_free(result);
70 return 0;
71 }
72
73 printf(usage, argv[0], argv[0]);
74 return 1;
75 }
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.