readfile(filename, &buffer, 0);
if (rrd_test_error()) {
- const size_t len = strlen(rrd_get_error()) + DS_NAM_SIZE;
- char *err = (char *) malloc(len);
-
- snprintf(err, len, "[ERROR: %s]", rrd_get_error());
+ char err[4096];
+ snprintf(err, sizeof(err), "[ERROR %s]", rrd_get_error());
rrd_clear_error();
+
free(buffer);
- return err;
+ return stralloc(err);
} else {
return buffer;
}
return stralloc(calcpr[0]);
} else {
if (rrd_test_error()) {
- const size_t len = strlen(rrd_get_error()) + DS_NAM_SIZE;
- char *err = (char *) malloc(len);
- snprintf(err, len, "[ERROR: %s]", rrd_get_error());
+ char err[4096];
+ snprintf(err, sizeof(err), "[ERROR %s]", rrd_get_error());
rrd_clear_error();
- return err;
+
+ return stralloc(err);
}
}
return NULL;
last = rrd_last(argc, (char **) args - 1);
if (rrd_test_error()) {
- const size_t len = strlen(rrd_get_error()) + DS_NAM_SIZE;
- char *err = (char *) malloc(len);
- snprintf(err, len, "[ERROR: %s]", rrd_get_error());
+ char err[4096];
+ snprintf(err, sizeof(err), "[ERROR %s]", rrd_get_error());
rrd_clear_error();
+
free(buf);
- return err;
+ return stralloc(err);
}
tm_last = *localtime(&last);
strftime(buf, 254, args[1], &tm_last);
res = NULL;
status = request(client, buffer, buffer_size, &res);
- if (status != 0) {
- if (res && res->message) {
- rrd_set_error ("rrdcached@%s: %s", client->sd_path, res->message);
- response_free(res);
- }
- return (NULL);
- }
+ if (status != 0 || res->status < 0)
+ goto out_free_res;
+
data = cd = NULL;
for( l=0 ; l < res->lines_num ; l++ ) {
/* first extract the keyword */
cd = rrd_info_push(cd, sprintf_alloc("%s",k), itype, info);
if(!data) data = cd;
}
+
+out_free_res:
response_free (res);
return (data);
buffer[buffer_size - 1] = '\n';
res = NULL;
-
status = request(client, buffer, buffer_size, &res);
- if (status != 0) {
- rrd_set_error ("rrdcached@%s: %s", client->sd_path, res->message);
+ if (status != 0 || res->status < 0)
goto out_free_res;
- }
/* Handle the case where the list is empty, allocate
* a single byte zeroed string.
res = NULL;
status = request(client, buffer, buffer_size, &res);
- if (status != 0) {
- rrd_set_error ("rrdcached@%s: %s", client->sd_path, res->message);
+ if (status != 0)
+ return (-1);
+ if (res->status < 0) {
+ response_free (res);
return (-1);
}
+
lastup = atol(res->message);
response_free (res);
res = NULL;
status = request(client, buffer, buffer_size, &res);
- if (status != 0) {
- rrd_set_error ("rrdcached@%s: %s", client->sd_path, res->message);
+ if (status != 0)
+ return (-1);
+ if (res->status < 0) {
+ response_free (res);
return (-1);
}
+
firstup = atol(res->message);
response_free (res);
res = NULL;
status = request(client, buffer, buffer_size, &res);
- if (status != 0) {
- rrd_set_error ("rrdcached@%s: %s", client->sd_path, res->message);
+ if (status != 0)
return (-1);
- }
+
+ status = res->status;
response_free (res);
- return(0);
+ return(status);
} /* }}} int rrd_client_create_r2 */
int rrdc_create_r2(const char *filename, /* {{{ */
unsigned long pdp_step,
return (status);
}
status = res->status;
- if (status < 0)
- {
- rrd_set_error ("rrdcached@%s: %s", client->sd_path, res->message);
- response_free (res);
+ if (status < 0) {
+ response_free(res);
return (status);
}
+
/* }}} Send request */
ds_names = NULL;
char *error;
int remaining;
- error = strdup(rrd_get_error());
+ error = rrd_get_error();
remaining = options.argc - options.optind - 1;
rrd_set_error("Flushing of file \"%s\" failed: %s. Skipping "
"remaining %i file%s.", options.argv[i],
- ((! error) || (*error == '\0')) ? "unknown error" : error,
+ (*error == '\0') ? "unknown error" : error,
remaining, (remaining == 1) ? "" : "s");
- free(error);
break;
}
}
};
struct optparse options;
int opt;
- char *err = NULL;
optparse_init(&options, argc, argv);
} else {
if (opt_daemon) {
fprintf(stderr, "Error connecting to rrdcached");
- err = rrd_get_error();
-
- if (err)
- fprintf(stderr, ": %s", err);
+ if (rrd_test_error())
+ fprintf(stderr, ": %s", rrd_get_error());
fprintf(stderr, "\n");
free(opt_daemon);
rrd_file_t *rrd_file = NULL;
rrd_simple_file_t *rrd_simple_file = NULL;
size_t newfile_size = 0;
- size_t header_len, value_cnt, data_len;
/* Are we creating a new file? */
- if((rdwr & RRD_CREAT) && (rrd->stat_head != NULL))
+ if(rdwr & RRD_CREAT)
{
+ size_t header_len, value_cnt, data_len;
+
header_len = rrd_get_header_size(rrd);
value_cnt = 0;
goto out_close;
}
if (rdwr & RRD_READVALUES) {
- long d_offset = offset;
-
- __rrd_read(rrd->rrd_value, rrd_value_t,
- row_cnt * rrd->stat_head->ds_cnt);
+ __rrd_read(rrd->rrd_value, rrd_value_t,
+ row_cnt * rrd->stat_head->ds_cnt);
- rrd_file->header_len = d_offset;
- rrd_file->pos = d_offset;
+ if (rrd_seek(rrd_file, rrd_file->header_len, SEEK_SET) != 0)
+ goto out_close;
}
-
}
out_done:
rrdc_forget(in_filename);
rrd_clear_error();
- if (e && *e) {
+ if (e) {
rrd_set_error(e);
- }
- if (e) free(e);
-
+ free(e);
+ } else
+ rrd_set_error("error message was lost (out of memory)");
}
if (rrd_file) {
rrd_close(rrd_file);
if ((save_error = strdup(rrd_get_error())) != NULL) {
rrd_set_error("%s: %s", filename, save_error);
free(save_error);
- }
+ } else
+ rrd_set_error("error message was lost (out of memory)");
}
free(arg_copy);
break;