nutcracker 0.3.0.12 → 0.4.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. checksums.yaml +5 -13
  2. data/README.md +3 -3
  3. data/Rakefile +12 -10
  4. data/ext/nutcracker/Makefile.in +215 -162
  5. data/ext/nutcracker/README.md +16 -4
  6. data/ext/nutcracker/aclocal.m4 +432 -254
  7. data/ext/nutcracker/{contrib/yaml-0.1.4/configure → autom4te.cache/output.0} +11367 -4545
  8. data/ext/nutcracker/autom4te.cache/output.1 +19907 -0
  9. data/ext/nutcracker/autom4te.cache/output.2 +19907 -0
  10. data/ext/nutcracker/autom4te.cache/requests +518 -0
  11. data/ext/nutcracker/autom4te.cache/traces.0 +2715 -0
  12. data/ext/nutcracker/autom4te.cache/traces.1 +967 -0
  13. data/ext/nutcracker/autom4te.cache/traces.2 +2715 -0
  14. data/ext/nutcracker/config/compile +347 -0
  15. data/ext/nutcracker/config/config.guess +116 -78
  16. data/ext/nutcracker/config/config.sub +65 -45
  17. data/ext/nutcracker/config/depcomp +295 -192
  18. data/ext/nutcracker/config/install-sh +7 -7
  19. data/ext/nutcracker/config/ltmain.sh +15 -20
  20. data/ext/nutcracker/config/missing +149 -265
  21. data/ext/nutcracker/configure +493 -367
  22. data/ext/nutcracker/contrib/Makefile.in +158 -116
  23. data/ext/nutcracker/extconf.rb +0 -1
  24. data/ext/nutcracker/m4/libtool.m4 +4 -23
  25. data/ext/nutcracker/m4/ltoptions.m4 +0 -0
  26. data/ext/nutcracker/m4/ltsugar.m4 +0 -0
  27. data/ext/nutcracker/m4/ltversion.m4 +0 -0
  28. data/ext/nutcracker/m4/lt~obsolete.m4 +0 -0
  29. data/ext/nutcracker/notes/recommendation.md +1 -1
  30. data/ext/nutcracker/notes/redis.md +35 -3
  31. data/ext/nutcracker/scripts/benchmark-mget.py +43 -0
  32. data/ext/nutcracker/scripts/nutcracker.spec +61 -3
  33. data/ext/nutcracker/scripts/redis-check.sh +43 -0
  34. data/ext/nutcracker/src/Makefile.in +205 -142
  35. data/ext/nutcracker/src/event/Makefile.in +164 -66
  36. data/ext/nutcracker/src/hashkit/Makefile.in +164 -66
  37. data/ext/nutcracker/src/nc_conf.c +2 -0
  38. data/ext/nutcracker/src/nc_connection.c +31 -0
  39. data/ext/nutcracker/src/nc_connection.h +3 -0
  40. data/ext/nutcracker/src/nc_core.c +38 -2
  41. data/ext/nutcracker/src/nc_core.h +11 -0
  42. data/ext/nutcracker/src/nc_log.c +90 -12
  43. data/ext/nutcracker/src/nc_log.h +11 -0
  44. data/ext/nutcracker/src/nc_mbuf.h +1 -1
  45. data/ext/nutcracker/src/nc_message.c +162 -116
  46. data/ext/nutcracker/src/nc_message.h +161 -129
  47. data/ext/nutcracker/src/nc_proxy.c +34 -4
  48. data/ext/nutcracker/src/nc_request.c +158 -32
  49. data/ext/nutcracker/src/nc_server.c +59 -5
  50. data/ext/nutcracker/src/nc_server.h +1 -0
  51. data/ext/nutcracker/src/nc_signal.c +2 -2
  52. data/ext/nutcracker/src/nc_stats.c +21 -0
  53. data/ext/nutcracker/src/nc_stats.h +28 -26
  54. data/ext/nutcracker/src/nc_string.c +176 -1
  55. data/ext/nutcracker/src/nc_string.h +26 -0
  56. data/ext/nutcracker/src/nc_util.c +12 -0
  57. data/ext/nutcracker/src/nc_util.h +1 -0
  58. data/ext/nutcracker/src/proto/Makefile.in +164 -66
  59. data/ext/nutcracker/src/proto/nc_memcache.c +279 -88
  60. data/ext/nutcracker/src/proto/nc_proto.h +3 -4
  61. data/ext/nutcracker/src/proto/nc_redis.c +561 -134
  62. data/lib/nutcracker/version.rb +1 -1
  63. metadata +31 -67
  64. data/ext/nutcracker/contrib/yaml-0.1.4/LICENSE +0 -19
  65. data/ext/nutcracker/contrib/yaml-0.1.4/Makefile.am +0 -20
  66. data/ext/nutcracker/contrib/yaml-0.1.4/Makefile.in +0 -736
  67. data/ext/nutcracker/contrib/yaml-0.1.4/README +0 -27
  68. data/ext/nutcracker/contrib/yaml-0.1.4/aclocal.m4 +0 -956
  69. data/ext/nutcracker/contrib/yaml-0.1.4/config.h.in +0 -80
  70. data/ext/nutcracker/contrib/yaml-0.1.4/config/config.guess +0 -1561
  71. data/ext/nutcracker/contrib/yaml-0.1.4/config/config.sub +0 -1686
  72. data/ext/nutcracker/contrib/yaml-0.1.4/config/depcomp +0 -630
  73. data/ext/nutcracker/contrib/yaml-0.1.4/config/install-sh +0 -520
  74. data/ext/nutcracker/contrib/yaml-0.1.4/config/ltmain.sh +0 -8406
  75. data/ext/nutcracker/contrib/yaml-0.1.4/config/missing +0 -376
  76. data/ext/nutcracker/contrib/yaml-0.1.4/configure.ac +0 -75
  77. data/ext/nutcracker/contrib/yaml-0.1.4/doc/doxygen.cfg +0 -222
  78. data/ext/nutcracker/contrib/yaml-0.1.4/include/yaml.h +0 -1971
  79. data/ext/nutcracker/contrib/yaml-0.1.4/m4/libtool.m4 +0 -7357
  80. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltoptions.m4 +0 -368
  81. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltsugar.m4 +0 -123
  82. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltversion.m4 +0 -23
  83. data/ext/nutcracker/contrib/yaml-0.1.4/m4/lt~obsolete.m4 +0 -92
  84. data/ext/nutcracker/contrib/yaml-0.1.4/src/Makefile.am +0 -4
  85. data/ext/nutcracker/contrib/yaml-0.1.4/src/Makefile.in +0 -484
  86. data/ext/nutcracker/contrib/yaml-0.1.4/src/api.c +0 -1392
  87. data/ext/nutcracker/contrib/yaml-0.1.4/src/dumper.c +0 -394
  88. data/ext/nutcracker/contrib/yaml-0.1.4/src/emitter.c +0 -2329
  89. data/ext/nutcracker/contrib/yaml-0.1.4/src/loader.c +0 -432
  90. data/ext/nutcracker/contrib/yaml-0.1.4/src/parser.c +0 -1374
  91. data/ext/nutcracker/contrib/yaml-0.1.4/src/reader.c +0 -465
  92. data/ext/nutcracker/contrib/yaml-0.1.4/src/scanner.c +0 -3570
  93. data/ext/nutcracker/contrib/yaml-0.1.4/src/writer.c +0 -141
  94. data/ext/nutcracker/contrib/yaml-0.1.4/src/yaml_private.h +0 -640
  95. data/ext/nutcracker/contrib/yaml-0.1.4/tests/Makefile.am +0 -8
  96. data/ext/nutcracker/contrib/yaml-0.1.4/tests/Makefile.in +0 -675
  97. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor-alt.c +0 -800
  98. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor.c +0 -1130
  99. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter-alt.c +0 -217
  100. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter.c +0 -202
  101. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-dumper.c +0 -311
  102. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-emitter.c +0 -327
  103. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-loader.c +0 -63
  104. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-parser.c +0 -63
  105. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-scanner.c +0 -63
  106. data/ext/nutcracker/contrib/yaml-0.1.4/tests/test-reader.c +0 -354
  107. data/ext/nutcracker/contrib/yaml-0.1.4/tests/test-version.c +0 -29
