Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=b0febc767ba62929600734bb1c4346372892d25e

commit b0febc767ba62929600734bb1c4346372892d25e
Author: Michel Hermier <herm...@frugalware.org>
Date:   Wed Nov 13 19:38:39 2013 +0100

libpacman: Use time_t instead of struct tm, first is an absolute time, while 
the other is a represented time.

diff --git a/lib/libpacman/db.c b/lib/libpacman/db.c
index 63e6d70..a313cbf 100644
--- a/lib/libpacman/db.c
+++ b/lib/libpacman/db.c
@@ -48,6 +48,7 @@
#include "db/syncdb.h"
#include "util/list.h"
#include "util/log.h"
+#include "util/time.h"
#include "util.h"
#include "error.h"
#include "server.h"
@@ -184,7 +185,7 @@ int _pacman_db_close(pmdb_t *db)
return db->ops->close(db);
}

-int _pacman_db_gettimestamp(pmdb_t *db, struct tm *timestamp)
+int _pacman_db_gettimestamp(pmdb_t *db, time_t *timestamp)
{
ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
ASSERT(timestamp != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
@@ -192,24 +193,29 @@ int _pacman_db_gettimestamp(pmdb_t *db, struct tm 
*timestamp)
if(db->ops->gettimestamp) {
return db->ops->gettimestamp(db, timestamp);
} else {
-               int ret;
char buffer[16];

-               if((ret = _pacman_db_getlastupdate(db, buffer)) == 0) {
-                       memset(timestamp, 0, sizeof(struct tm));
-                       strptime(buffer, "%Y%m%d%H%M%S", timestamp);
+               if(_pacman_db_getlastupdate(db, buffer) == 0) {
+                       struct tm ptimestamp = { 0 };
+
+                       if(strptime(buffer, "%Y%m%d%H%M%S", &ptimestamp) != 
NULL) {
+                               *timestamp = mktime(&ptimestamp);
+                               return 0;
+                       }
}
-               return ret;
+               return -1;
}
}

-int _pacman_db_settimestamp(pmdb_t *db, const struct tm *timestamp)
+/* A NULL timestamp means now per _pacman_localtime definition.
+ */
+int _pacman_db_settimestamp(pmdb_t *db, const time_t *timestamp)
{
char buffer[16];

ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));

-       strftime(buffer, sizeof(buffer), "%Y%m%d%H%M%S", timestamp);
+       strftime(buffer, sizeof(buffer), "%Y%m%d%H%M%S", 
_pacman_localtime(timestamp));
return _pacman_db_setlastupdate(db, buffer);
}

diff --git a/lib/libpacman/db.h b/lib/libpacman/db.h
index 3ec6407..397a6f3 100644
--- a/lib/libpacman/db.h
+++ b/lib/libpacman/db.h
@@ -40,10 +40,10 @@ typedef struct __pmdb_ops_t pmdb_ops_t;

