nfsdcltrack: don't use libsqlite3 functions that are too new
Subsystems (2)
cover nfsdcltrack: don't use libsqlite3 functions that are too new
Chuck was having a problem building nfsdcltrack on a RHEL6 era box, due to the fact that the libsqlite3 library there was too old. While we could play games with autoconf, it's just easier to use older library functions in these places so that we don't have to.
Jeff Layton (2):
nfsdcltrack: use sqlite3_close instead of sqlite3_close_v2
nfsdcltrack: use sqlite3_errmsg instead of sqlite3_errstr
utils/nfsdcltrack/sqlite.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
Signature · 1 line
2.1.0
RFC PATCH 1/2 nfsdcltrack: use sqlite3_close instead of sqlite3_close_v2
sqlite3_close_v2 wasn't added until v3.7.14 of libsqlite3 so this causes the build to fail vs. very old sqlite3 libs. Also, Chuck points out that the documentation says that sqlite3_close_v2 is intended for use with host languages that are garbage collected, and C isn't.
In practice, we shouldn't ever see sqlite3_close return SQLITE_BUSY here anyway since the program is single-threaded, so sqlite3_close should be fine.
--- utils/nfsdcltrack/sqlite.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
utils/nfsdcltrack/sqlite.c +1 -1
@@ -357,7 +357,7 @@ sqlite_prepare_dbh(const char *topdir)return ret; out_close: -sqlite3_close_v2 (dbh); +sqlite3_close (dbh); dbh =NULL ;return ret; }
Signature · 1 line
2.1.0
RFC PATCH 2/2 nfsdcltrack: use sqlite3_errmsg instead of sqlite3_errstr
In reply to Jeff Laytonsqlite3_errstr was only added in v3.7.15 of libsqlite3, which makes it difficult to build against earlier releases. Switch the code over to use sqlite3_errmsg instead.
--- utils/nfsdcltrack/sqlite.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
utils/nfsdcltrack/sqlite.c +6 -6
@@ -102,7 +102,7 @@ sqlite_query_schema_version(void) -1, &stmt, NULL);if (ret !=SQLITE_OK ) {xlog (L_ERROR ,"Unable to prepare select statement: %s" , -sqlite3_errstr (ret)); +sqlite3_errmsg (dbh)); ret =0 ; goto out; }
@@ -111,7 +111,7 @@ sqlite_query_schema_version(void) ret =sqlite3_step (stmt);if (ret !=SQLITE_ROW ) {xlog (L_ERROR ,"Select statement execution failed: %s" , -sqlite3_errstr (ret)); +sqlite3_errmsg (dbh)); ret =0 ; goto out; }
@@ -324,7 +324,7 @@ sqlite_prepare_dbh(const char *topdir) ret =sqlite3_busy_timeout (dbh,CLTRACK_SQLITE_BUSY_TIMEOUT );if (ret !=SQLITE_OK ) {xlog (L_ERROR ,"Unable to set sqlite busy timeout: %s" , -sqlite3_errstr (ret)); +sqlite3_errmsg (dbh)); goto out_close; }
@@ -574,21 +574,21 @@ sqlite_query_reclaiming(const time_t grace_start) "time < ? OR has_session != 1", -1, &stmt, NULL);if (ret !=SQLITE_OK ) {xlog (L_ERROR ,"%s: unable to prepare select statement: %s" , - __func__,sqlite3_errstr (ret)); + __func__,sqlite3_errmsg (dbh));return ret; } ret =sqlite3_bind_int64 (stmt,1 , (sqlite3_int64 )grace_start);if (ret !=SQLITE_OK ) {xlog (L_ERROR ,"%s: bind int64 failed: %s" , - __func__,sqlite3_errstr (ret)); + __func__,sqlite3_errmsg (dbh));return ret; } ret =sqlite3_step (stmt);if (ret !=SQLITE_ROW ) {xlog (L_ERROR ,"%s: unexpected return code from select: %s" , - __func__,sqlite3_errstr (ret)); + __func__,sqlite3_errmsg (dbh));return ret; }
Signature · 1 line
2.1.0
Quoted 5 lines · Jeff Layton
Chuck was having a problem building nfsdcltrack on a RHEL6 era box, due to the fact that the libsqlite3 library there was too old. While we could play games with autoconf, it's just easier to use older library functions in these places so that we don't have to.
Quoted 7 lines
Jeff Layton (2):
nfsdcltrack: usesqlite3_closeinstead ofsqlite3_close_v2
nfsdcltrack: usesqlite3_errmsginstead ofsqlite3_errstrutils/nfsdcltrack/sqlite.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
Both have been committed! Happy Compiles! ;-)
steved.