There is not guarantee that "%llu" is appropriate to print "u_int64_t". See: http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long-int --- src/mysql_plugin.c | 14 +++++++------- src/pgsql_plugin.c | 35 +++++++++++++++-------------------- src/pmacct-defines.h | 4 ++++ src/pmacct.c | 50 ++++++++++++++++++-------------------------------- src/print_plugin.c | 23 ++++++++--------------- src/sql_common.c | 20 +++----------------- src/sqlite3_plugin.c | 12 +++++------- 7 files changed, 60 insertions(+), 98 deletions(-)
diff --git a/src/mysql_plugin.c b/src/mysql_plugin.c index 03a1925..5faed2e 100644 --- a/src/mysql_plugin.c +++ b/src/mysql_plugin.c @@ -319,13 +319,13 @@ int MY_cache_dbop(struct DBdesc *db, struct db_cache *cache_elem, struct insert_ for (num = 0; set[num].type; num++) (*set[num].handler)(cache_elem, idata, num, &ptr_set, NULL); -#if defined HAVE_64BIT_COUNTERS - if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), ", %llu, %llu, %llu)", cache_elem->packet_counter, cache_elem->bytes_counter, cache_elem->flows_counter); - else snprintf(ptr_values, SPACELEFT(values_clause), ", %llu, %llu)", cache_elem->packet_counter, cache_elem->bytes_counter); -#else - if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), ", %lu, %lu, %lu)", cache_elem->packet_counter, cache_elem->bytes_counter, cache_elem->flows_counter); - else snprintf(ptr_values, SPACELEFT(values_clause), ", %lu, %lu)", cache_elem->packet_counter, cache_elem->bytes_counter); -#endif + if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), + ", %"PRIpmcounter", %"PRIpmcounter", %"PRIpmcounter")", + cache_elem->packet_counter, cache_elem->bytes_counter, + cache_elem->flows_counter); + else snprintf(ptr_values, + SPACELEFT(values_clause), ", %"PRIpmcounter", %"PRIpmcounter")", + cache_elem->packet_counter, cache_elem->bytes_counter); /* sending UPDATE query. Use an INSERT ... ON DUPLICATE KEY UPDATE ... */ if (!config.sql_dont_try_update) { diff --git a/src/pgsql_plugin.c b/src/pgsql_plugin.c index d1e9c55..8e07ff5 100644 --- a/src/pgsql_plugin.c +++ b/src/pgsql_plugin.c @@ -311,19 +311,15 @@ int PG_cache_dbop_copy(struct DBdesc *db, struct db_cache *cache_elem, struct in num++; } -#if defined HAVE_64BIT_COUNTERS - if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), "%s%llu%s%llu%s%llu\n", delim_buf, cache_elem->packet_counter, - delim_buf, cache_elem->bytes_counter, - delim_buf, cache_elem->flows_counter); - else snprintf(ptr_values, SPACELEFT(values_clause), "%s%llu%s%llu\n", delim_buf, cache_elem->packet_counter, - delim_buf, cache_elem->bytes_counter); -#else - if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), "%s%lu%s%lu%s%lu\n", delim_buf, cache_elem->packet_counter, - delim_buf, cache_elem->bytes_counter, - delim_buf, cache_elem->flows_counter); - else snprintf(ptr_values, SPACELEFT(values_clause), "%s%lu%s%lu\n", delim_buf, cache_elem->packet_counter, - delim_buf, cache_elem->bytes_counter); -#endif + if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), + "%s%"PRIpmcounter"%s%"PRIpmcounter"%s%"PRIpmcounter"\n", + delim_buf, cache_elem->packet_counter, + delim_buf, cache_elem->bytes_counter, + delim_buf, cache_elem->flows_counter); + else snprintf(ptr_values, SPACELEFT(values_clause), + "%s%"PRIpmcounter"%s%"PRIpmcounter"\n", + delim_buf, cache_elem->packet_counter, + delim_buf, cache_elem->bytes_counter); strncpy(sql_data, values_clause, sizeof(sql_data)); if (PQputCopyData(db->desc, sql_data, strlen(sql_data)) < 0) { // avoid strlen() @@ -386,13 +382,12 @@ int PG_cache_dbop(struct DBdesc *db, struct db_cache *cache_elem, struct insert_ if (config.sql_dont_try_update || (!PG_affected_rows(ret))) { /* UPDATE failed, trying with an INSERT query */ strncpy(sql_data, insert_clause, sizeof(sql_data)); -#if defined HAVE_64BIT_COUNTERS - if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), ", %llu, %llu, %llu)", cache_elem->packet_counter, cache_elem->bytes_counter, cache_elem->flows_counter); - else snprintf(ptr_values, SPACELEFT(values_clause), ", %llu, %llu)", cache_elem->packet_counter, cache_elem->bytes_counter); -#else - if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), ", %lu, %lu, %lu)", cache_elem->packet_counter, cache_elem->bytes_counter, cache_elem->flows_counter); - else snprintf(ptr_values, SPACELEFT(values_clause), ", %lu, %lu)", cache_elem->packet_counter, cache_elem->bytes_counter); -#endif + if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), + ", %"PRIpmcounter", %"PRIpmcounter", %"PRIpmcounter")", + cache_elem->packet_counter, cache_elem->bytes_counter, + cache_elem->flows_counter); + else snprintf(ptr_values, SPACELEFT(values_clause), ", %"PRIpmcounter", %"PRIpmcounter")", + cache_elem->packet_counter, cache_elem->bytes_counter); strncat(sql_data, values_clause, SPACELEFT(sql_data)); ret = PQexec(db->desc, sql_data); diff --git a/src/pmacct-defines.h b/src/pmacct-defines.h index c7db91d..7737a5d 100644 --- a/src/pmacct-defines.h +++ b/src/pmacct-defines.h @@ -19,6 +19,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <inttypes.h> + /* defines */ #define ARGS_NFACCTD "n:dDhP:b:f:F:c:m:p:r:s:S:L:l:v:o:O:uR" #define ARGS_SFACCTD "n:dDhP:b:f:F:c:m:p:r:s:S:L:l:v:o:O:uR" @@ -284,8 +286,10 @@ typedef u_int32_t pm_country_t; #if defined HAVE_64BIT_COUNTERS typedef u_int64_t pm_counter_t; +#define PRIpmcounter PRIu64 #else typedef u_int32_t pm_counter_t; +#define PRIpmcounter PRIu32 #endif /* Keep common NF_AS and NF_NET values aligned, ie. NF_[NET|AS]_KEEP == 0x00000001 */ diff --git a/src/pmacct.c b/src/pmacct.c index 46096a6..612183e 100644 --- a/src/pmacct.c +++ b/src/pmacct.c @@ -1705,25 +1705,25 @@ int main(int argc,char **argv) } #if defined HAVE_64BIT_COUNTERS - if (want_output == PRINT_OUTPUT_FORMATTED) printf("%-20llu ", acc_elem->pkt_num); - else if (want_output == PRINT_OUTPUT_CSV) printf("%llu,", acc_elem->pkt_num); + if (want_output == PRINT_OUTPUT_FORMATTED) printf("%-20"PRIpmcounter" ", acc_elem->pkt_num); + else if (want_output == PRINT_OUTPUT_CSV) printf("%"PRIpmcounter",", acc_elem->pkt_num); if (!have_wtc || (what_to_count & COUNT_FLOWS)) { - if (want_output == PRINT_OUTPUT_FORMATTED) printf("%-20llu ", acc_elem->flo_num); - else if (want_output == PRINT_OUTPUT_CSV) printf("%llu,", acc_elem->flo_num); + if (want_output == PRINT_OUTPUT_FORMATTED) printf("%-20"PRIpmcounter" ", acc_elem->flo_num); + else if (want_output == PRINT_OUTPUT_CSV) printf("%"PRIpmcounter",", acc_elem->flo_num); } - printf("%llu\n", acc_elem->pkt_len); + printf("%"PRIpmcounter"\n", acc_elem->pkt_len); #else - if (want_output == PRINT_OUTPUT_FORMATTED) printf("%-10lu ", acc_elem->pkt_num); - else if (want_output == PRINT_OUTPUT_CSV) printf("%lu,", acc_elem->pkt_num); + if (want_output == PRINT_OUTPUT_FORMATTED) printf("%-10"PRIpmcounter" ", acc_elem->pkt_num); + else if (want_output == PRINT_OUTPUT_CSV) printf("%"PRIpmcounter",", acc_elem->pkt_num); if (!have_wtc || (what_to_count & COUNT_FLOWS)) { - if (want_output == PRINT_OUTPUT_FORMATTED) printf("%-10lu ", acc_elem->flo_num); - else if (want_output == PRINT_OUTPUT_CSV) printf("%lu,", acc_elem->flo_num); + if (want_output == PRINT_OUTPUT_FORMATTED) printf("%-10"PRIpmcounter" ", acc_elem->flo_num); + else if (want_output == PRINT_OUTPUT_CSV) printf("%"PRIpmcounter",", acc_elem->flo_num); } - printf("%lu\n", acc_elem->pkt_len); + printf("%"PRIpmcounter"\n", acc_elem->pkt_len); #endif counter++; } @@ -1778,36 +1778,22 @@ int main(int argc,char **argv) num_counters += acc_elem->time_start.tv_sec; /* XXX: this field is used here to count how much entries we are accumulating */ } else { -#if defined HAVE_64BIT_COUNTERS /* print bytes */ - if (which_counter == 0) printf("%llu\n", acc_elem->pkt_len); + if (which_counter == 0) printf("%"PRIpmcounter"\n", acc_elem->pkt_len); /* print packets */ - else if (which_counter == 1) printf("%llu\n", acc_elem->pkt_num); + else if (which_counter == 1) printf("%"PRIpmcounter"\n", acc_elem->pkt_num); /* print packets+bytes+flows+num */ - else if (which_counter == 2) printf("%llu %llu %llu %lu\n", acc_elem->pkt_num, acc_elem->pkt_len, acc_elem->flo_num, acc_elem->time_start.tv_sec); + else if (which_counter == 2) printf("%"PRIpmcounter" %"PRIpmcounter" %"PRIpmcounter" %lu\n", acc_elem->pkt_num, acc_elem->pkt_len, acc_elem->flo_num, acc_elem->time_start.tv_sec); /* print flows */ - else if (which_counter == 3) printf("%llu\n", acc_elem->flo_num); -#else - if (which_counter == 0) printf("%lu\n", acc_elem->pkt_len); - else if (which_counter == 1) printf("%lu\n", acc_elem->pkt_num); - else if (which_counter == 2) printf("%lu %lu %lu %lu\n", acc_elem->pkt_num, acc_elem->pkt_len, acc_elem->flo_num, acc_elem->time_start.tv_sec); - else if (which_counter == 3) printf("%lu\n", acc_elem->flo_num); -#endif + else if (which_counter == 3) printf("%"PRIpmcounter"\n", acc_elem->flo_num); } } if (sum_counters) { -#if defined HAVE_64BIT_COUNTERS - if (which_counter == 0) printf("%llu\n", bcnt); /* print bytes */ - else if (which_counter == 1) printf("%llu\n", pcnt); /* print packets */ - else if (which_counter == 2) printf("%llu %llu %llu %u\n", pcnt, bcnt, fcnt, num_counters); /* print packets+bytes+flows+num */ - else if (which_counter == 3) printf("%llu\n", fcnt); /* print flows */ -#else - if (which_counter == 0) printf("%lu\n", bcnt); - else if (which_counter == 1) printf("%lu\n", pcnt); - else if (which_counter == 2) printf("%lu %lu %lu %u\n", pcnt, bcnt, fcnt, num_counters); - else if (which_counter == 3) printf("%lu\n", fcnt); -#endif + if (which_counter == 0) printf("%"PRIpmcounter"\n", bcnt); /* print bytes */ + else if (which_counter == 1) printf("%"PRIpmcounter"\n", pcnt); /* print packets */ + else if (which_counter == 2) printf("%"PRIpmcounter" %"PRIpmcounter" %"PRIpmcounter" %u\n", pcnt, bcnt, fcnt, num_counters); /* print packets+bytes+flows+num */ + else if (which_counter == 3) printf("%"PRIpmcounter"\n", fcnt); /* print flows */ } } else if (want_class_table) { diff --git a/src/print_plugin.c b/src/print_plugin.c index 66ef9d8..ed651ce 100644 --- a/src/print_plugin.c +++ b/src/print_plugin.c @@ -652,14 +652,13 @@ void P_cache_purge(struct chained_cache *queue[], int index) if (config.what_to_count_2 & COUNT_SAMPLING_RATE) fprintf(f, "%-7u ", data->sampling_rate); #if defined HAVE_64BIT_COUNTERS - fprintf(f, "%-20llu ", queue[j]->packet_counter); - fprintf(f, "%-20llu ", queue[j]->flow_counter); - fprintf(f, "%llu\n", queue[j]->bytes_counter); + fprintf(f, "%-20"PRIpmcounter" ", queue[j]->packet_counter); + fprintf(f, "%-20"PRIpmcounter" ", queue[j]->flow_counter); #else - fprintf(f, "%-10lu ", queue[j]->packet_counter); - fprintf(f, "%-10lu ", queue[j]->flow_counter); - fprintf(f, "%lu\n", queue[j]->bytes_counter); + fprintf(f, "%-10"PRIpmcounter" ", queue[j]->packet_counter); + fprintf(f, "%-10"PRIpmcounter" ", queue[j]->flow_counter); #endif + fprintf(f, "%"PRIpmcounter"\n", queue[j]->bytes_counter); } else if (f && config.print_output == PRINT_OUTPUT_CSV) { if (config.what_to_count & COUNT_ID) fprintf(f, "%llu,", data->id); @@ -753,15 +752,9 @@ void P_cache_purge(struct chained_cache *queue[], int index) #endif if (config.what_to_count_2 & COUNT_SAMPLING_RATE) fprintf(f, "%u,", data->sampling_rate); -#if defined HAVE_64BIT_COUNTERS - fprintf(f, "%llu,", queue[j]->packet_counter); - fprintf(f, "%llu,", queue[j]->flow_counter); - fprintf(f, "%llu\n", queue[j]->bytes_counter); -#else - fprintf(f, "%lu,", queue[j]->packet_counter); - fprintf(f, "%lu,", queue[j]->flow_counter); - fprintf(f, "%lu\n", queue[j]->bytes_counter); -#endif + fprintf(f, "%"PRIpmcounter",", queue[j]->packet_counter); + fprintf(f, "%"PRIpmcounter",", queue[j]->flow_counter); + fprintf(f, "%"PRIpmcounter"\n", queue[j]->bytes_counter); } } diff --git a/src/sql_common.c b/src/sql_common.c index 8e667b1..11f0f29 100644 --- a/src/sql_common.c +++ b/src/sql_common.c @@ -2321,33 +2321,19 @@ int sql_compose_static_set(int have_flows) { int set_primitives=0; -#if defined HAVE_64BIT_COUNTERS - strncpy(set[set_primitives].string, "SET packets=packets+%llu, bytes=bytes+%llu", SPACELEFT(set[set_primitives].string)); + strncpy(set[set_primitives].string, "SET packets=packets+%"PRIpmcounter", bytes=bytes+%"PRIpmcounter, + SPACELEFT(set[set_primitives].string)); set[set_primitives].type = COUNT_COUNTERS; set[set_primitives].handler = count_counters_setclause_handler; set_primitives++; if (have_flows) { strncpy(set[set_primitives].string, ", ", SPACELEFT(set[set_primitives].string)); - strncat(set[set_primitives].string, "flows=flows+%llu", SPACELEFT(set[set_primitives].string)); + strncat(set[set_primitives].string, "flows=flows+%"PRIpmcounter, SPACELEFT(set[set_primitives].string)); set[set_primitives].type = COUNT_FLOWS; set[set_primitives].handler = count_flows_setclause_handler; set_primitives++; } -#else - strncpy(set[set_primitives].string, "SET packets=packets+%u, bytes=bytes+%u", SPACELEFT(set[set_primitives].string)); - set[set_primitives].type = COUNT_COUNTERS; - set[set_primitives].handler = count_counters_setclause_handler; - set_primitives++; - - if (have_flows) { - strncpy(set[set_primitives].string, ", ", SPACELEFT(set[set_primitives].string)); - strncat(set[set_primitives].string, "flows=flows+%u", SPACELEFT(set[set_primitives].string)); - set[set_primitives].type = COUNT_FLOWS; - set[set_primitives].handler = count_flows_setclause_handler; - set_primitives++; - } -#endif if (config.what_to_count & COUNT_TCPFLAGS) { strncpy(set[set_primitives].string, ", ", SPACELEFT(set[set_primitives].string)); diff --git a/src/sqlite3_plugin.c b/src/sqlite3_plugin.c index 74af3f9..010e38b 100644 --- a/src/sqlite3_plugin.c +++ b/src/sqlite3_plugin.c @@ -327,13 +327,11 @@ int SQLI_cache_dbop(struct DBdesc *db, struct db_cache *cache_elem, struct inser if (config.sql_dont_try_update || (sqlite3_changes(db->desc) == 0)) { /* UPDATE failed, trying with an INSERT query */ -#if defined HAVE_64BIT_COUNTERS - if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), ", %llu, %llu, %llu)", cache_elem->packet_counter, cache_elem->bytes_counter, cache_elem->flows_counter); - else snprintf(ptr_values, SPACELEFT(values_clause), ", %llu, %llu)", cache_elem->packet_counter, cache_elem->bytes_counter); -#else - if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), ", %lu, %lu, %lu)", cache_elem->packet_counter, cache_elem->bytes_counter, cache_elem->flows_counter); - else snprintf(ptr_values, SPACELEFT(values_clause), ", %lu, %lu)", cache_elem->packet_counter, cache_elem->bytes_counter); -#endif + if (have_flows) snprintf(ptr_values, SPACELEFT(values_clause), + ", %"PRIpmcounter", %"PRIpmcounter", %"PRIpmcounter")", + cache_elem->packet_counter, cache_elem->bytes_counter, cache_elem->flows_counter); + else snprintf(ptr_values, SPACELEFT(values_clause), ", %"PRIpmcounter", %"PRIpmcounter")", + cache_elem->packet_counter, cache_elem->bytes_counter); strncpy(sql_data, insert_clause, sizeof(sql_data)); strncat(sql_data, values_clause, SPACELEFT(sql_data)); -- 1.7.10.4 _______________________________________________ pmacct-discussion mailing list http://www.pmacct.net/#mailinglists