X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdaemon%2Fcommon.c;h=84d86608deac0cb14a40e3ada3d481f01dd5d16e;hb=a6f084608f38fa0ad66247f8e4b8ce7520292276;hp=e2b618fb3b8222366a88f8ea16f998d62c15eed3;hpb=cb314c15d51352ebcc4cfd2bbf1d6a3042c2402f;p=collectd.git diff --git a/src/daemon/common.c b/src/daemon/common.c index e2b618fb..84d86608 100644 --- a/src/daemon/common.c +++ b/src/daemon/common.c @@ -1,6 +1,6 @@ /** * collectd - src/common.c - * Copyright (C) 2005-2014 Florian octo Forster + * Copyright (C) 2005-2015 Florian octo Forster * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -264,6 +264,39 @@ ssize_t sread (int fd, void *buf, size_t count) return (0); } +int read_file (char const *file, void **ret_data, size_t *ret_data_size) +{ + int fd = open (file, O_RDONLY); + if (fd == -1) + return (-1); + + struct stat statbuf = { 0 }; + if (fstat (fd, &statbuf) == -1) + { + close (fd); + return (-1); + } + + size_t data_size = (size_t) statbuf.st_size; + void *data = malloc (data_size); + if (data == NULL) + { + close (fd); + return (-1); + } + + if (sread (fd, data, data_size) != 0) + { + close (fd); + sfree (data); + return (-1); + } + + close (fd); + *ret_data = data; + *ret_data_size = data_size; + return (0); +} /* }}} int read_file */ ssize_t swrite (int fd, const void *buf, size_t count) { @@ -968,18 +1001,17 @@ int format_values (char *ret, size_t ret_len, /* {{{ */ for (i = 0; i < ds->ds_num; i++) { if (ds->ds[i].type == DS_TYPE_GAUGE) - BUFFER_ADD (":%f", vl->values[i].gauge); + BUFFER_ADD (":"GAUGE_FORMAT, vl->values[i].gauge); else if (store_rates) { if (rates == NULL) rates = uc_get_rate (ds, vl); if (rates == NULL) { - WARNING ("format_values: " - "uc_get_rate failed."); + WARNING ("format_values: uc_get_rate failed."); return (-1); } - BUFFER_ADD (":%g", rates[i]); + BUFFER_ADD (":"GAUGE_FORMAT, rates[i]); } else if (ds->ds[i].type == DS_TYPE_COUNTER) BUFFER_ADD (":%llu", vl->values[i].counter); @@ -989,7 +1021,7 @@ int format_values (char *ret, size_t ret_len, /* {{{ */ BUFFER_ADD (":%"PRIu64, vl->values[i].absolute); else { - ERROR ("format_values plugin: Unknown data source type: %i", + ERROR ("format_values: Unknown data source type: %i", ds->ds[i].type); sfree (rates); return (-1);