git.y1.nz

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.