]> git.ozlabs.org Git - ccan/commitdiff
fix warnings
authorrl-d <robert.lee.dickinson@gmail.com>
Wed, 8 Sep 2021 04:07:28 +0000 (00:07 -0400)
committerrl-d <robert.lee.dickinson@gmail.com>
Wed, 8 Sep 2021 04:07:28 +0000 (00:07 -0400)
ccan/graphql/_info
ccan/graphql/graphql.c
ccan/graphql/graphql.h
ccan/graphql/test/run.c

index efdb6a1395d78d7500c4bfaf52b82b000ee47520..83bcffd80653802cbcd3d27fb982ed264391b0ad 100644 (file)
  *    <https://github.com/rl-d/ccan>
  * 
  * Example:
- *     #include <stdio.h>
- *     #include "ccan/graphql/graphql.h"
  *     
- *     int main(int argc, char *argv[])
+ *     int main(int argc, char *argv[]) {
  *     
  *             const char *input_string = "{ fieldName }";
  *             struct list_head *output_tokens;
@@ -56,7 +54,7 @@ int main(int argc, char *argv[])
 
        if (strcmp(argv[1], "depends") == 0) {
                printf("ccan/list\n");
-               printf("ccan/take\n");
+               printf("ccan/str\n");
                printf("ccan/tal\n");
                printf("ccan/tal/str\n");
                printf("ccan/utf8\n");
index e2b70ef01789ff41ff19cb1dbc37ef6e99f04726..3f94fb50650d827229eec24cf80f8321dc4434a7 100644 (file)
@@ -1,4 +1,4 @@
-
+/* MIT (BSD) license - see LICENSE file for details */
 #include "graphql.h"
 
 #include "ccan/tal/str/str.h"
@@ -22,6 +22,8 @@
 #define NAME_START(c) (((c) >= 0x61 && (c) <= 0x7A) || ((c) >= 0x41 && (c) <= 0x5A) || (c) == 0x5F)
 #define NAME_CONTINUE(c) (NAME_START(c) || DIGIT(c))
 
+// Safe copy helper
+#define cpystr(d,s) { char *cpystr_p; char *cpystr_q; for(cpystr_p = (s), cpystr_q = (d); *cpystr_p;) *cpystr_q++ = *cpystr_p++; *cpystr_q++ = *cpystr_p++; }
 
 // Parser shorthands
 
        struct graphql_##type *obj = tal(tokens, struct graphql_##type); memset(obj, 0, sizeof(struct graphql_##type)); \
 
 #define EXIT \
+       goto exit_label; \
        exit_label: \
+       rollback_top = rollback_top; \
        if (*err) obj = tal_free(obj); \
        return obj; \
 
-#define CONSUME_ONE { list_add(used, list_pop(tokens, struct graphql_token, list)); }
-#define RESTORE_ONE { list_add(tokens, list_pop(used, struct graphql_token, list)); }
+#define CONSUME_ONE { list_add(used, (struct list_node *)list_pop(tokens, struct graphql_token, list)); }
+#define RESTORE_ONE { list_add(tokens, (struct list_node *)list_pop(used, struct graphql_token, list)); }
 #define ROLLBACK(args) { while (list_top(tokens, struct graphql_token, list) != rollback_top) { RESTORE_ONE; } }
 #define OR if (!*err) goto exit_label; *err = NULL;
 #define REQ if (*err) { ROLLBACK(args); goto exit_label; }
@@ -152,8 +156,7 @@ const char *graphql_parse(struct list_head *tokens, struct graphql_executable_do
        struct list_head used = LIST_HEAD_INIT(used);
        const char *err = NULL;
        *doc = parse_executable_document(tokens, &used, &err);
-       if (err)
-               return err;
+       return err;
 }
 
 /* The following parser functions follow special rules:
@@ -545,12 +548,12 @@ RET parse_directive(PARAMS) {
 RET parse_keyword(PARAMS, const char *keyword, const char *errmsg) {
        struct graphql_token *tok = list_top(tokens, struct graphql_token, list);
        if (!tok || tok->token_type != 'a') {
-               *err = errmsg; return;
+               *err = errmsg; return NULL;
        }
        if (!streq(tok->token_string, keyword)) {
-               *err = errmsg; return;
+               *err = errmsg; return NULL;
        }
-       CONSUME_ONE(ARGS);
+       CONSUME_ONE;
        return tok;
 }
 
@@ -563,45 +566,45 @@ RET parse_punct(PARAMS, int punct) {
                        sprintf(punctbuf, "expected: '...'");
                else
                        sprintf(punctbuf, "expected: '%c'", punct);
-               *err = punctbuf; return;
+               *err = punctbuf; return NULL;
        }
-       CONSUME_ONE(ARGS);
+       CONSUME_ONE;
        return tok;
 }
 
 RET parse_name(PARAMS) {
        struct graphql_token *tok = list_top(tokens, struct graphql_token, list);
        if (!tok || tok->token_type != 'a') {
-               *err = "name expected"; return 0;
+               *err = "name expected"; return NULL;
        }
-       CONSUME_ONE(ARGS);
+       CONSUME_ONE;
        return tok;
 }
 
 RET parse_int(PARAMS) {
        struct graphql_token *tok = list_top(tokens, struct graphql_token, list);
        if (!tok || tok->token_type != 'i') {
-               *err = "integer expected"; return;
+               *err = "integer expected"; return NULL;
        }
-       CONSUME_ONE(ARGS);
+       CONSUME_ONE;
        return tok;
 }
 
 RET parse_float(PARAMS) {
        struct graphql_token *tok = list_top(tokens, struct graphql_token, list);
        if (!tok || tok->token_type != 'f') {
-               *err = "float expected"; return;
+               *err = "float expected"; return NULL;
        }
-       CONSUME_ONE(ARGS);
+       CONSUME_ONE;
        return tok;
 }
 
 RET parse_string(PARAMS) {
        struct graphql_token *tok = list_top(tokens, struct graphql_token, list);
        if (!tok || tok->token_type != 's') {
-               *err = "string expected"; return;
+               *err = "string expected"; return NULL;
        }
-       CONSUME_ONE(ARGS);
+       CONSUME_ONE;
        return tok;
 }
 
@@ -673,7 +676,7 @@ newchar:
                        }
 
                        tok = tal(tok_list, struct graphql_token);
-                       list_add_tail(tok_list, tok);
+                       list_add_tail(tok_list, &tok->list);
                        tok->token_type = c;
                        tok->token_specific = c;
                        tok->token_string = NULL;
@@ -685,7 +688,7 @@ newchar:
 
                        // Name/identifier tokens.
                        tok = tal(tok_list, struct graphql_token);
-                       list_add_tail(tok_list, tok);
+                       list_add_tail(tok_list, &tok->list);
                        tok->token_type = 'a';
                        tok->token_specific = 'a';
                        // tok->token_string updated below.
@@ -763,7 +766,7 @@ newchar:
                        int num_len = num_end - num_start;
 
                        tok = tal(tok_list, struct graphql_token);
-                       list_add_tail(tok_list, tok);
+                       list_add_tail(tok_list, &tok->list);
                        tok->token_type = type;
                        tok->token_string = tal_strndup(tok, num_start, num_len);
                        tok->source_line = line_num;
@@ -845,7 +848,7 @@ newchar:
                        int str_len = str_end - str_begin;
 
                        tok = tal(tok_list, struct graphql_token);
-                       list_add_tail(tok_list, tok);
+                       list_add_tail(tok_list, &tok->list);
                        tok->token_type = 's';
                        tok->token_specific = 's';
                        tok->token_string = tal_strndup(tok, str_begin, str_len);
@@ -858,13 +861,13 @@ newchar:
                        char *q = tok->token_string;
                        char *rewrite_dest;
                        int quotes = 0;
-                       while (d = *q++) {
+                       while ((d = *q++)) {
                                if (str_block) {
                                        if (d == '\"') quotes++; else quotes = 0;
                                        if (quotes == 3 && *(q-4) == '\\') {
                                                quotes = 0;
                                                rewrite_dest = q - 4;
-                                               strcpy(rewrite_dest, q - 3);
+                                               cpystr(rewrite_dest, q - 3);
                                        }
                                } else {
                                        if (d == '\\') {
@@ -873,27 +876,27 @@ newchar:
                                                switch (d) {
                                                case '\"':
                                                        *rewrite_dest++ = '\"';
-                                                       strcpy(rewrite_dest, q--);
+                                                       cpystr(rewrite_dest, q--);
                                                        break;
                                                case 'b':
                                                        *rewrite_dest++ = '\b';
-                                                       strcpy(rewrite_dest, q--);
+                                                       cpystr(rewrite_dest, q--);
                                                        break;
                                                case 'f':
                                                        *rewrite_dest++ = '\f';
-                                                       strcpy(rewrite_dest, q--);
+                                                       cpystr(rewrite_dest, q--);
                                                        break;
                                                case 'n':
                                                        *rewrite_dest++ = '\n';
-                                                       strcpy(rewrite_dest, q--);
+                                                       cpystr(rewrite_dest, q--);
                                                        break;
                                                case 'r':
                                                        *rewrite_dest++ = '\r';
-                                                       strcpy(rewrite_dest, q--);
+                                                       cpystr(rewrite_dest, q--);
                                                        break;
                                                case 't':
                                                        *rewrite_dest++ = '\t';
-                                                       strcpy(rewrite_dest, q--);
+                                                       cpystr(rewrite_dest, q--);
                                                        break;
                                                case 'u': {
                                                                // Insert escaped character using UTF-8 multi-byte encoding.
@@ -901,11 +904,11 @@ newchar:
                                                                int code_point = strtol(buf, 0, 16);
                                                                int bytes = utf8_encode(code_point, rewrite_dest);
                                                                rewrite_dest += bytes;
-                                                               strcpy(rewrite_dest, q--);
+                                                               cpystr(rewrite_dest, q--);
                                                        }
                                                        break;
                                                default:
-                                                       strcpy(rewrite_dest, --q);
+                                                       cpystr(rewrite_dest, --q);
                                                }
                                        }
                                }
@@ -920,7 +923,7 @@ newchar:
                                        if (LINE_TERMINATOR(d)) {
                                                while (LINE_TERMINATOR(d))
                                                        d = *q++;
-                                               strcpy(tok->token_string, q - 1);
+                                               cpystr(tok->token_string, q - 1);
                                                q = tok->token_string;
                                        } else
                                                break;
@@ -1001,7 +1004,7 @@ newchar:
                                                        d = *q++;
                                                --q;
 
-                                               strcpy(this_indent_start, this_indent_start + common_indent_len);
+                                               cpystr(this_indent_start, this_indent_start + common_indent_len);
                                                q -= common_indent_len;
                                                d = *q++;
 
index 94f7fa4d44f89a089a322bf52f73b78f04ad56ea..561854f434bab182c70c5b5b46880c4d650aa201 100644 (file)
@@ -1,3 +1,4 @@
+/* MIT (BSD) license - see LICENSE file for details */
 #ifndef __GRAPHQL_H__
 #define __GRAPHQL_H__ 1
 
index 91bc322e940ec5da2a449cbc90e4353b64100c5d..6a9dbdce5dffde4a16f424b15ea20e655e0be818 100644 (file)
@@ -1,4 +1,5 @@
-#include "ccan/graphql/graphql.h"
+/* Include the C files directly. */
+#include "ccan/graphql/graphql.c"
 #include "ccan/str/str.h"
 
 /* TEST POINT MACROS
@@ -32,6 +33,7 @@ int pass = 0, fail = 0;
 bool mute = 1;
 
 // Helper function.
+int listlen(struct list_head *tokens);
 int listlen(struct list_head *tokens) {
        struct graphql_token *tok;
        int n=0;
@@ -41,15 +43,47 @@ int listlen(struct list_head *tokens) {
        return n;
 }
 
+/* Test case function prototypes */
+
+void check_example_3(const char *source);
+void check_example_5(char *source);
+void check_example_6(char *source);
+void check_example_7(char *source);
+void check_example_8(char *source);
+void check_example_9(char *source);
+void check_example_10(char *source);
+void check_example_11(char *source);
+void check_example_12_and_13(const char *source);
+void check_example_14(char *source);
+void check_example_16(char *source);
+void check_example_18(char *source);
+void check_example_19(char *source);
+void check_example_20(char *source);
+void check_example_21(char *source);
+void check_example_23(char *source);
+void check_example_24(char *source);
+void check_int_value(char *source, int int_value);
+void check_invalid_int_values(char *source);
+void check_float_value(char *source, float float_value, const char *format);
+void check_valid_float_values(char *source);
+void check_invalid_float_values(char *source);
+void check_boolean_values(char *source);
+void check_string_value(char *source, const char *test_value, const char *expected_result);
+void check_example_25_and_26(const char *source);
+void check_example_29(char *source);
+void check_example_30_and_31(const char *source);
+void check_example_32(char *source);
+void check_example_34(char *source);
+void check_example_35(char *source);
+
 /* Test case functions begin here, called by main().
  * Note: Memory should be freed correctly in the success case, but if there
  * are errors, all bets are off.
  */
 
-int check_example_3(const char *source) {
+void check_example_3(const char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 3\n");
 
@@ -170,10 +204,9 @@ int check_example_3(const char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_5(char *source) {
+void check_example_5(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 5\n");
 
@@ -308,10 +341,9 @@ mutation {\n\
        tokens = tal_free(tokens);
 }
 
-int check_example_6(char *source) {
+void check_example_6(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 6\n");
 
@@ -367,10 +399,9 @@ int check_example_6(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_7(char *source) {
+void check_example_7(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 7\n");
 
@@ -462,10 +493,9 @@ int check_example_7(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_8(char *source) {
+void check_example_8(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 8\n");
 
@@ -632,10 +662,9 @@ int check_example_8(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_9(char *source) {
+void check_example_9(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 9\n");
 
@@ -770,10 +799,9 @@ int check_example_9(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_10(char *source) {
+void check_example_10(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 10\n");
 
@@ -902,10 +930,9 @@ int check_example_10(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_11(char *source) {
+void check_example_11(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 11\n");
 
@@ -1048,10 +1075,9 @@ int check_example_11(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_12_and_13(const char *source) {
+void check_example_12_and_13(const char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example Nos. 12 and 13\n");
 
@@ -1133,10 +1159,9 @@ int check_example_12_and_13(const char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_14(char *source) {
+void check_example_14(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 14\n");
 
@@ -1308,10 +1333,9 @@ int check_example_14(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_16(char *source) {
+void check_example_16(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 16\n");
 
@@ -1415,10 +1439,8 @@ int check_example_16(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_18(char *source) {
+void check_example_18(char *source) {
        struct list_head *tokens;
-       struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 18\n");
 
@@ -1474,10 +1496,9 @@ query noFragments {\n\
        tokens = tal_free(tokens);
 }
 
-int check_example_19(char *source) {
+void check_example_19(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 19\n");
 
@@ -1581,10 +1602,9 @@ fragment friendFields on User {\n\
        tokens = tal_free(tokens);
 }
 
-int check_example_20(char *source) {
+void check_example_20(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 20\n");
 
@@ -1717,10 +1737,9 @@ fragment standardProfilePic on User {\n\
        tokens = tal_free(tokens);
 }
 
-int check_example_21(char *source) {
+void check_example_21(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 21\n");
 
@@ -1846,10 +1865,9 @@ fragment pageFragment on Page {\n\
        tokens = tal_free(tokens);
 }
 
-int check_example_23(char *source) {
+void check_example_23(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 23\n");
 
@@ -1950,10 +1968,9 @@ query inlineFragmentTyping {\n\
        tokens = tal_free(tokens);
 }
 
-int check_example_24(char *source) {
+void check_example_24(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 24\n");
 
@@ -2090,10 +2107,9 @@ query inlineFragmentNoType($expandedInfo: Boolean) {\n\
        tokens = tal_free(tokens);
 }
 
-int check_int_value(char *source, int int_value) {
+void check_int_value(char *source, int int_value) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Int Value Range Check on %d\n", int_value);
 
@@ -2160,14 +2176,12 @@ int check_int_value(char *source, int int_value) {
        tokens = tal_free(tokens);
 }
 
-int check_invalid_int_values(char *source) {
+void check_invalid_int_values(char *source) {
        struct list_head *tokens;
-       struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Invalid Int Values\n");
 
-       char *bad_values[] = {"00", "-00", "+1", "1.", "1a", "1e", "0x123", "123L", 0};
+       const char *bad_values[] = {"00", "-00", "+1", "1.", "1a", "1e", "0x123", "123L", 0};
 
        for (int i=0; bad_values[i]; i++) {
                sprintf(source, "\
@@ -2187,10 +2201,9 @@ int check_invalid_int_values(char *source) {
        }
 }
 
-int check_float_value(char *source, float float_value, const char *format) {
+void check_float_value(char *source, float float_value, const char *format) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Float Value Range Check on %f\n", float_value);
 
@@ -2257,14 +2270,13 @@ int check_float_value(char *source, float float_value, const char *format) {
        tokens = tal_free(tokens);
 }
 
-int check_valid_float_values(char *source) {
+void check_valid_float_values(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Valid Float Values\n");
 
-       char *good_values[] = {"1.0", "1e50", "6.0221413e23", "1.23", 0};
+       const char *good_values[] = {"1.0", "1e50", "6.0221413e23", "1.23", 0};
 
        for (int i=0; good_values[i]; i++) {
                sprintf(source, "\
@@ -2328,14 +2340,12 @@ int check_valid_float_values(char *source) {
        }
 }
 
-int check_invalid_float_values(char *source) {
+void check_invalid_float_values(char *source) {
        struct list_head *tokens;
-       struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Invalid Float Values\n");
 
-       char *bad_values[] = {"00.0", "-00.0", "00e1", "1.23.4", "0x1.2p3", 0};
+       const char *bad_values[] = {"00.0", "-00.0", "00e1", "1.23.4", "0x1.2p3", 0};
 
        for (int i=0; bad_values[i]; i++) {
                sprintf(source, "\
@@ -2355,14 +2365,12 @@ int check_invalid_float_values(char *source) {
        }
 }
 
-int check_boolean_values(char *source) {
+void check_boolean_values(char *source) {
        struct list_head *tokens;
-       struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Boolean Values\n");
 
-       char *good_values[] = {"true", "false", 0};
+       const char *good_values[] = {"true", "false", 0};
 
        for (int i=0; good_values[i]; i++) {
                sprintf(source, "\
@@ -2406,7 +2414,7 @@ int check_boolean_values(char *source) {
                tokens = tal_free(tokens);
        }
 
-       char *bad_values[] = {"True", "False", "TRUE", "FALSE", 0};
+       const char *bad_values[] = {"True", "False", "TRUE", "FALSE", 0};
 
        for (int i=0; bad_values[i]; i++) {
                sprintf(source, "\
@@ -2459,10 +2467,9 @@ int check_boolean_values(char *source) {
        }
 }
 
-int check_string_value(char *source, const char *test_value, const char *expected_result) {
+void check_string_value(char *source, const char *test_value, const char *expected_result) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// String Value Test: %s\n", test_value);
 
@@ -2539,10 +2546,9 @@ int check_string_value(char *source, const char *test_value, const char *expecte
        }
 }
 
-int check_example_25_and_26(const char *source) {
+void check_example_25_and_26(const char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 25 and 26\n");
 
@@ -2562,10 +2568,9 @@ int check_example_25_and_26(const char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_29(char *source) {
+void check_example_29(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 29\n");
 
@@ -2647,10 +2652,9 @@ int check_example_29(char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_30_and_31(const char *source) {
+void check_example_30_and_31(const char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 30 and 31\n");
 
@@ -2678,7 +2682,6 @@ int check_example_30_and_31(const char *source) {
        tokens = tal_free(tokens);
 
        // Test the parser.
-       struct graphql_argument *arg;
        struct graphql_executable_document *doc;
        const char *e;
        TEST_CONT(graphql_lex(source, NULL, &tokens) == NULL);
@@ -2739,10 +2742,9 @@ int check_example_30_and_31(const char *source) {
        tokens = tal_free(tokens);
 }
 
-int check_example_32(char *source) {
+void check_example_32(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 32\n");
 
@@ -2892,10 +2894,9 @@ query getZuckProfile($devicePicSize: Int) {\n\
        tokens = tal_free(tokens);
 }
 
-int check_example_34(char *source) {
+void check_example_34(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 34\n");
 
@@ -2944,10 +2945,9 @@ type Person\n\
        tokens = tal_free(tokens);
 }
 
-int check_example_35(char *source) {
+void check_example_35(char *source) {
        struct list_head *tokens;
        struct graphql_token *tok;
-       const char *err;
 
        if (!mute) printf("// Example No. 35\n");
 
@@ -3007,10 +3007,10 @@ int main(void)
        int prev_fail; // Used by RUNx macros.
 
        // Check the lexer with all valid line terminators.
-       char *new_line = "\n";
-       char *carriage_return = "\r";
-       char *carriage_return_new_line = "\r\n";
-       char *line_terminators[] = { new_line, carriage_return, carriage_return_new_line };
+       const char *new_line = "\n";
+       const char *carriage_return = "\r";
+       const char *carriage_return_new_line = "\r\n";
+       const char *line_terminators[] = { new_line, carriage_return, carriage_return_new_line };
        for (int i=0; i<3; i++) {
                sprintf(source, "\
 {%s\