From f491bbc527febc11c4f3f2cf158735ae93a4e19a Mon Sep 17 00:00:00 2001
From: Michele Calgaro <michele.calgaro@yahoo.it>
Date: Sun, 2 Feb 2025 15:29:09 +0900
Subject: Fix FTBFS with gcc 15 and remove obsolete patch file. This resolves
 issue #90

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
---
 kexi/3rdparty/kexisql/src/patches/shell.c.patch | 217 ------------------------
 kexi/3rdparty/kexisql/src/shell.c               |  15 +-
 kexi/3rdparty/kexisql3/src/shell.c              |   9 +-
 3 files changed, 11 insertions(+), 230 deletions(-)
 delete mode 100644 kexi/3rdparty/kexisql/src/patches/shell.c.patch

diff --git a/kexi/3rdparty/kexisql/src/patches/shell.c.patch b/kexi/3rdparty/kexisql/src/patches/shell.c.patch
deleted file mode 100644
index 0d7d2dae8..000000000
--- a/kexi/3rdparty/kexisql/src/patches/shell.c.patch
+++ /dev/null
@@ -1,217 +0,0 @@
---- shell.c.orig/shell.c	2004-07-22 22:08:28.000000000 +0200
-+++ shell.c	2005-05-04 18:47:40.000000000 +0200
-@@ -12,7 +12,7 @@
- ** This file contains code to implement the "sqlite" command line
- ** utility for accessing SQLite databases.
- **
--** $Id: shell.c,v 1.93 2004/03/17 23:42:13 drh Exp $
-+** $Id: shell.c 409279 2005-05-04 15:23:02Z staniek $
- */
- #include <stdlib.h>
- #include <string.h>
-@@ -20,11 +20,19 @@
- #include "sqlite.h"
- #include <ctype.h>
- 
-+#if defined(_WIN32)
-+# include <io.h>
-+#endif
-+
- #if !defined(_WIN32) && !defined(WIN32) && !defined(__MACOS__)
- # include <signal.h>
- # include <pwd.h>
- # include <unistd.h>
- # include <sys/types.h>
-+
-+#define strnicmp strncasecmp
-+#define stricmp strcasecmp
-+
- #endif
- 
- #ifdef __MACOS__
-@@ -47,6 +55,12 @@
- # define stifle_history(X)
- #endif
- 
-+/* js */
-+char verboseDump = 0;
-+int nObjects = 0; /* used to count progress */
-+int curObjects = 0;
-+/* \js */
-+
- /* Make sure isatty() has a prototype.
- */
- extern int isatty();
-@@ -80,7 +94,28 @@
- /*
- ** Determines if a string is a number of not.
- */
--extern int sqliteIsNumber(const char*);
-+/* extern int sqliteIsNumber(const char*); */
-+static int isNumber(const unsigned char *z){
-+  if( *z=='-' || *z=='+' ) z++;
-+  if( !isdigit(*z) ){
-+    return 0;
-+  }
-+  z++;
-+  while( isdigit(*z) ){ z++; }
-+  if( *z=='.' ){
-+    z++;
-+    if( !isdigit(*z) ) return 0;
-+    while( isdigit(*z) ){ z++; }
-+  }
-+  if( *z=='e' || *z=='E' ){
-+    z++;
-+    if( *z=='+' || *z=='-' ) z++;
-+    if( !isdigit(*z) ) return 0;
-+    while( isdigit(*z) ){ z++; }
-+  }
-+  return *z==0;
-+}
-+
- 
- /*
- ** This routine reads a line of text from standard input, stores
-@@ -392,7 +427,7 @@
-         char *zSep = i>0 ? ",": "";
-         if( azArg[i]==0 ){
-           fprintf(p->out,"%sNULL",zSep);
--        }else if( sqliteIsNumber(azArg[i]) ){
-+        }else if( isNumber(azArg[i]) ){
-           fprintf(p->out,"%s%s",zSep, azArg[i]);
-         }else{
-           if( zSep[0] ) fprintf(p->out,"%s",zSep);
-@@ -452,10 +487,14 @@
- */
- static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
-   struct callback_data *p = (struct callback_data *)pArg;
-+  struct callback_data d2;
-   if( nArg!=3 ) return 1;
-   fprintf(p->out, "%s;\n", azArg[2]);
-   if( strcmp(azArg[1],"table")==0 ){
--    struct callback_data d2;
-+/* js */
-+	if (verboseDump)
-+		fprintf(stderr, "%%%d\n", (++curObjects * 100 / nObjects));
-+/* \js */
-     d2 = *p;
-     d2.mode = MODE_Insert;
-     d2.zDestTable = 0;
-@@ -542,6 +581,14 @@
-   int rc = 0;
-   char *azArg[50];
- 
-+/* js */
-+  sqlite_vm *pVm;
-+  char *errMsg;
-+	int ncolumns; /* OUT: Number of columns in result */
-+  const char **pazValue;  /* OUT: Column data */
-+  const char **pazColName; /* OUT: Column names and datatypes */
-+/* \js */
-+
-   /* Parse the input line into tokens.
-   */
-   while( zLine[i] && nArg<ArraySize(azArg) ){
-@@ -586,6 +633,24 @@
-   if( c=='d' && strncmp(azArg[0], "dump", n)==0 ){
-     char *zErrMsg = 0;
-     open_db(p);
-+
-+/* js */
-+if (SQLITE_OK!=sqlite_compile(p->db, "SELECT COUNT(1) FROM sqlite_master",
-+0, &pVm, &errMsg)) {
-+	fprintf(stderr, "%s\n", errMsg);
-+	exit(1);
-+}
-+if (SQLITE_ROW!=sqlite_step( pVm, &ncolumns, &pazValue, &pazColName )) {
-+	exit(1);
-+}
-+nObjects = atoi(pazValue[0]);
-+
-+if (SQLITE_OK!=sqlite_finalize( pVm, &errMsg)) {
-+	fprintf(stderr, "%s\n", errMsg);
-+	exit(1);
-+}
-+/* \js */
-+
-     fprintf(p->out, "BEGIN TRANSACTION;\n");
-     if( nArg==1 ){
-       sqlite_exec(p->db,
-@@ -812,8 +877,9 @@
-     data.showHeader = 0;
-     data.mode = MODE_Semi;
-     if( nArg>1 ){
--      extern int sqliteStrICmp(const char*,const char*);
--      if( sqliteStrICmp(azArg[1],"sqlite_master")==0 ){
-+/*      extern int sqliteStrICmp(const char*,const char*);
-+      if( sqliteStrICmp(azArg[1],"sqlite_master")==0 ){*/
-+      if( stricmp(azArg[1],"sqlite_master")==0 ){
-         char *new_argv[2], *new_colv[2];
-         new_argv[0] = "CREATE TABLE sqlite_master (\n"
-                       "  type text,\n"
-@@ -826,7 +892,8 @@
-         new_colv[0] = "sql";
-         new_colv[1] = 0;
-         callback(&data, 1, new_argv, new_colv);
--      }else if( sqliteStrICmp(azArg[1],"sqlite_temp_master")==0 ){
-+/*     }else if( sqliteStrICmp(azArg[1],"sqlite_temp_master")==0 ){*/
-+      }else if( stricmp(azArg[1],"sqlite_temp_master")==0 ){
-         char *new_argv[2], *new_colv[2];
-         new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n"
-                       "  type text,\n"
-@@ -997,10 +1064,11 @@
- ** as is the Oracle "/".
- */
- static int _is_command_terminator(const char *zLine){
--  extern int sqliteStrNICmp(const char*,const char*,int);
-+/*  extern int sqliteStrNICmp(const char*,const char*,int); */
-   while( isspace(*zLine) ){ zLine++; };
-   if( zLine[0]=='/' && _all_whitespace(&zLine[1]) ) return 1;  /* Oracle */
--  if( sqliteStrNICmp(zLine,"go",2)==0 && _all_whitespace(&zLine[2]) ){
-+/*  if( sqliteStrNICmp(zLine,"go",2)==0 && _all_whitespace(&zLine[2]) ){ */
-+  if( strnicmp(zLine,"go",2)==0 && _all_whitespace(&zLine[2]) ){
-     return 1;  /* SQL Server */
-   }
-   return 0;
-@@ -1210,7 +1278,7 @@
-   const char *zInitFile = 0;
-   char *zFirstCmd = 0;
-   int i;
--  extern int sqliteOsFileExists(const char*);
-+/*  extern int sqliteOsFileExists(const char*); */
- 
- #ifdef __MACOS__
-   argc = ccommand(&argv);
-@@ -1257,7 +1325,7 @@
-   ** files from being created if a user mistypes the database name argument
-   ** to the sqlite command-line tool.
-   */
--  if( sqliteOsFileExists(data.zDbFilename) ){
-+  if( access(data.zDbFilename, 0)==0 ){
-     open_db(&data);
-   }
- 
-@@ -1297,8 +1365,10 @@
-     }else if( strcmp(z,"-echo")==0 ){
-       data.echoOn = 1;
-     }else if( strcmp(z,"-version")==0 ){
--      printf("%s\n", sqlite_version);
-+      printf("%s\n", sqlite_libversion());
-       return 1;
-+    }else if( strcmp(z,"-verbose-dump")==0 ){
-+      verboseDump = 1;
-     }else if( strcmp(z,"-help")==0 ){
-       usage(1);
-     }else{
-@@ -1330,9 +1400,9 @@
-       char *zHome;
-       char *zHistory = 0;
-       printf(
--        "SQLite version %s\n"
-+        "SQLite version %s (bundled with Kexi)\n"
-         "Enter \".help\" for instructions\n",
--        sqlite_version
-+        sqlite_libversion()
-       );
-       zHome = find_home_dir();
-       if( zHome && (zHistory = malloc(strlen(zHome)+20))!=0 ){
diff --git a/kexi/3rdparty/kexisql/src/shell.c b/kexi/3rdparty/kexisql/src/shell.c
index 8158e5ea2..c60331552 100644
--- a/kexi/3rdparty/kexisql/src/shell.c
+++ b/kexi/3rdparty/kexisql/src/shell.c
@@ -20,10 +20,6 @@
 #include "sqlite.h"
 #include <ctype.h>
 
-#if defined(_WIN32)
-# include <io.h>
-#endif
-
 #if !defined(_WIN32) && !defined(WIN32) && !defined(__MACOS__)
 # include <signal.h>
 # include <pwd.h>
@@ -44,6 +40,13 @@
 # include <Folders.h>
 #endif
 
+#if defined(_WIN32) || defined(WIN32)
+/* Make sure isatty() has a prototype */
+extern int isatty(int);
+
+# include <io.h>
+#endif
+
 #if defined(HAVE_READLINE) && HAVE_READLINE==1
 # include <readline/readline.h>
 # include <readline/history.h>
@@ -61,10 +64,6 @@ int nObjects = 0; /* used to count progress */
 int curObjects = 0;
 /* \js */
 
-/* Make sure isatty() has a prototype.
-*/
-extern int isatty();
-
 /*
 ** The following is the open SQLite database.  We make a pointer
 ** to this database a static variable so that it can be accessed
diff --git a/kexi/3rdparty/kexisql3/src/shell.c b/kexi/3rdparty/kexisql3/src/shell.c
index 0f5809c57..9ba1198cb 100644
--- a/kexi/3rdparty/kexisql3/src/shell.c
+++ b/kexi/3rdparty/kexisql3/src/shell.c
@@ -28,7 +28,10 @@
 # include <sys/types.h>
 #endif
 
-#ifdef _WIN32
+#if defined(_WIN32) || defined(WIN32)
+/* Make sure isatty() has a prototype */
+extern int isatty(int);
+
 # include <io.h>
 #endif
 
@@ -52,10 +55,6 @@
 # define stifle_history(X)
 #endif
 
-/* Make sure isatty() has a prototype.
-*/
-extern int isatty();
-
 /*
 ** The following is the open SQLite database.  We make a pointer
 ** to this database a static variable so that it can be accessed
-- 
cgit v1.2.3