struct __pmdb_ops_t {
pmlist_t *(*test)(pmdb_t *db);
-       int (*open)(pmdb_t *db, int flags, struct tm *timestamp);
+       int (*open)(pmdb_t *db, int flags, time_t *timestamp);
int (*close)(pmdb_t *db);

-       int (*gettimestamp)(pmdb_t *db, struct tm *timestamp);
+       int (*gettimestamp)(pmdb_t *db, time_t *timestamp);

/* Package iterator */
int (*rewind)(pmdb_t *db);
@@ -61,7 +61,7 @@ struct __pmdb_t {
char *path;
char treename[PATH_MAX];
void *handle;
-       struct tm cache_timestamp;
+       time_t cache_timestamp;
pmlist_t *pkgcache;
pmlist_t *grpcache;
pmlist_t *servers;
@@ -77,8 +77,8 @@ pmlist_t *_pacman_db_search(pmdb_t *db, pmlist_t *needles);
pmlist_t *_pacman_db_test(pmdb_t *db);
int _pacman_db_open(pmdb_t *db, int flags);
int _pacman_db_close(pmdb_t *db);
-int _pacman_db_gettimestamp(pmdb_t *db, struct tm *timestamp);
-int _pacman_db_settimestamp(pmdb_t *db, const struct tm *timestamp);
+int _pacman_db_gettimestamp(pmdb_t *db, time_t *timestamp);
+int _pacman_db_settimestamp(pmdb_t *db, const time_t *timestamp);
int _pacman_db_rewind(pmdb_t *db);
pmpkg_t *_pacman_db_readpkg(pmdb_t *db, unsigned int inforeq);
pmpkg_t *_pacman_db_scan(pmdb_t *db, const char *target, unsigned int inforeq);
diff --git a/lib/libpacman/db/localdb.c b/lib/libpacman/db/localdb.c
index 608b1eb..86e2602 100644
--- a/lib/libpacman/db/localdb.c
+++ b/lib/libpacman/db/localdb.c
@@ -107,7 +107,7 @@ pmlist_t *_pacman_localdb_test(pmdb_t *db)
}

static
-int _pacman_localdb_open(pmdb_t *db, int flags, struct tm *timestamp)
+int _pacman_localdb_open(pmdb_t *db, int flags, time_t *timestamp)
{
db->handle = opendir(db->path);
ASSERT(db->handle != NULL, RET_ERR(PM_ERR_DB_OPEN, -1));
diff --git a/lib/libpacman/db/syncdb.c b/lib/libpacman/db/syncdb.c
index 75567c4..7208ffd 100644
--- a/lib/libpacman/db/syncdb.c
+++ b/lib/libpacman/db/syncdb.c
@@ -142,7 +142,7 @@ int _pacman_syncdb_update(pmdb_t *db, int force)
}

static
-int _pacman_syncdb_open(pmdb_t *db, int flags, struct tm *timestamp)
+int _pacman_syncdb_open(pmdb_t *db, int flags, time_t *timestamp)
{
struct stat buf;
char dbpath[PATH_MAX];
diff --git a/lib/libpacman/pacman.c b/lib/libpacman/pacman.c
index bb122fa..1599f94 100644
--- a/lib/libpacman/pacman.c
+++ b/lib/libpacman/pacman.c
@@ -40,6 +40,7 @@
/* pacman-g2 */
#include "pacman.h"

+#include "db/syncdb.h"
#include "hash/md5.h"
#include "hash/sha1.h"
#include "util/list.h"
@@ -748,7 +749,6 @@ int pacman_trans_commit(pmlist_t **data)
int pacman_trans_release()
{
pmtrans_t *trans;
-       time_t t;

/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
@@ -771,8 +771,7 @@ int pacman_trans_release()

FREETRANS(handle->trans);

-       t = time(NULL);
-       _pacman_db_settimestamp(handle->db_local, localtime(&t));
+       _pacman_db_settimestamp(handle->db_local, NULL);

if(_pacman_handle_unlock(handle) != 0) {
return -1;
diff --git a/lib/libpacman/sync.c b/lib/libpacman/sync.c
index 7e44932..4efe654 100644
--- a/lib/libpacman/sync.c
+++ b/lib/libpacman/sync.c
@@ -229,7 +229,7 @@ static int pkg_cmp(const void *p1, const void *p2)
static int check_olddelay(void)
{
pmlist_t *i;
-       struct tm tm;
+       time_t tm;

if(!handle->olddelay) {
return(0);
@@ -240,7 +240,7 @@ static int check_olddelay(void)
if(_pacman_db_gettimestamp(db, &tm) == -1) {
continue;
}
-               if(difftime(time(NULL), mktime(&tm)) > handle->olddelay) {
+               if(difftime(time(NULL), tm) > handle->olddelay) {
_pacman_log(PM_LOG_WARNING, _("local copy of '%s' repo is too old"), 
db->treename);
}
}
diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c
index 015d91f..6cb40a5 100644
--- a/lib/libpacman/trans.c
+++ b/lib/libpacman/trans.c
@@ -49,12 +49,12 @@
static int check_oldcache(void)
{
pmdb_t *db = handle->db_local;
-       struct tm timestamp;
+       time_t timestamp;

if(_pacman_db_gettimestamp(db, &timestamp) == -1) {
return(-1);
}
-       if(difftime(mktime(&timestamp), mktime(&db->cache_timestamp)) != 0) {
+       if(difftime(timestamp, db->cache_timestamp) != 0) {
_pacman_log(PM_LOG_DEBUG, _("cache for '%s' repo is too old"), db->treename);
_pacman_db_free_pkgcache(db);
} else {
_______________________________________________
Frugalware-git mailing list
Frugalware-git@frugalware.org
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to