Browse Source
No need to waste startup time building something that can be done at compile time. This also resolves a clang++ warning originally reported in #4714, univalue/univalue_write.cpp:33:12: warning: array subscript is of type 'char escapes['"'] = "\\""; ^~~~ etc.0.10
Jeff Garzik
10 years ago
5 changed files with 344 additions and 20 deletions
@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
|
||||
// Copyright 2014 BitPay Inc.
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
//
|
||||
// To re-create univalue_escapes.h:
|
||||
// $ g++ -o gen gen.cpp
|
||||
// $ ./gen > univalue_escapes.h
|
||||
//
|
||||
|
||||
#include <ctype.h> |
||||
#include <stdio.h> |
||||
#include <string.h> |
||||
#include "univalue.h" |
||||
|
||||
using namespace std; |
||||
|
||||
static bool initEscapes; |
||||
static const char *escapes[256]; |
||||
|
||||
static void initJsonEscape() |
||||
{ |
||||
escapes[(int)'"'] = "\\\""; |
||||
escapes[(int)'\\'] = "\\\\"; |
||||
escapes[(int)'/'] = "\\/"; |
||||
escapes[(int)'\b'] = "\\b"; |
||||
escapes[(int)'\f'] = "\\f"; |
||||
escapes[(int)'\n'] = "\\n"; |
||||
escapes[(int)'\r'] = "\\r"; |
||||
escapes[(int)'\t'] = "\\t"; |
||||
|
||||
initEscapes = true; |
||||
} |
||||
|
||||
static void outputEscape() |
||||
{ |
||||
printf( "// Automatically generated file. Do not modify.\n" |
||||
"#ifndef __UNIVALUE_ESCAPES_H__\n" |
||||
"#define __UNIVALUE_ESCAPES_H__\n" |
||||
"static const char *escapes[256] = {\n"); |
||||
|
||||
for (unsigned int i = 0; i < 256; i++) { |
||||
if (!escapes[i]) { |
||||
printf("\tNULL,\n"); |
||||
} else { |
||||
printf("\t\""); |
||||
|
||||
unsigned int si; |
||||
for (si = 0; si < strlen(escapes[i]); si++) { |
||||
char ch = escapes[i][si]; |
||||
switch (ch) { |
||||
case '"': |
||||
printf("\\\""); |
||||
break; |
||||
case '\\': |
||||
printf("\\\\"); |
||||
break; |
||||
default: |
||||
printf("%c", escapes[i][si]); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
printf("\",\n"); |
||||
} |
||||
} |
||||
|
||||
printf( "};\n" |
||||
"#endif // __UNIVALUE_ESCAPES_H__\n"); |
||||
} |
||||
|
||||
int main (int argc, char *argv[]) |
||||
{ |
||||
initJsonEscape(); |
||||
outputEscape(); |
||||
return 0; |
||||
} |
||||
|
@ -0,0 +1,262 @@
@@ -0,0 +1,262 @@
|
||||
// Automatically generated file. Do not modify.
|
||||
#ifndef __UNIVALUE_ESCAPES_H__ |
||||
#define __UNIVALUE_ESCAPES_H__ |
||||
static const char *escapes[256] = { |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
"\\b", |
||||
"\\t", |
||||
"\\n", |
||||
NULL, |
||||
"\\f", |
||||
"\\r", |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
"\\\"", |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
"\\/", |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
"\\\\", |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
NULL, |
||||
}; |
||||
#endif // __UNIVALUE_ESCAPES_H__
|
Loading…
Reference in new issue