]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/nfsdcld/sqlite.c
nfsdcld: add function to remove unreclaimed client records
[nfs-utils.git] / utils / nfsdcld / sqlite.c
index 01bba1a13c276d80aef95a0af7ea43e3ade6cd6b..9e357741fee7deef3b83ed4bbed50389322622fe 100644 (file)
@@ -38,6 +38,7 @@
 #include "config.h"
 #endif /* HAVE_CONFIG_H */
 
+#include <dirent.h>
 #include <errno.h>
 #include <event.h>
 #include <stdbool.h>
@@ -360,3 +361,30 @@ out_err:
        sqlite3_finalize(stmt);
        return ret;
 }
+
+/*
+ * remove any client records that were not reclaimed since grace_start.
+ */
+int
+sqlite_remove_unreclaimed(time_t grace_start)
+{
+       int ret;
+       char *err = NULL;
+
+       ret = snprintf(buf, sizeof(buf), "DELETE FROM clients WHERE time < %ld",
+                       grace_start);
+       if (ret < 0) {
+               return ret;
+       } else if ((size_t)ret >= sizeof(buf)) {
+               ret = -EINVAL;
+               return ret;
+       }
+
+       ret = sqlite3_exec(dbh, buf, NULL, NULL, &err);
+       if (ret != SQLITE_OK)
+               xlog(L_ERROR, "%s: delete failed: %s", __func__, err);
+
+       xlog(D_GENERAL, "%s: returning %d", __func__, ret);
+       sqlite3_free(err);
+       return ret;
+}