From 293fd7c77e40cdf06b7a9eb6db95379be8869b04 Mon Sep 17 00:00:00 2001
From: Michael Meskes <meskes@postgresql.org>
Date: Thu, 17 Sep 2015 15:41:04 +0200
Subject: [PATCH] Let compiler handle size calculation of bool types.

Back in the day this did not work, but modern compilers should handle it themselves.
---
 src/interfaces/ecpg/ecpglib/data.c    | 18 ++----------------
 src/interfaces/ecpg/ecpglib/execute.c | 13 ++-----------
 2 files changed, 4 insertions(+), 27 deletions(-)

diff --git a/src/interfaces/ecpg/ecpglib/data.c b/src/interfaces/ecpg/ecpglib/data.c
index 8d36484f73a..82ab4aaf868 100644
--- a/src/interfaces/ecpg/ecpglib/data.c
+++ b/src/interfaces/ecpg/ecpglib/data.c
@@ -423,27 +423,13 @@ ecpg_get_data(const PGresult *results, int act_tuple, int act_field, int lineno,
 				case ECPGt_bool:
 					if (pval[0] == 'f' && pval[1] == '\0')
 					{
-						if (offset == sizeof(char))
-							*((char *) (var + offset * act_tuple)) = false;
-						else if (offset == sizeof(int))
-							*((int *) (var + offset * act_tuple)) = false;
-						else
-							ecpg_raise(lineno, ECPG_CONVERT_BOOL,
-									   ECPG_SQLSTATE_DATATYPE_MISMATCH,
-									   NULL);
+						*((bool *) (var + offset * act_tuple)) = false;
 						pval++;
 						break;
 					}
 					else if (pval[0] == 't' && pval[1] == '\0')
 					{
-						if (offset == sizeof(char))
-							*((char *) (var + offset * act_tuple)) = true;
-						else if (offset == sizeof(int))
-							*((int *) (var + offset * act_tuple)) = true;
-						else
-							ecpg_raise(lineno, ECPG_CONVERT_BOOL,
-									   ECPG_SQLSTATE_DATATYPE_MISMATCH,
-									   NULL);
+						*((bool *) (var + offset * act_tuple)) = true;
 						pval++;
 						break;
 					}
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index 9e40f4161a5..3b6eedb03b7 100644
--- a/src/interfaces/ecpg/ecpglib/execute.c
+++ b/src/interfaces/ecpg/ecpglib/execute.c
@@ -752,18 +752,9 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
 				{
 					strcpy(mallocedval, "{");
 
-					if (var->offset == sizeof(char))
-						for (element = 0; element < asize; element++)
-							sprintf(mallocedval + strlen(mallocedval), "%c,", (((char *) var->value)[element]) ? 't' : 'f');
+					for (element = 0; element < asize; element++)
+                                                        sprintf(mallocedval + strlen(mallocedval), "%c,", (((bool *) var->value)[element]) ? 't' : 'f');
 
-					/*
-					 * this is necessary since sizeof(C++'s bool)==sizeof(int)
-					 */
-					else if (var->offset == sizeof(int))
-						for (element = 0; element < asize; element++)
-							sprintf(mallocedval + strlen(mallocedval), "%c,", (((int *) var->value)[element]) ? 't' : 'f');
-					else
-						ecpg_raise(lineno, ECPG_CONVERT_BOOL, ECPG_SQLSTATE_DATATYPE_MISMATCH, NULL);
 
 					strcpy(mallocedval + strlen(mallocedval) - 1, "}");
 				}
-- 
GitLab