synk

synchronize files between hosts
Log | Files | Refs | README | LICENSE

commit c20b5a3174a84d877f65d2885ec681943e67751f
parent 5db306110bbecf1f8b8f7067ef64f244716af280
Author: Willy <willyatmailoodotorg>
Date:   Tue Aug 30 22:32:24 +0200

Get the most recent file from a list of peers

Diffstat:
synk.c | 19+++++++++++++++++++
1 file changed, 19 insertions(+), 0 deletions(-)
diff --git a/synk.c b/synk.c @@ -54,6 +54,7 @@ int serverloop(in_addr_t, in_port_t); struct peer_t *addpeer(struct peers_t *, in_addr_t, in_port_t); long gettimestamp(const char *path); int getpeermeta(struct peer_t *, struct metadata_t); +struct peer_t *freshestpeer(struct peers_t *); int syncfile(struct peers_t *, const char *); int flushpeers(struct peers_t *); @@ -274,10 +275,28 @@ getmetadata(struct metadata_t *meta, const char *fn) return 0; } +/* + * return a pointer to the peer having the highest timestamp. + * NULL is returned in case the local file is the most recent + */ +struct peer_t * +freshestpeer(struct peers_t *plist) +{ + long ts = -1; + struct peer_t *tmp = NULL; + struct peer_t *freshest = NULL; + SLIST_FOREACH(tmp, plist, entries) { + if (tmp->meta.mtime > ts) { + freshest = tmp; + ts = tmp->meta.mtime; + } } + printf("LATEST: %s\n", inet_ntoa(freshest->peer.sin_addr)); + return freshest; +} return 0; }