Advertisement
Guest User

simple key-value parser (StackOverflow 2663644)

a guest
Apr 18th, 2010
521
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.01 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <assert.h>
  5.  
  6. struct Node
  7. {
  8.     char *key;
  9.     char *value;
  10.     struct Node *next;
  11. };
  12.  
  13. struct Node *load(FILE *file)
  14. {
  15.     struct Node *list = NULL, **nextp = &list;
  16.     char buffer[1024];
  17.  
  18.     while (fgets(buffer, sizeof buffer, file) != NULL) {
  19.     struct Node *node;
  20.  
  21.     node = malloc(sizeof(struct Node) + strlen(buffer) + 1);
  22.     node->key = strtok(strcpy((char*)(node+1), buffer), "/");
  23.     node->value = strtok(NULL, "\n");
  24.     node->next = NULL;
  25.     *nextp = node;
  26.     nextp = &node->next;
  27.     }
  28.     return list;
  29. }
  30.  
  31. int main(int argc, char **argv)
  32. {
  33.     FILE *file;
  34.     struct Node *head, *node;
  35.  
  36.     if (argc != 2) {
  37.     fprintf(stderr, "Usage: %s <file>\n", argv[0]);
  38.     exit(EXIT_FAILURE);
  39.     }
  40.  
  41.     file = fopen(argv[1], "r");
  42.     assert(file != NULL);
  43.     head = load(file);
  44.     fclose(file);
  45.  
  46.     for (node = head; node != NULL; node = node ->next)
  47.     printf("key=\"%s\" value=\"%s\"\n", node->key, node->value);
  48.  
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement