Annotation of embedaddon/miniupnpc/src/testupnpreplyparse.c, revision 1.1
1.1 ! misho 1: /* $Id: testupnpreplyparse.c,v 1.5 2017/12/12 11:18:46 nanard Exp $ */
! 2: /* MiniUPnP project
! 3: * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
! 4: * (c) 2006-2017 Thomas Bernard
! 5: * This software is subject to the conditions detailed
! 6: * in the LICENCE file provided within the distribution */
! 7: #include <stdio.h>
! 8: #include <string.h>
! 9: #include <stdlib.h>
! 10: #include "upnpreplyparse.h"
! 11:
! 12: int
! 13: test_parsing(const char * buf, int len, FILE * f)
! 14: {
! 15: char line[1024];
! 16: struct NameValueParserData pdata;
! 17: int ok = 1;
! 18: ParseNameValue(buf, len, &pdata);
! 19: /* check result */
! 20: if(f != NULL)
! 21: {
! 22: while(fgets(line, sizeof(line), f))
! 23: {
! 24: char * value;
! 25: char * equal;
! 26: char * parsedvalue;
! 27: int l;
! 28: l = strlen(line);
! 29: while((l > 0) && ((line[l-1] == '\r') || (line[l-1] == '\n')))
! 30: line[--l] = '\0';
! 31: /* skip empty lines */
! 32: if(l == 0)
! 33: continue;
! 34: equal = strchr(line, '=');
! 35: if(equal == NULL)
! 36: {
! 37: fprintf(stderr, "Warning, line does not contain '=' : %s\n", line);
! 38: continue;
! 39: }
! 40: *equal = '\0';
! 41: value = equal + 1;
! 42: parsedvalue = GetValueFromNameValueList(&pdata, line);
! 43: if((parsedvalue == NULL) || (strcmp(parsedvalue, value) != 0))
! 44: {
! 45: fprintf(stderr, "Element <%s> : expecting value '%s', got '%s'\n",
! 46: line, value, parsedvalue ? parsedvalue : "<null string>");
! 47: ok = 0;
! 48: }
! 49: }
! 50: }
! 51: ClearNameValueList(&pdata);
! 52: return ok;
! 53: }
! 54:
! 55: int main(int argc, char * * argv)
! 56: {
! 57: FILE * f;
! 58: char * buffer;
! 59: long l;
! 60: int ok;
! 61:
! 62: if(argc<2)
! 63: {
! 64: fprintf(stderr, "Usage: %s file.xml [file.namevalues]\n", argv[0]);
! 65: return 1;
! 66: }
! 67: f = fopen(argv[1], "r");
! 68: if(!f)
! 69: {
! 70: fprintf(stderr, "Error : can not open file %s\n", argv[1]);
! 71: return 2;
! 72: }
! 73: if(fseek(f, 0, SEEK_END) < 0) {
! 74: perror("fseek");
! 75: return 1;
! 76: }
! 77: l = (int)ftell(f);
! 78: if(l < 0) {
! 79: perror("ftell");
! 80: return 1;
! 81: }
! 82: if(fseek(f, 0, SEEK_SET) < 0) {
! 83: perror("fseek");
! 84: return 1;
! 85: }
! 86: buffer = malloc(l + 1);
! 87: if(buffer == NULL) {
! 88: fprintf(stderr, "Error: failed to allocate %ld bytes\n", l+1);
! 89: return 1;
! 90: }
! 91: l = fread(buffer, 1, l, f);
! 92: fclose(f);
! 93: f = NULL;
! 94: buffer[l] = '\0';
! 95: if(argc > 2)
! 96: {
! 97: f = fopen(argv[2], "r");
! 98: if(!f)
! 99: {
! 100: fprintf(stderr, "Error : can not open file %s\n", argv[2]);
! 101: return 2;
! 102: }
! 103: }
! 104: #ifdef DEBUG
! 105: DisplayNameValueList(buffer, l);
! 106: #endif
! 107: ok = test_parsing(buffer, l, f);
! 108: if(f)
! 109: {
! 110: fclose(f);
! 111: }
! 112: free(buffer);
! 113: return ok ? 0 : 3;
! 114: }
! 115:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>