Hi,

In sqlite3.c, I see that most of the times, but not always, all
members of the sqlite3_module struct are initialized:

static const sqlite3_module fts5Vocab = ...

static const sqlite3_module fts3Module = ...

static const sqlite3_module pragmaVtabModule = ...

...
  0,                           /* xRename - rename the table */
  0,                           /* xSavepoint */
  0,                           /* xRelease */
  0                            /* xRollbackTo */
};

But at some places, and also in shell.c and foci.c, the last 3 members
are not initialized.

static sqlite3_module stmtModule = {
...
  0,                         /* xRename */
};


The code says:

  /* The methods above are in version 1 of the sqlite_module object. Those
  ** below are for version 2 and greater. */
  int (*xSavepoint)(sqlite3_vtab *pVTab, int);
  int (*xRelease)(sqlite3_vtab *pVTab, int);
  int (*xRollbackTo)(sqlite3_vtab *pVTab, int);


Is this why these last three members are left uninitialized on
purpose, or is it irrelevant if they are initialized or not?
Just in case they *should* be initialized, a patch is attached (and
included at the end of this mail, just in case the attachment is
scrubbed).


How I reproduced the warnings:

auto.def:
  define EXTRA_CFLAGS "-Wmissing-field-initializers"

./configure
make

./src/db.c:125:1: warning: missing initializer for field ‘aHook’ of
‘struct DbLocalData’ [-Wmissing-field-initializers]

./src/foci.c:269:3: warning: missing initializer for field
‘xSavepoint’ of ‘sqlite3_module {aka struct sqlite3_module}’
[-Wmissing-field-initializers]

./src/sqlite3.c:175743:3: warning: missing initializer for field
‘xSavepoint’ of ‘sqlite3_module {aka struct sqlite3_module}’
[-Wmissing-field-initializers]

./src/sqlite3.c:204225:1: warning: missing initializer for field
‘xSavepoint’ of ‘sqlite3_module {aka struct sqlite3_module}’
[-Wmissing-field-initializers]

./src/shell.c:2114:1: warning: missing initializer for field
‘xSavepoint’ of ‘sqlite3_module {aka struct sqlite3_module}’
[-Wmissing-field-initializers]

Best Regards,
Johan


Index: src/db.c
==================================================================
--- src/db.c
+++ src/db.c
@@ -120,11 +120,11 @@
   } aHook[5];
   char *azDeleteOnFail[3];  /* Files to delete on a failure */
   char *azBeforeCommit[5];  /* Commands to run prior to COMMIT */
   int nBeforeCommit;        /* Number of entries in azBeforeCommit */
   int nPriorChanges;        /* sqlite3_total_changes() at transaction start */
-} db = {0, 0, 0, 0, 0, 0, };
+} db = {0};

 /*
 ** Arrange for the given file to be deleted on a failure.
 */
 void db_delete_on_failure(const char *zFilename){

Index: src/foci.c
==================================================================
--- src/foci.c
+++ src/foci.c
@@ -264,9 +264,12 @@
     0,                            /* xSync */
     0,                            /* xCommit */
     0,                            /* xRollback */
     0,                            /* xFindMethod */
     0,                            /* xRename */
+    0,                            /* xSavepoint */
+    0,                            /* xRelease */
+    0                             /* xRollbackTo */
   };
   sqlite3_create_module(db, "files_of_checkin", &foci_module, 0);
   return SQLITE_OK;
 }

Index: src/shell.c
==================================================================
--- src/shell.c
+++ src/shell.c
@@ -2109,10 +2109,13 @@
   0,                         /* xSync */
   0,                         /* xCommit */
   0,                         /* xRollback */
   0,                         /* xFindMethod */
   0,                         /* xRename */
+  0,                         /* xSavepoint */
+  0,                         /* xRelease */
+  0                          /* xRollbackTo */
 };

 #endif /* SQLITE_OMIT_VIRTUALTABLE */

 int sqlite3CompletionVtabInit(sqlite3 *db){

Index: src/sqlite3.c
==================================================================
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -175738,10 +175738,13 @@
     0,                            /* xSync */
     0,                            /* xCommit */
     0,                            /* xRollback */
     0,                            /* xFindMethod */
     0,                            /* xRename */
+    0,                            /* xSavepoint */
+    0,                            /* xRelease */
+    0                             /* xRollbackTo */
   };
   return sqlite3_create_module(db, "dbstat", &dbstat_module, 0);
 }
 #elif defined(SQLITE_ENABLE_DBSTAT_VTAB)
 SQLITE_PRIVATE int sqlite3DbstatRegister(sqlite3 *db){ return SQLITE_OK; }
@@ -204220,10 +204223,13 @@
   0,                         /* xSync */
   0,                         /* xCommit */
   0,                         /* xRollback */
   0,                         /* xFindMethod */
   0,                         /* xRename */
+  0,                         /* xSavepoint */
+  0,                         /* xRelease */
+  0                          /* xRollbackTo */
 };

 #endif /* SQLITE_OMIT_VIRTUALTABLE */

 SQLITE_PRIVATE int sqlite3StmtVtabInit(sqlite3 *db){
_______________________________________________
fossil-dev mailing list
fossil-dev@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/fossil-dev

Reply via email to