From: oetiker Date: Tue, 14 Oct 2008 19:08:56 +0000 (+0000) Subject: * this preserves principle of least surprise when dealing with files that X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=commitdiff_plain;h=837a4b7874724d57e7721e23f65ef57c998d9dff * this preserves principle of least surprise when dealing with files that are reachable via many path strings. i.e. when $PWD=/base/dir the following files are the same: /base/dir/x.rrd x.rrd ../dir/x.rrd * for performance, absolute paths (starting with '/') are not resolved. this reduces the number of stat(2) system calls. git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@1604 a5681a0c-68f1-0310-ab6d-d61299d08faa --- diff --git a/src/rrd_client.c b/src/rrd_client.c index 76fded0..5583bfe 100644 --- a/src/rrd_client.c +++ b/src/rrd_client.c @@ -518,6 +518,7 @@ int rrdc_update (const char *filename, int values_num, /* {{{ */ rrdc_response_t *res; int status; int i; + char file_path[PATH_MAX]; memset (buffer, 0, sizeof (buffer)); buffer_ptr = &buffer[0]; @@ -527,6 +528,10 @@ int rrdc_update (const char *filename, int values_num, /* {{{ */ if (status != 0) return (ENOBUFS); + /* change to absolute path for rrdcached */ + if (*filename != '/' && realpath(filename, file_path) != NULL) + filename = file_path; + status = buffer_add_string (filename, &buffer_ptr, &buffer_free); if (status != 0) return (ENOBUFS); @@ -562,6 +567,7 @@ int rrdc_flush (const char *filename) /* {{{ */ size_t buffer_size; rrdc_response_t *res; int status; + char file_path[PATH_MAX]; if (filename == NULL) return (-1); @@ -574,6 +580,10 @@ int rrdc_flush (const char *filename) /* {{{ */ if (status != 0) return (ENOBUFS); + /* change to absolute path for rrdcached */ + if (*filename != '/' && realpath(filename, file_path) != NULL) + filename = file_path; + status = buffer_add_string (filename, &buffer_ptr, &buffer_free); if (status != 0) return (ENOBUFS);