--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/xmltestharness/xmlclient/src/parsemap.c Wed Aug 25 12:40:50 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include "parsemap.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+/* function that searches untyped parseMap_XXX tables. also performs literal integer parsing. */
+PARSEMAP_LINKAGE int ParseMapSearch(const char* text, int* result, ParseMapEntry* entries, int numEntries)
+{
+ int textlen = strlen(text);
+ int i;
+ char* endptr = 0;
+
+ /* search the parse map for the matching string */
+ for(i = 0; i < numEntries; i++) {
+ if(entries[i].length == textlen && strcasecmp(text, entries[i].text) == 0) {
+ *result = entries[i].value;
+ return 1;
+ }
+ }
+ /* match not found */
+
+ /* try to parse string as an integer */
+ errno = 0;
+ i = strtol(text, &endptr, 0);
+ if(errno == ERANGE)
+ {
+ errno = 0;
+ i = (int) strtoul(text, &endptr, 0);
+ if(errno == ERANGE)
+ {
+ return 0;
+ }
+ }
+ if(endptr == (text + textlen)) /* all of string must be part of number */
+ {
+ *result = i;
+ return 1;
+ }
+
+ /* fail */
+ return 0;
+}
+
+PARSEMAP_LINKAGE const char* ParseMapSearchReverse(int value, char not_found_buf[11], ParseMapEntry* entries, int numEntries) {
+ int i;
+
+ /* search the parse map for the matching value */
+ for(i = 0; i < numEntries; i++) {
+ if(entries[i].value == value) {
+ return entries[i].text;
+ }
+ }
+
+ /* value not found in table, format hex string */
+ sprintf(not_found_buf, "0x%08X", value);
+ return not_found_buf;
+}