# --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: package/.../csync2/csync2-2.0-rc1-upstream-fixes-b7490b4.patch # Copyright (C) 2011 The OpenSDE Project # # More information can be found in the files COPYING and README. # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms # of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # --- SDE-COPYRIGHT-NOTE-END --- From e5190e7660a7aff9f435c224b5852d825c1148fe Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 11:15:38 +0100 Subject: [PATCH 1/9] fix inetd protocol breakage Don't csync_debug(0,...) to often, it breaks protocol on inetd, because with inetd, stderr and stdout point to the same socket. Any "status" or "progress" or "debug" message printed to stderr ends up on the socket, and is interpreted as protocol error by the client. So don't do that. --- daemon.c | 18 +++++++++--------- 1 files changed, 9 insertions(+), 9 deletions(-) diff --git a/daemon.c b/daemon.c index 57dfe49..4fadb73 100644 --- a/daemon.c +++ b/daemon.c @@ -119,11 +119,11 @@ int csync_file_backup(const char *filename) int fd_in, fd_out, i; int lastSlash; mode_t mode; - csync_debug(0, "backup\n"); + csync_debug(1, "backup\n"); // Skip generation of directories rc = stat(filename, &buf); if (S_ISDIR(buf.st_mode)) { - csync_debug(0, "directory. Skip generation \n"); + csync_debug(1, "directory. Skip generation \n"); return 0; } @@ -149,7 +149,7 @@ int csync_file_backup(const char *filename) backup_filename[bak_dir_len+i] = 0; - csync_debug(0, "mkdir %s \n", backup_filename); + csync_debug(1, "mkdir %s \n", backup_filename); mkdir(backup_filename, mode); // Dont check the empty string. @@ -175,7 +175,7 @@ int csync_file_backup(const char *filename) snprintf(backup_otherfilename+bak_dir_len+filename_len, 10, ".%d", i); rc = rename(backup_filename, backup_otherfilename); - csync_debug(0, "renaming backup files '%s' to '%s'. rc = %d\n", backup_filename, backup_otherfilename, rc); + csync_debug(1, "renaming backup files '%s' to '%s'. rc = %d\n", backup_filename, backup_otherfilename, rc); } @@ -192,11 +192,11 @@ int csync_file_backup(const char *filename) return 1; } - csync_debug(0,"Copying data from %s to backup file %s \n", filename, backup_filename); + csync_debug(1,"Copying data from %s to backup file %s \n", filename, backup_filename); - int rc = csync_copy_file(fd_in, fd_out); + rc = csync_copy_file(fd_in, fd_out); if (rc != 0) { - csync_debug(0, "csync_backup error 2\n"); + csync_debug(1, "csync_backup error 2\n"); snprintf(error_buffer, 1024, "Write error while backing up '%s': %s\n", @@ -208,10 +208,10 @@ int csync_file_backup(const char *filename) // return 1; } csync_setBackupFileStatus(backup_filename, bak_dir_len); - csync_debug(0, "csync_backup loop end\n"); + csync_debug(1, "csync_backup loop end\n"); } } - csync_debug(0, "csync_backup end\n"); + csync_debug(1, "csync_backup end\n"); return 0; } -- 1.7.2.3 From 2d459f6cab22b9c4f682b02b6b21e12cf27c23df Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 11:43:02 +0100 Subject: [PATCH 2/9] fix recursive check for deleted files Fix breakage by 448e725a61cdb869b825cacce08f0974e2a4a408: just dropping "or 1" (for "give me all you have") because of "ERROR: argument of OR must be type boolean, not type integer" is wrong: it results in "give me just the exact match" ;-( Correct fix: "OR TRUE". --- check.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/check.c b/check.c index fc3a05b..6d64c3a 100644 --- a/check.c +++ b/check.c @@ -215,7 +215,7 @@ void csync_check_del(const char *file, int recursive, int init_run) if ( recursive ) { if ( !strcmp(file, "/") ) - ASPRINTF(&where_rec, "") + ASPRINTF(&where_rec, "OR TRUE") else ASPRINTF(&where_rec, "UNION ALL SELECT filename from file where filename > '%s/' " "and filename < '%s0'", -- 1.7.2.3 From aec0438822f65d902b79446196112e0a7dae9efe Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 12:50:02 +0000 Subject: [PATCH 3/9] fix compiler warnings about statement without effect (ASPRINTF macro) ASPRINTF and VASPRINTF macros are used used everywhere as "void", so make it void. do { ... } while (0) makes it accept a ; at the end, which is better practice, I think. --- check.c | 4 ++-- csync2.c | 12 ++++++------ csync2.h | 20 +++++++++----------- db.c | 20 ++++++++++---------- db_mysql.c | 2 +- db_postgres.c | 6 +++--- getrealfn.c | 4 ++-- prefixsubst.c | 4 ++-- 8 files changed, 35 insertions(+), 37 deletions(-) diff --git a/check.c b/check.c index 6d64c3a..1de56f8 100644 --- a/check.c +++ b/check.c @@ -215,11 +215,11 @@ void csync_check_del(const char *file, int recursive, int init_run) if ( recursive ) { if ( !strcmp(file, "/") ) - ASPRINTF(&where_rec, "OR TRUE") + ASPRINTF(&where_rec, "OR TRUE"); else ASPRINTF(&where_rec, "UNION ALL SELECT filename from file where filename > '%s/' " "and filename < '%s0'", - url_encode(file), url_encode(file)) + url_encode(file), url_encode(file)); } SQL_BEGIN("Checking for removed files", diff --git a/csync2.c b/csync2.c index e683c61..d079c85 100644 --- a/csync2.c +++ b/csync2.c @@ -588,7 +588,7 @@ int main(int argc, char ** argv) cfgname = strdup(url_decode(para)); } if ( !*cfgname ) { - ASPRINTF(&file_config, ETCDIR "/csync2.cfg") + ASPRINTF(&file_config, ETCDIR "/csync2.cfg"); } else { int i; @@ -600,7 +600,7 @@ int main(int argc, char ** argv) return mode != MODE_INETD; } - ASPRINTF(&file_config, ETCDIR "/csync2_%s.cfg", cfgname) + ASPRINTF(&file_config, ETCDIR "/csync2_%s.cfg", cfgname); } csync_debug(2, "Config-File: %s\n", file_config); @@ -735,11 +735,11 @@ found_a_group:; char *where_rec = ""; if ( !strcmp(realname, "/") ) - ASPRINTF(&where_rec, "or 1") + ASPRINTF(&where_rec, "or 1"); else ASPRINTF(&where_rec, "UNION ALL SELECT filename from file where filename > '%s/' " "and filename < '%s0'", - url_encode(pfname), url_encode(pfname)) + url_encode(pfname), url_encode(pfname)); SQL_BEGIN("Adding dirty entries recursively", "SELECT filename FROM file WHERE filename = '%s' %s", @@ -761,11 +761,11 @@ found_a_group:; if ( recursive ) { if ( !strcmp(realname, "/") ) - ASPRINTF(&where_rec, "or 1") + ASPRINTF(&where_rec, "or 1"); else ASPRINTF(&where_rec, "or (filename > '%s/' " "and filename < '%s0')", - url_encode(realname), url_encode(realname)) + url_encode(realname), url_encode(realname)); } SQL("Mark file as to be forced", diff --git a/csync2.h b/csync2.h index 57431c1..1310582 100644 --- a/csync2.h +++ b/csync2.h @@ -37,22 +37,20 @@ #define DB_SCHEMA_VERSION 0 -/* asprintf with test for no memory. Use these macros without trailing ';' */ +/* asprintf with test for no memory */ -#define ASPRINTF(s, fmt, ...) {\ - int __ret;\ - if ((__ret = asprintf(s, fmt, ##__VA_ARGS__)) < 0) \ +#define ASPRINTF(s, fmt, ...) do {\ + int __ret = asprintf(s, fmt, ##__VA_ARGS__);\ + if (__ret < 0) \ csync_fatal("Out of memory in asprintf at %s:%d\n", __FILE__, __LINE__);\ - __ret;\ -} +} while (0) -#define VASPRINTF(s, fmt, args) {\ - int __ret;\ - if ((__ret = vasprintf(s, fmt, args)) < 0) \ +#define VASPRINTF(s, fmt, args) do {\ + int __ret = vasprintf(s, fmt, args);\ + if (__ret < 0) \ csync_fatal("Out of memory in vasprintf at %s:%d\n", __FILE__, __LINE__);\ - __ret;\ -} +} while (0) /* action.c */ diff --git a/db.c b/db.c index d6a58c6..68848b3 100644 --- a/db.c +++ b/db.c @@ -172,7 +172,7 @@ void csync_db_sql(const char *err, const char *fmt, ...) int rc, busyc = 0; va_start(ap, fmt); - VASPRINTF(&sql, fmt, ap) + VASPRINTF(&sql, fmt, ap); va_end(ap); in_sql_query++; @@ -204,7 +204,7 @@ void* csync_db_begin(const char *err, const char *fmt, ...) int rc, busyc = 0; char *ppTail; va_start(ap, fmt); - VASPRINTF(&sql, fmt, ap) + VASPRINTF(&sql, fmt, ap); va_end(ap); in_sql_query++; @@ -309,25 +309,25 @@ char *db_default_database(char *dbdir, char *myhostname, char *cfg_name) #if defined(HAVE_SQLITE3) if (cfg_name[0] != '\0') - ASPRINTF(&db, "sqlite3://%s/%s_%s" DBEXTENSION, dbdir, myhostname, cfgname) + ASPRINTF(&db, "sqlite3://%s/%s_%s" DBEXTENSION, dbdir, myhostname, cfgname); else - ASPRINTF(&db, "sqlite3://%s/%s" DBEXTENSION, dbdir, myhostname) + ASPRINTF(&db, "sqlite3://%s/%s" DBEXTENSION, dbdir, myhostname); #elif defined(HAVE_SQLITE) if (cfg_name[0] != '\0') - ASPRINTF(&db, "sqlite2://%s/%s_%s" DBEXTENSION, dbdir, myhostname, cfgname) + ASPRINTF(&db, "sqlite2://%s/%s_%s" DBEXTENSION, dbdir, myhostname, cfgname); else - ASPRINTF(&db, "sqlite2://%s/%s" DBEXTENSION, dbdir, myhostname) + ASPRINTF(&db, "sqlite2://%s/%s" DBEXTENSION, dbdir, myhostname); #elif defined(HAVE_MYSQL) if (cfg_name[0] != '\0') - ASPRINTF(&db, "mysql://root@localhost/csync2_%s_%s" DBEXTENSION, myhostname, cfgname) + ASPRINTF(&db, "mysql://root@localhost/csync2_%s_%s" DBEXTENSION, myhostname, cfgname); else - ASPRINTF(&db, "mysql://root@localhost/csync2_%s" DBEXTENSION, myhostname) + ASPRINTF(&db, "mysql://root@localhost/csync2_%s" DBEXTENSION, myhostname); #elif defined(HAVE_POSTGRES) if (cfg_name[0] != '\0') - ASPRINTF(&db, "pgsql://root@localhost/csync2_%s_%s" DBEXTENSION, myhostname, cfgname) + ASPRINTF(&db, "pgsql://root@localhost/csync2_%s_%s" DBEXTENSION, myhostname, cfgname); else - ASPRINTF(&db, "pgsql://root@localhost/csync2_%s" DBEXTENSION, myhostname) + ASPRINTF(&db, "pgsql://root@localhost/csync2_%s" DBEXTENSION, myhostname); #else #error "No database backend available. Please install either libpg, libmysqlclient or libsqlite, reconfigure and recompile" diff --git a/db_mysql.c b/db_mysql.c index c15a219..1b6d09e 100644 --- a/db_mysql.c +++ b/db_mysql.c @@ -140,7 +140,7 @@ int db_mysql_open(const char *file, db_conn_p *conn_p) if (f.mysql_real_connect_fn(db, host, user, pass, database, port, unix_socket, 0) == NULL) { if (f.mysql_errno_fn(db) == ER_BAD_DB_ERROR) { if (f.mysql_real_connect_fn(db, host, user, pass, NULL, port, unix_socket, 0) != NULL) { - ASPRINTF(&create_database_statement, "create database %s", database) + ASPRINTF(&create_database_statement, "create database %s", database); csync_debug(2, "creating database %s\n", database); if (f.mysql_query_fn(db, create_database_statement) != 0) diff --git a/db_postgres.c b/db_postgres.c index 13a7a41..b40bdfb 100644 --- a/db_postgres.c +++ b/db_postgres.c @@ -140,7 +140,7 @@ int db_postgres_open(const char *file, db_conn_p *conn_p) return rc; ASPRINTF(&pg_conn_info, "host='%s' user='%s' password='%s' dbname='%s' port=%d", - host, user, pass, database, port) + host, user, pass, database, port); pg_conn = f.PQconnectdb_fn(pg_conn_info); if (pg_conn == NULL) @@ -151,7 +151,7 @@ int db_postgres_open(const char *file, db_conn_p *conn_p) free(pg_conn_info); ASPRINTF(&pg_conn_info, "host='%s' user='%s' password='%s' dbname='postgres' port=%d", - host, user, pass, port) + host, user, pass, port); pg_conn = f.PQconnectdb_fn(pg_conn_info); if (pg_conn == NULL) @@ -186,7 +186,7 @@ int db_postgres_open(const char *file, db_conn_p *conn_p) free(pg_conn_info); ASPRINTF(&pg_conn_info, "host='%s' user='%s' password='%s' dbname='%s' port=%d", - host, user, pass, database, port) + host, user, pass, database, port); pg_conn = f.PQconnectdb_fn(pg_conn_info); if (pg_conn == NULL) diff --git a/getrealfn.c b/getrealfn.c index 1f6840c..b2bc0b7 100644 --- a/getrealfn.c +++ b/getrealfn.c @@ -54,7 +54,7 @@ char *getrealfn(const char *filename) if ( *tempfn != '/' ) { char *t2, *t1 = my_get_current_dir_name(); - ASPRINTF(&t2, "%s/%s", t1, tempfn) + ASPRINTF(&t2, "%s/%s", t1, tempfn); free(t1); free(tempfn); tempfn = t2; @@ -111,7 +111,7 @@ char *getrealfn(const char *filename) if ( !chdir(tempfn) ) { char *t2, *t1 = my_get_current_dir_name(); if ( st_mark ) { - ASPRINTF(&t2, "%s/%s", t1, st_mark+1) + ASPRINTF(&t2, "%s/%s", t1, st_mark+1); free(tempfn); free(t1); tempfn = t2; } else { free(tempfn); tempfn = t1; diff --git a/prefixsubst.c b/prefixsubst.c index 9fc1067..d003bb5 100644 --- a/prefixsubst.c +++ b/prefixsubst.c @@ -46,7 +46,7 @@ const char *prefixsubst(const char *in) ringbuff_counter = (ringbuff_counter+1) % RINGBUFF_LEN; if (ringbuff[ringbuff_counter]) free(ringbuff[ringbuff_counter]); - ASPRINTF(&ringbuff[ringbuff_counter], "%s%s", p->path, path) + ASPRINTF(&ringbuff[ringbuff_counter], "%s%s", p->path, path); return ringbuff[ringbuff_counter]; } } @@ -79,7 +79,7 @@ const char *prefixencode(const char *filename) { ringbuff_counter = (ringbuff_counter+1) % RINGBUFF_LEN; if (ringbuff[ringbuff_counter]) free(ringbuff[ringbuff_counter]); - ASPRINTF(&ringbuff[ringbuff_counter], "%%%s%%%s", p->name, filename+p_len) + ASPRINTF(&ringbuff[ringbuff_counter], "%%%s%%%s", p->name, filename+p_len); return ringbuff[ringbuff_counter]; } } -- 1.7.2.3 From 2cb983a1ccf36b0d5b6d117e8e1e8770d8e3e013 Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 13:14:11 +0000 Subject: [PATCH 4/9] suppress compiler warning about unused yyinput/yyunput --- cfgfile_scanner.l | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/cfgfile_scanner.l b/cfgfile_scanner.l index 345a45b..5e93f7c 100644 --- a/cfgfile_scanner.l +++ b/cfgfile_scanner.l @@ -25,9 +25,13 @@ #define MAX_INCLUDE_DEPTH 10 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; int include_stack_ptr = 0; + +#define YY_NO_INPUT 1 +#define YY_NO_UNPUT 1 %} %option noyywrap yylineno +%option nounput %x STRING INCL %% -- 1.7.2.3 From d9b8e2fbfc8cf99e3a9a920e06a4e349c9ebebeb Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 13:20:29 +0000 Subject: [PATCH 5/9] fix compiler warnings about unused or uninitialized variables --- conn.c | 2 +- daemon.c | 3 +-- rsync.c | 2 -- update.c | 1 - 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/conn.c b/conn.c index 113d5d9..3f06005 100644 --- a/conn.c +++ b/conn.c @@ -52,7 +52,7 @@ int conn_connect(const char *peername) { struct addrinfo hints; struct addrinfo *result, *rp; - int sfd, s, on = 1; + int sfd, s; /* Obtain address(es) matching host/port */ memset(&hints, 0, sizeof(struct addrinfo)); diff --git a/daemon.c b/daemon.c index 4fadb73..98a5b47 100644 --- a/daemon.c +++ b/daemon.c @@ -117,7 +117,7 @@ int csync_file_backup(const char *filename) char backup_filename[bak_dir_len + filename_len + 10]; char backup_otherfilename[bak_dir_len + filename_len + 10]; int fd_in, fd_out, i; - int lastSlash; + int lastSlash = 0; mode_t mode; csync_debug(1, "backup\n"); // Skip generation of directories @@ -343,7 +343,6 @@ int verify_peername(const char *name, address_t *peeraddr) sa_family_t af = peeraddr->sa.sa_family; struct addrinfo hints; struct addrinfo *result, *rp; - size_t len; int try_mapped_ipv4; int s; diff --git a/rsync.c b/rsync.c index eed2d85..86482ee 100644 --- a/rsync.c +++ b/rsync.c @@ -506,9 +506,7 @@ int csync_rs_patch(const char *filename) int backup_errno; rs_stats_t stats; rs_result result; - char buffer[512]; char *errstr = "?"; - int rc; char tmpfname[MAXPATHLEN], newfname[MAXPATHLEN]; csync_debug(3, "Csync2 / Librsync: csync_rs_patch('%s')\n", filename); diff --git a/update.c b/update.c index f747dd9..b2c2b85 100644 --- a/update.c +++ b/update.c @@ -544,7 +544,6 @@ void csync_update_host(const char *peername, struct textlist *tl_mod = 0, **last_tn=&tl; char *current_name = 0; struct stat st; - char *myname ; SQL_BEGIN("Get files for host from dirty table", "SELECT filename, myname, forced FROM dirty WHERE peername = '%s' " "ORDER by filename ASC", url_encode(peername)) -- 1.7.2.3 From ec538733e9ccf2688b16592ce9579fa4e859f4fc Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 13:22:22 +0000 Subject: [PATCH 6/9] fix compiler warnings about signedness or other type mismatch --- conn.c | 6 +++--- csync2.c | 4 ++-- csync2.h | 2 +- db_sqlite.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/conn.c b/conn.c index 3f06005..8dda10d 100644 --- a/conn.c +++ b/conn.c @@ -395,7 +395,7 @@ int conn_raw_read(void *buf, size_t count) return 0; } -void conn_debug(const char *name, const unsigned char*buf, size_t count) +void conn_debug(const char *name, const char*buf, size_t count) { int i; @@ -458,9 +458,9 @@ void conn_printf(const char *fmt, ...) conn_write(buffer, size); } -int conn_gets(char *s, int size) +size_t conn_gets(char *s, size_t size) { - int i=0; + size_t i=0; while (iprivate; - const char *result = f.sqlite3_column_text_fn(sqlite_stmt, column); + const unsigned char *result = f.sqlite3_column_text_fn(sqlite_stmt, column); /* error handling */ - return result; + return (const char*)result; } #if defined(HAVE_SQLITE3) -- 1.7.2.3 From 763561c6313e02c2ac90a8f043e84d25547f7c21 Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 13:23:06 +0000 Subject: [PATCH 7/9] fix compiler warnings about implicit function declarations --- csync2.h | 4 ++-- db_api.c | 5 +++++ db_api.h | 5 +++++ db_sqlite2.h | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/csync2.h b/csync2.h index 6032240..5240d15 100644 --- a/csync2.h +++ b/csync2.h @@ -113,9 +113,8 @@ extern void* csync_db_begin(const char *err, const char *fmt, ...); extern int csync_db_next(void *vmx, const char *err, int *pN, const char ***pazValue, const char ***pazColName); extern void csync_db_fin(void *vmx, const char *err); -#if defined(HAVE_LIBSQLITE3) extern const void * csync_db_colblob(void *stmtx,int col); -#endif +extern char *db_default_database(char *dbdir, char *myhostname, char *cfg_name); #define SQL(e, s, ...) csync_db_sql(e, s, ##__VA_ARGS__) @@ -203,6 +202,7 @@ extern void csync_remove_old(); /* daemon.c */ extern void csync_daemon_session(); +extern int csync_copy_file(int fd_in, int fd_out); /* getrealfn.c */ diff --git a/db_api.c b/db_api.c index f35abee..af5591c 100644 --- a/db_api.c +++ b/db_api.c @@ -12,6 +12,11 @@ #include #include "db_api.h" +#include "db_mysql.h" +#include "db_postgres.h" +#include "db_sqlite.h" +#include "db_sqlite2.h" + #define DEADLOCK_MESSAGE \ "Database backend is exceedingly busy => Terminating (requesting retry).\n" diff --git a/db_api.h b/db_api.h index ed5d6d1..eab627b 100644 --- a/db_api.h +++ b/db_api.h @@ -54,4 +54,9 @@ int db_stmt_get_column_int(db_stmt_p stmt, int column); int db_stmt_next (db_stmt_p stmt); int db_stmt_close(db_stmt_p stmt); +void db_set_logger(db_conn_p conn, void (*logger)(int lv, const char *fmt, ...)); +int db_schema_version(db_conn_p db); +int db_upgrade_to_schema(db_conn_p db, int version); +const char *db_errmsg(db_conn_p conn); + #endif diff --git a/db_sqlite2.h b/db_sqlite2.h index 24b2c32..79336a4 100644 --- a/db_sqlite2.h +++ b/db_sqlite2.h @@ -1,6 +1,6 @@ -#ifndef DB_SQLITE_H -#define DB_SQLITE_H +#ifndef DB_SQLITE2_H +#define DB_SQLITE2_H /* public */ int db_sqlite2_open(const char *file, db_conn_p *conn_p); -- 1.7.2.3 From 6d534181223d3fa06f2875373c5884c3c7ed5556 Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 13:23:44 +0000 Subject: [PATCH 8/9] fix compiler warning about assignment discards qualifier from pointer target type --- daemon.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) diff --git a/daemon.c b/daemon.c index 98a5b47..0e35ff9 100644 --- a/daemon.c +++ b/daemon.c @@ -321,13 +321,11 @@ typedef union address { const char *csync_inet_ntop(address_t *addr) { char buf[INET6_ADDRSTRLEN]; - char *pretty_print = NULL; sa_family_t af = addr->sa.sa_family; - pretty_print = inet_ntop(af, + return inet_ntop(af, af == AF_INET ? (void*)&addr->sa_in.sin_addr : af == AF_INET6 ? (void*)&addr->sa_in6.sin6_addr : NULL, - &buf, sizeof(buf)); - return pretty_print; + buf, sizeof(buf)); } /* -- 1.7.2.3 From b7490b4d2f9069e4e364c9f4824956ade4bad691 Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Wed, 9 Feb 2011 13:24:51 +0000 Subject: [PATCH 9/9] fix compiler warning about empty snprintf format --- daemon.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/daemon.c b/daemon.c index 0e35ff9..2c054ed 100644 --- a/daemon.c +++ b/daemon.c @@ -170,8 +170,7 @@ int csync_file_backup(const char *filename) if (i != 1) snprintf(backup_filename+bak_dir_len+filename_len, 10, ".%d", i-1); - else - snprintf(backup_filename+bak_dir_len+filename_len, 10, ""); + backup_filename[bak_dir_len+filename_len] = '\0'; snprintf(backup_otherfilename+bak_dir_len+filename_len, 10, ".%d", i); rc = rename(backup_filename, backup_otherfilename); -- 1.7.2.3