From 309a04f5b8e77f82b6ce703ff15fcb89368b067c Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 25 Oct 2001 00:50:50 +0000
Subject: [PATCH] Add missing "do { ... } while(0)" in ODBC macros and add
 find_baddefs script.

---
 src/interfaces/odbc/convert.c | 29 +++++++++++++++++------------
 src/tools/find_baddefs        | 19 +++++++++++++++++++
 2 files changed, 36 insertions(+), 12 deletions(-)
 create mode 100755 src/tools/find_baddefs

diff --git a/src/interfaces/odbc/convert.c b/src/interfaces/odbc/convert.c
index 3e7d24169c4..6210d030bf0 100644
--- a/src/interfaces/odbc/convert.c
+++ b/src/interfaces/odbc/convert.c
@@ -796,7 +796,7 @@ static int enlarge_statement(StatementClass *stmt, unsigned int newsize)
  *----------
  */
 #define	CVT_INIT(size) \
-{ \
+do { \
 	if (stmt->stmt_with_params) \
 		free(stmt->stmt_with_params); \
 	if (stmt->stmt_size_limit > 0) \
@@ -811,7 +811,8 @@ static int enlarge_statement(StatementClass *stmt, unsigned int newsize)
 	stmt->stmt_with_params = new_statement; \
 	npos = 0; \
 	new_statement[0] = '\0'; \
-}
+} while (0)
+
 /*----------
  *	Terminate the stmt_with_params string with NULL.
  *----------
@@ -823,55 +824,59 @@ static int enlarge_statement(StatementClass *stmt, unsigned int newsize)
  *----------
  */
 #define	CVT_APPEND_DATA(s, len) \
-{ \
+do { \
 	unsigned int	newpos = npos + len; \
 	ENLARGE_NEWSTATEMENT(newpos) \
 	memcpy(&new_statement[npos], s, len); \
 	npos = newpos; \
 	new_statement[npos] = '\0'; \
-}
+} while (0)
+
 /*----------
  *	Append a string.
  *----------
  */
 #define	CVT_APPEND_STR(s) \
-{ \
+do { \
 	unsigned int len = strlen(s); \
 	CVT_APPEND_DATA(s, len); \
-}
+} while (0)
+
 /*----------
  *	Append a char.	
  *----------
  */
 #define	CVT_APPEND_CHAR(c) \
-{ \
+do { \
 	ENLARGE_NEWSTATEMENT(npos + 1); \
 	new_statement[npos++] = c; \
-}
+} while (0)
+
 /*----------
  *	Append a binary data.
  *	Newly reqeuired size may be overestimated currently. 
  *----------
  */
 #define	CVT_APPEND_BINARY(buf, used) \
-{ \
+do { \
 	unsigned int	newlimit = npos + 5 * used; \
 	ENLARGE_NEWSTATEMENT(newlimit); \
 	npos += convert_to_pgbinary(buf, &new_statement[npos], used); \
-}
+} while (0)
+
 /*----------
  *
  *----------
  */
 #define	CVT_SPECIAL_CHARS(buf, used) \
-{ \
+do { \
 	int	cnvlen = convert_special_chars(buf, NULL, used); \
 	unsigned int	newlimit = npos + cnvlen; \
 \
 	ENLARGE_NEWSTATEMENT(newlimit); \
 	convert_special_chars(buf, &new_statement[npos], used); \
 	npos += cnvlen; \
-}
+} while (0)
 
 /*----------
  *	Check if the statement is	
diff --git a/src/tools/find_baddefs b/src/tools/find_baddefs
new file mode 100755
index 00000000000..07f6fa2c614
--- /dev/null
+++ b/src/tools/find_baddefs
@@ -0,0 +1,19 @@
+#!/bin/sh
+# This script attempts to find bad ifdef's, i.e. ifdef's that use braces
+# but not the do { ... } while (0) syntax
+#
+# This is useful for running before pgindent
+
+for FILE
+do
+	awk '	BEGIN		{was_define = "N"}
+				{ if (was_define == "Y" &&
+				      $0 ~ /^{/)
+					printf "%s  %d\n", FILENAME, NR
+				  if ($0 ~ /^#define/)
+					was_define = "Y"
+				  else
+					was_define = "N"
+				}' $FILE
+done
+
-- 
GitLab