Prevent redeclaration of typedef yyscan_t
authorPeter Eisentraut <[email protected]>
Thu, 19 Dec 2024 10:21:06 +0000 (11:21 +0100)
committerPeter Eisentraut <[email protected]>
Thu, 19 Dec 2024 10:24:43 +0000 (11:24 +0100)
Fix for 1f0de66ea2a: We need to prevent redeclaration of typedef
yyscan_t.  (This will work with C11 but not currently with C99.)  The
generated scanner files provide their own typedef, but we also need to
provide one for the interfaces that we expose.  So we need to add some
preprocessor guards to avoid a redefinition.  (This is how the
generated scanner files do it internally as well.)  This way
everything now works independent of the order in which things are
included.

Discussion: https://www.postgresql.org/message-id/flat/eb6faeac-2a8a-4b69-9189-c33c520e5b7b@eisentraut.org

contrib/cube/cubedata.h
contrib/seg/segdata.h

index 8bfcc6e99a27d4a37ca7ad3cd0757f7f9c5d7175..ad1e2bd69981097b5d21c8f8d5213a43eb6c64e4 100644 (file)
@@ -62,7 +62,10 @@ typedef struct NDBOX
 /* for cubescan.l and cubeparse.y */
 /* All grammar constructs return strings */
 #define YYSTYPE char *
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
 typedef void *yyscan_t;
+#endif
 
 /* in cubescan.l */
 extern int cube_yylex(YYSTYPE *yylval_param, yyscan_t yyscanner);
index 7bc7c83dca309153e186b888da1efa25d1c9f1cf..4347c31c28e94071b7926270b465af8e932c34b3 100644 (file)
@@ -16,7 +16,10 @@ extern int   significant_digits(const char *s);
 
 /* for segscan.l and segparse.y */
 union YYSTYPE;
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
 typedef void *yyscan_t;
+#endif
 
 /* in segscan.l */
 extern int seg_yylex(union YYSTYPE *yylval_param, yyscan_t yyscanner);