@@ -1,217 +0,0 @@
1
-
2
- #include <yaml.h>
3
-
4
- #include <stdlib.h>
5
- #include <stdio.h>
6
-
7
- int
8
- main(int argc, char *argv[])
9
- {
10
- int help = 0;
11
- int canonical = 0;
12
- int unicode = 0;
13
- int k;
14
- int done = 0;
15
-
16
- yaml_parser_t parser;
17
- yaml_emitter_t emitter;
18
- yaml_document_t document;
19
-
20
- /* Clear the objects. */
21
-
22
- memset(&parser, 0, sizeof(parser));
23
- memset(&emitter, 0, sizeof(emitter));
24
- memset(&document, 0, sizeof(document));
25
-
26
- /* Analyze command line options. */
27
-
28
- for (k = 1; k < argc; k ++)
29
- {
30
- if (strcmp(argv[k], "-h") == 0
31
- || strcmp(argv[k], "--help") == 0) {
32
- help = 1;
33
- }
34
-
35
- else if (strcmp(argv[k], "-c") == 0
36
- || strcmp(argv[k], "--canonical") == 0) {
37
- canonical = 1;
38
- }
39
-
40
- else if (strcmp(argv[k], "-u") == 0
41
- || strcmp(argv[k], "--unicode") == 0) {
42
- unicode = 1;
43
- }
44
-
45
- else {
46
- fprintf(stderr, "Unrecognized option: %s\n"
47
- "Try `%s --help` for more information.\n",
48
- argv[k], argv[0]);
49
- return 1;
50
- }
51
- }
52
-
53
- /* Display the help string. */
54
-
55
- if (help)
56
- {
57
- printf("%s [--canonical] [--unicode] <input >output\n"
58
- "or\n%s -h | --help\nReformat a YAML stream\n\nOptions:\n"
59
- "-h, --help\t\tdisplay this help and exit\n"
60
- "-c, --canonical\t\toutput in the canonical YAML format\n"
61
- "-u, --unicode\t\toutput unescaped non-ASCII characters\n",
62
- argv[0], argv[0]);
63
- return 0;
64
- }
65
-
66
- /* Initialize the parser and emitter objects. */
67
-
68
- if (!yaml_parser_initialize(&parser))
69
- goto parser_error;
70
-
71
- if (!yaml_emitter_initialize(&emitter))
72
- goto emitter_error;
73
-
74
- /* Set the parser parameters. */
75
-
76
- yaml_parser_set_input_file(&parser, stdin);
77
-
78
- /* Set the emitter parameters. */
79
-
80
- yaml_emitter_set_output_file(&emitter, stdout);
81
-
82
- yaml_emitter_set_canonical(&emitter, canonical);
83
- yaml_emitter_set_unicode(&emitter, unicode);
84
-
85
- /* The main loop. */
86
-
87
- while (!done)
88
- {
89
- /* Get the next event. */
90
-
91
- if (!yaml_parser_load(&parser, &document))
92
- goto parser_error;
93
-
94
- /* Check if this is the stream end. */
95
-
96
- if (!yaml_document_get_root_node(&document)) {
97
- done = 1;
98
- }
99
-
100
- /* Emit the event. */
101
-
102
- if (!yaml_emitter_dump(&emitter, &document))
103
- goto emitter_error;
104
- }
105
-
106
- yaml_parser_delete(&parser);
107
- yaml_emitter_delete(&emitter);
108
-
109
- return 0;
110
-
111
- parser_error:
112
-
113
- /* Display a parser error message. */
114
-
115
- switch (parser.error)
116
- {
117
- case YAML_MEMORY_ERROR:
118
- fprintf(stderr, "Memory error: Not enough memory for parsing\n");
119
- break;
120
-
121
- case YAML_READER_ERROR:
122
- if (parser.problem_value != -1) {
123
- fprintf(stderr, "Reader error: %s: #%X at %d\n", parser.problem,
124
- parser.problem_value, parser.problem_offset);
125
- }
126
- else {
127
- fprintf(stderr, "Reader error: %s at %d\n", parser.problem,
128
- parser.problem_offset);
129
- }
130
- break;
131
-
132
- case YAML_SCANNER_ERROR:
133
- if (parser.context) {
134
- fprintf(stderr, "Scanner error: %s at line %d, column %d\n"
135
- "%s at line %d, column %d\n", parser.context,
136
- parser.context_mark.line+1, parser.context_mark.column+1,
137
- parser.problem, parser.problem_mark.line+1,
138
- parser.problem_mark.column+1);
139
- }
140
- else {
141
- fprintf(stderr, "Scanner error: %s at line %d, column %d\n",
142
- parser.problem, parser.problem_mark.line+1,
143
- parser.problem_mark.column+1);
144
- }
145
- break;
146
-
147
- case YAML_PARSER_ERROR:
148
- if (parser.context) {
149
- fprintf(stderr, "Parser error: %s at line %d, column %d\n"
150
- "%s at line %d, column %d\n", parser.context,
151
- parser.context_mark.line+1, parser.context_mark.column+1,
152
- parser.problem, parser.problem_mark.line+1,
153
- parser.problem_mark.column+1);
154
- }
155
- else {
156
- fprintf(stderr, "Parser error: %s at line %d, column %d\n",
157
- parser.problem, parser.problem_mark.line+1,
158
- parser.problem_mark.column+1);
159
- }
160
- break;
161
-
162
- case YAML_COMPOSER_ERROR:
163
- if (parser.context) {
164
- fprintf(stderr, "Composer error: %s at line %d, column %d\n"
165
- "%s at line %d, column %d\n", parser.context,
166
- parser.context_mark.line+1, parser.context_mark.column+1,
167
- parser.problem, parser.problem_mark.line+1,
168
- parser.problem_mark.column+1);
169
- }
170
- else {
171
- fprintf(stderr, "Composer error: %s at line %d, column %d\n",
172
- parser.problem, parser.problem_mark.line+1,
173
- parser.problem_mark.column+1);
174
- }
175
- break;
176
-
177
- default:
178
- /* Couldn't happen. */
179
- fprintf(stderr, "Internal error\n");
180
- break;
181
- }
182
-
183
- yaml_parser_delete(&parser);
184
- yaml_emitter_delete(&emitter);
185
-
186
- return 1;
187
-
188
- emitter_error:
189
-
190
- /* Display an emitter error message. */
191
-
192
- switch (emitter.error)
193
- {
194
- case YAML_MEMORY_ERROR:
195
- fprintf(stderr, "Memory error: Not enough memory for emitting\n");
196
- break;
197
-
198
- case YAML_WRITER_ERROR:
199
- fprintf(stderr, "Writer error: %s\n", emitter.problem);
200
- break;
201
-
202
- case YAML_EMITTER_ERROR:
203
- fprintf(stderr, "Emitter error: %s\n", emitter.problem);
204
- break;
205
-
206
- default:
207
- /* Couldn't happen. */
208
- fprintf(stderr, "Internal error\n");
209
- break;
210
- }
211
-
212
- yaml_parser_delete(&parser);
213
- yaml_emitter_delete(&emitter);
214
-
215
- return 1;
216
- }
217
-
@@ -1,202 +0,0 @@
1
-
2
- #include <yaml.h>
3
-
4
- #include <stdlib.h>
5
- #include <stdio.h>
6
-
7
- int
8
- main(int argc, char *argv[])
9
- {
10
- int help = 0;
11
- int canonical = 0;
12
- int unicode = 0;
13
- int k;
14
- int done = 0;
15
-
16
- yaml_parser_t parser;
17
- yaml_emitter_t emitter;
18
- yaml_event_t event;
19
-
20
- /* Clear the objects. */
21
-
22
- memset(&parser, 0, sizeof(parser));
23
- memset(&emitter, 0, sizeof(emitter));
24
- memset(&event, 0, sizeof(event));
25
-
26
- /* Analyze command line options. */
27
-
28
- for (k = 1; k < argc; k ++)
29
- {
30
- if (strcmp(argv[k], "-h") == 0
31
- || strcmp(argv[k], "--help") == 0) {
32
- help = 1;
33
- }
34
-
35
- else if (strcmp(argv[k], "-c") == 0
36
- || strcmp(argv[k], "--canonical") == 0) {
37
- canonical = 1;
38
- }
39
-
40
- else if (strcmp(argv[k], "-u") == 0
41
- || strcmp(argv[k], "--unicode") == 0) {
42
- unicode = 1;
43
- }
44
-
45
- else {
46
- fprintf(stderr, "Unrecognized option: %s\n"
47
- "Try `%s --help` for more information.\n",
48
- argv[k], argv[0]);
49
- return 1;
50
- }
51
- }
52
-
53
- /* Display the help string. */
54
-
55
- if (help)
56
- {
57
- printf("%s [--canonical] [--unicode] <input >output\n"
58
- "or\n%s -h | --help\nReformat a YAML stream\n\nOptions:\n"
59
- "-h, --help\t\tdisplay this help and exit\n"
60
- "-c, --canonical\t\toutput in the canonical YAML format\n"
61
- "-u, --unicode\t\toutput unescaped non-ASCII characters\n",
62
- argv[0], argv[0]);
63
- return 0;
64
- }
65
-
66
- /* Initialize the parser and emitter objects. */
67
-
68
- if (!yaml_parser_initialize(&parser))
69
- goto parser_error;
70
-
71
- if (!yaml_emitter_initialize(&emitter))
72
- goto emitter_error;
73
-
74
- /* Set the parser parameters. */
75
-
76
- yaml_parser_set_input_file(&parser, stdin);
77
-
78
- /* Set the emitter parameters. */
79
-
80
- yaml_emitter_set_output_file(&emitter, stdout);
81
-
82
- yaml_emitter_set_canonical(&emitter, canonical);
83
- yaml_emitter_set_unicode(&emitter, unicode);
84
-
85
- /* The main loop. */
86
-
87
- while (!done)
88
- {
89
- /* Get the next event. */
90
-
91
- if (!yaml_parser_parse(&parser, &event))
92
- goto parser_error;
93
-
94
- /* Check if this is the stream end. */
95
-
96
- if (event.type == YAML_STREAM_END_EVENT) {
97
- done = 1;
98
- }
99
-
100
- /* Emit the event. */
101
-
102
- if (!yaml_emitter_emit(&emitter, &event))
103
- goto emitter_error;
104
- }
105
-
106
- yaml_parser_delete(&parser);
107
- yaml_emitter_delete(&emitter);
108
-
109
- return 0;
110
-
111
- parser_error:
112
-
113
- /* Display a parser error message. */
114
-
115
- switch (parser.error)
116
- {
117
- case YAML_MEMORY_ERROR:
118
- fprintf(stderr, "Memory error: Not enough memory for parsing\n");
119
- break;
120
-
121
- case YAML_READER_ERROR:
122
- if (parser.problem_value != -1) {
123
- fprintf(stderr, "Reader error: %s: #%X at %d\n", parser.problem,
124
- parser.problem_value, parser.problem_offset);
125
- }
126
- else {
127
- fprintf(stderr, "Reader error: %s at %d\n", parser.problem,
128
- parser.problem_offset);
129
- }
130
- break;
131
-
132
- case YAML_SCANNER_ERROR:
133
- if (parser.context) {
134
- fprintf(stderr, "Scanner error: %s at line %d, column %d\n"
135
- "%s at line %d, column %d\n", parser.context,
136
- parser.context_mark.line+1, parser.context_mark.column+1,
137
- parser.problem, parser.problem_mark.line+1,
138
- parser.problem_mark.column+1);
139
- }
140
- else {
141
- fprintf(stderr, "Scanner error: %s at line %d, column %d\n",
142
- parser.problem, parser.problem_mark.line+1,
143
- parser.problem_mark.column+1);
144
- }
145
- break;
146
-
147
- case YAML_PARSER_ERROR:
148
- if (parser.context) {
149
- fprintf(stderr, "Parser error: %s at line %d, column %d\n"
150
- "%s at line %d, column %d\n", parser.context,
151
- parser.context_mark.line+1, parser.context_mark.column+1,
152
- parser.problem, parser.problem_mark.line+1,
153
- parser.problem_mark.column+1);
154
- }
155
- else {
156
- fprintf(stderr, "Parser error: %s at line %d, column %d\n",
157
- parser.problem, parser.problem_mark.line+1,
158
- parser.problem_mark.column+1);
159
- }
160
- break;
161
-
162
- default:
163
- /* Couldn't happen. */
164
- fprintf(stderr, "Internal error\n");
165
- break;
166
- }
167
-
168
- yaml_parser_delete(&parser);
169
- yaml_emitter_delete(&emitter);
170
-
171
- return 1;
172
-
173
- emitter_error:
174
-
175
- /* Display an emitter error message. */
176
-
177
- switch (emitter.error)
178
- {
179
- case YAML_MEMORY_ERROR:
180
- fprintf(stderr, "Memory error: Not enough memory for emitting\n");
181
- break;
182
-
183
- case YAML_WRITER_ERROR:
184
- fprintf(stderr, "Writer error: %s\n", emitter.problem);
185
- break;
186
-
187
- case YAML_EMITTER_ERROR:
188
- fprintf(stderr, "Emitter error: %s\n", emitter.problem);
189
- break;
190
-
191
- default:
192
- /* Couldn't happen. */
193
- fprintf(stderr, "Internal error\n");
194
- break;
195
- }
196
-
197
- yaml_parser_delete(&parser);
198
- yaml_emitter_delete(&emitter);
199
-
200
- return 1;
201
- }
202
-
@@ -1,311 +0,0 @@
1
- #include <yaml.h>
2
-
3
- #include <stdlib.h>
4
- #include <stdio.h>
5
- #include <string.h>
6
-
7
- #ifdef NDEBUG
8
- #undef NDEBUG
9
- #endif
10
- #include <assert.h>
11
-
12
- #define BUFFER_SIZE 65536
13
- #define MAX_DOCUMENTS 16
14
-
15
- int copy_document(yaml_document_t *document_to, yaml_document_t *document_from)
16
- {
17
- yaml_node_t *node;
18
- yaml_node_item_t *item;
19
- yaml_node_pair_t *pair;
20
-
21
- if (!yaml_document_initialize(document_to, document_from->version_directive,
22
- document_from->tag_directives.start,
23
- document_from->tag_directives.end,
24
- document_from->start_implicit, document_from->end_implicit))
25
- return 0;
26
-
27
- for (node = document_from->nodes.start;
28
- node < document_from->nodes.top; node ++) {
29
- switch (node->type) {
30
- case YAML_SCALAR_NODE:
31
- if (!yaml_document_add_scalar(document_to, node->tag,
32
- node->data.scalar.value, node->data.scalar.length,
33
- node->data.scalar.style)) goto error;
34
- break;
35
- case YAML_SEQUENCE_NODE:
36
- if (!yaml_document_add_sequence(document_to, node->tag,
37
- node->data.sequence.style)) goto error;
38
- break;
39
- case YAML_MAPPING_NODE:
40
- if (!yaml_document_add_mapping(document_to, node->tag,
41
- node->data.mapping.style)) goto error;
42
- break;
43
- default:
44
- assert(0);
45
- break;
46
- }
47
- }
48
-
49
- for (node = document_from->nodes.start;
50
- node < document_from->nodes.top; node ++) {
51
- switch (node->type) {
52
- case YAML_SEQUENCE_NODE:
53
- for (item = node->data.sequence.items.start;
54
- item < node->data.sequence.items.top; item ++) {
55
- if (!yaml_document_append_sequence_item(document_to,
56
- node - document_from->nodes.start + 1,
57
- *item)) goto error;
58
- }
59
- break;
60
- case YAML_MAPPING_NODE:
61
- for (pair = node->data.mapping.pairs.start;
62
- pair < node->data.mapping.pairs.top; pair ++) {
63
- if (!yaml_document_append_mapping_pair(document_to,
64
- node - document_from->nodes.start + 1,
65
- pair->key, pair->value)) goto error;
66
- }
67
- break;
68
- default:
69
- break;
70
- }
71
- }
72
- return 1;
73
-
74
- error:
75
- yaml_document_delete(document_to);
76
- return 0;
77
- }
78
-
79
- int compare_nodes(yaml_document_t *document1, int index1,
80
- yaml_document_t *document2, int index2)
81
- {
82
- yaml_node_t *node1 = yaml_document_get_node(document1, index1);
83
- yaml_node_t *node2 = yaml_document_get_node(document2, index2);
84
- int k;
85
-
86
- assert(node1);
87
- assert(node2);
88
-
89
- if (node1->type != node2->type)
90
- return 0;
91
-
92
- if (strcmp((char *)node1->tag, (char *)node2->tag) != 0) return 0;
93
-
94
- switch (node1->type) {
95
- case YAML_SCALAR_NODE:
96
- if (node1->data.scalar.length != node2->data.scalar.length)
97
- return 0;
98
- if (strncmp((char *)node1->data.scalar.value, (char *)node2->data.scalar.value,
99
- node1->data.scalar.length) != 0) return 0;
100
- break;
101
- case YAML_SEQUENCE_NODE:
102
- if ((node1->data.sequence.items.top - node1->data.sequence.items.start) !=
103
- (node2->data.sequence.items.top - node2->data.sequence.items.start))
104
- return 0;
105
- for (k = 0; k < (node1->data.sequence.items.top - node1->data.sequence.items.start); k ++) {
106
- if (!compare_nodes(document1, node1->data.sequence.items.start[k],
107
- document2, node2->data.sequence.items.start[k])) return 0;
108
- }
109
- break;
110
- case YAML_MAPPING_NODE:
111
- if ((node1->data.mapping.pairs.top - node1->data.mapping.pairs.start) !=
112
- (node2->data.mapping.pairs.top - node2->data.mapping.pairs.start))
113
- return 0;
114
- for (k = 0; k < (node1->data.mapping.pairs.top - node1->data.mapping.pairs.start); k ++) {
115
- if (!compare_nodes(document1, node1->data.mapping.pairs.start[k].key,
116
- document2, node2->data.mapping.pairs.start[k].key)) return 0;
117
- if (!compare_nodes(document1, node1->data.mapping.pairs.start[k].value,
118
- document2, node2->data.mapping.pairs.start[k].value)) return 0;
119
- }
120
- break;
121
- default:
122
- assert(0);
123
- break;
124
- }
125
- return 1;
126
- }
127
-
128
- int compare_documents(yaml_document_t *document1, yaml_document_t *document2)
129
- {
130
- int k;
131
-
132
- if ((document1->version_directive && !document2->version_directive)
133
- || (!document1->version_directive && document2->version_directive)
134
- || (document1->version_directive && document2->version_directive
135
- && (document1->version_directive->major != document2->version_directive->major
136
- || document1->version_directive->minor != document2->version_directive->minor)))
137
- return 0;
138
-
139
- if ((document1->tag_directives.end - document1->tag_directives.start) !=
140
- (document2->tag_directives.end - document2->tag_directives.start))
141
- return 0;
142
- for (k = 0; k < (document1->tag_directives.end - document1->tag_directives.start); k ++) {
143
- if ((strcmp((char *)document1->tag_directives.start[k].handle,
144
- (char *)document2->tag_directives.start[k].handle) != 0)
145
- || (strcmp((char *)document1->tag_directives.start[k].prefix,
146
- (char *)document2->tag_directives.start[k].prefix) != 0))
147
- return 0;
148
- }
149
-
150
- if ((document1->nodes.top - document1->nodes.start) !=
151
- (document2->nodes.top - document2->nodes.start))
152
- return 0;
153
-
154
- if (document1->nodes.top != document1->nodes.start) {
155
- if (!compare_nodes(document1, 1, document2, 1))
156
- return 0;
157
- }
158
-
159
- return 1;
160
- }
161
-
162
- int print_output(char *name, unsigned char *buffer, size_t size, int count)
163
- {
164
- FILE *file;
165
- char data[BUFFER_SIZE];
166
- size_t data_size = 1;
167
- size_t total_size = 0;
168
- if (count >= 0) {
169
- printf("FAILED (at the document #%d)\nSOURCE:\n", count+1);
170
- }
171
- file = fopen(name, "rb");
172
- assert(file);
173
- while (data_size > 0) {
174
- data_size = fread(data, 1, BUFFER_SIZE, file);
175
- assert(!ferror(file));
176
- if (!data_size) break;
177
- assert(fwrite(data, 1, data_size, stdout) == data_size);
178
- total_size += data_size;
179
- if (feof(file)) break;
180
- }
181
- fclose(file);
182
- printf("#### (length: %d)\n", total_size);
183
- printf("OUTPUT:\n%s#### (length: %d)\n", buffer, size);
184
- return 0;
185
- }
186
-
187
- int
188
- main(int argc, char *argv[])
189
- {
190
- int number;
191
- int canonical = 0;
192
- int unicode = 0;
193
-
194
- number = 1;
195
- while (number < argc) {
196
- if (strcmp(argv[number], "-c") == 0) {
197
- canonical = 1;
198
- }
199
- else if (strcmp(argv[number], "-u") == 0) {
200
- unicode = 1;
201
- }
202
- else if (argv[number][0] == '-') {
203
- printf("Unknown option: '%s'\n", argv[number]);
204
- return 0;
205
- }
206
- if (argv[number][0] == '-') {
207
- if (number < argc-1) {
208
- memmove(argv+number, argv+number+1, (argc-number-1)*sizeof(char *));
209
- }
210
- argc --;
211
- }
212
- else {
213
- number ++;
214
- }
215
- }
216
-
217
- if (argc < 2) {
218
- printf("Usage: %s [-c] [-u] file1.yaml ...\n", argv[0]);
219
- return 0;
220
- }
221
-
222
- for (number = 1; number < argc; number ++)
223
- {
224
- FILE *file;
225
- yaml_parser_t parser;
226
- yaml_emitter_t emitter;
227
-
228
- yaml_document_t document;
229
- unsigned char buffer[BUFFER_SIZE];
230
- size_t written = 0;
231
- yaml_document_t documents[MAX_DOCUMENTS];
232
- size_t document_number = 0;
233
- int done = 0;
234
- int count = 0;
235
- int error = 0;
236
- int k;
237
- memset(buffer, 0, BUFFER_SIZE);
238
- memset(documents, 0, MAX_DOCUMENTS*sizeof(yaml_document_t));
239
-
240
- printf("[%d] Loading, dumping, and loading again '%s': ", number, argv[number]);
241
- fflush(stdout);
242
-
243
- file = fopen(argv[number], "rb");
244
- assert(file);
245
-
246
- assert(yaml_parser_initialize(&parser));
247
- yaml_parser_set_input_file(&parser, file);
248
- assert(yaml_emitter_initialize(&emitter));
249
- if (canonical) {
250
- yaml_emitter_set_canonical(&emitter, 1);
251
- }
252
- if (unicode) {
253
- yaml_emitter_set_unicode(&emitter, 1);
254
- }
255
- yaml_emitter_set_output_string(&emitter, buffer, BUFFER_SIZE, &written);
256
- yaml_emitter_open(&emitter);
257
-
258
- while (!done)
259
- {
260
- if (!yaml_parser_load(&parser, &document)) {
261
- error = 1;
262
- break;
263
- }
264
-
265
- done = (!yaml_document_get_root_node(&document));
266
- if (!done) {
267
- assert(document_number < MAX_DOCUMENTS);
268
- assert(copy_document(&(documents[document_number++]), &document));
269
- assert(yaml_emitter_dump(&emitter, &document) ||
270
- (yaml_emitter_flush(&emitter) && print_output(argv[number], buffer, written, count)));
271
- count ++;
272
- }
273
- else {
274
- yaml_document_delete(&document);
275
- }
276
- }
277
-
278
- yaml_parser_delete(&parser);
279
- assert(!fclose(file));
280
- yaml_emitter_close(&emitter);
281
- yaml_emitter_delete(&emitter);
282
-
283
- if (!error)
284
- {
285
- count = done = 0;
286
- assert(yaml_parser_initialize(&parser));
287
- yaml_parser_set_input_string(&parser, buffer, written);
288
-
289
- while (!done)
290
- {
291
- assert(yaml_parser_load(&parser, &document) || print_output(argv[number], buffer, written, count));
292
- done = (!yaml_document_get_root_node(&document));
293
- if (!done) {
294
- assert(compare_documents(documents+count, &document) || print_output(argv[number], buffer, written, count));
295
- count ++;
296
- }
297
- yaml_document_delete(&document);
298
- }
299
- yaml_parser_delete(&parser);
300
- }
301
-
302
- for (k = 0; k < document_number; k ++) {
303
- yaml_document_delete(documents+k);
304
- }
305
-
306
- printf("PASSED (length: %d)\n", written);
307
- print_output(argv[number], buffer, written, -1);
308
- }
309
-
310
- return 0;
311
- }