Skip to contentSkip to conversation

nfsdcltrack: don't use libsqlite3 functions that are too new

RFC PATCH In review Jeff Layton 2 participants 4 messages Nov 17, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index fb45c4af5edb..7cac89ef459f 100644
@@ -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
#2 lore raw

RFC PATCH 2/2 nfsdcltrack: use sqlite3_errmsg instead of sqlite3_errstr

In reply to Jeff Layton

sqlite3_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
index 7cac89ef459f..54cd7487920b 100644
@@ -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
#3 lore raw
In reply to Jeff Layton
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: 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(-)

Both have been committed! Happy Compiles! ;-)

steved.