ovsqlite

Julien ÉLIE julien at trigofacile.com
Tue Dec 22 08:08:09 UTC 2020


Hi Bo,

>> * In ovsqlite/ovsqlite.c, the ovsqlite_open() function does not use
>> its argument "mode". Is it expected?  (for read-only or writable
>> mode)
> 
> The current version doesn't care about the mode.  The right thing to
> do here is to include it in the initial handshake and let the server
> process ignore it.

OK, thanks for the addition.


>> I do not manage to link innd:
>> 
>> 21:47 iulius at denver ~/work/inn/trunk/innd% ../libtool --mode=link /home/iulius/work/gcc/gcc-10.1.0/bin/gcc -pie -Wl,-z,relro -Wl,-z,now -o innd art.o cc.o chan.o icd.o innd.o keywords.o lc.o nc.o newsfeeds.o ng.o perl.o proc.o python.o rc.o site.o status.o  util.o wip.o 
> /home/iulius/work/inn/trunk/storage/libstorage.la/home/iulius/work/inn/trunk/history/libinnhist.la/home/iulius/work/inn/trunk/lib/libinn.la  
> -ldb -lz /home/iulius/work/inn/trunk/lib/perl.o -Wl,-E  
> -fstack-protector -L/usr/local/lib  
> -L/usr/lib/x86_64-linux-gnu/perl/5.20/CORE -lperl -ldl -lm -lpthread 
> -lcrypt -L/usr/lib -lpython2.7 -lpthread -ldl -lutil -lm -L/usr/lib -lz 
> -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro
>> /home/iulius/work/inn/trunk/storage/.libs/libstorage.so: undefined reference to `unpack_now'
>> /home/iulius/work/inn/trunk/storage/.libs/libstorage.so: undefined reference to `unpack_later'
>> /home/iulius/work/inn/trunk/storage/.libs/libstorage.so: undefined reference to `pack_later'
>> /home/iulius/work/inn/trunk/storage/.libs/libstorage.so: undefined reference to `pack_now'
> 
> That is strange.  The pack_* and unpack_* functions are defined
> in ovsqlite-private.c, which should be in METHOD_SOURCES.

Works fine now...  I don't know why it did not work yesterday, but well, 
let's consider it's now fixed.


> I've collected fixes for the issues discussed so far:
>   * #ifdef HAVE_SQLITE3 in ovsqlite-private.c
>   * unused mode in ovsqlite_open
>   * static fill_search_buffer
>   * cast alignment warnings
> 
> Delta patch attached to this message (in git diff format, complain if that
> doesn't work for you).

Applied without problem, thanks!

Also, a minor patch to silent other warnings:

--- storage/ovsqlite/ovsqlite-server.c.OLD	2020-12-22 08:33:16.513653482 
+0100
+++ storage/ovsqlite/ovsqlite-server.c	2020-12-22 08:35:06.608337788 +0100
@@ -185,7 +185,7 @@
      sqlite3_clear_bindings(stmt);
  }

-client_t *add_client(
+static client_t *add_client(
      int sock)
  {
      client_t *result;
@@ -215,7 +215,7 @@
      return result;
  }

-void del_client(
+static void del_client(
      client_t *client)
  {
      size_t ix;
@@ -1766,12 +1766,10 @@
  static void do_finish_expire(
      client_t *client)
  {
-    buffer_t *reqbuf;
      int changes;
      int64_t groupid = 0;
      failvar_stmt_savepoint;

-    reqbuf = client->request;
      if (!finish_request(client))
          fail(response_bad_request);




I'm now encountering two shift-negative-value errors (building with 
"make warnings"):

ovsqlite/ovsqlite-server.c: Dans la fonction « pack_length »:
ovsqlite/ovsqlite-server.c:482:27: erreur: décalage vers la gauche d'une 
valeur négative [-Werror=shift-negative-value]
   482 |     *--walk = length | (~0<<(9-lenlen));
       |                           ^~
ovsqlite/ovsqlite-server.c: Dans la fonction « unpack_length »:
ovsqlite/ovsqlite-server.c:501:20: erreur: décalage vers la gauche d'une 
valeur négative [-Werror=shift-negative-value]
   501 |     length = c&~(~0<<(8-lenlen));
       |                    ^~
ovsqlite/ovsqlite-server.c: Dans la fonction « open_db »:
ovsqlite/ovsqlite-server.c:591:9: erreur: « SQLITE_PREPARE_PERSISTENT » 
non déclaré (première utilisation dans cette fonction)
   591 |         SQLITE_PREPARE_PERSISTENT,
       |         ^~~~~~~~~~~~~~~~~~~~~~~~~

For this last one, it seems that SQLITE_PREPARE_PERSISTENT was 
introduced in SQLite 3.20.0.
Should INN require that recent version (August 2017) at configure time?
Or #if SQLITE_VERSION_NUMBER >= 3020000 added there?
And also around sqlite3_prepare_v3 in sqlite-helper.c and use 
sqlite3_prepare_v2 before 3.20.0?

If I do not take into account the first 2 warnings, and manually use 
sqlite3_prepare_v2, the remaining of the build works fine with SQLite 
3.8.7.1 from Debian Jessie.  Good news!

-- 
Julien ÉLIE

« – Ouvre l'œil, et le bon !
   – L'autre, je peux pas encore l'ouvrir, je risque pas de me
     tromper ! » (Astérix)


More information about the inn-workers mailing list