]> arthur.barton.de Git - netdata.git/commitdiff
optimization of rrdset_strncpy_name() and avoid truncating the last character when...
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Wed, 18 May 2016 19:06:32 +0000 (22:06 +0300)
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Wed, 18 May 2016 19:06:32 +0000 (22:06 +0300)
src/rrd.c
src/rrd.h

index ee23da0c2ebec91184c52d947d1fc46bcba7d2f3..0d1bed54b4babd8a3e8b1fc1b8838713e6976439 100644 (file)
--- a/src/rrd.c
+++ b/src/rrd.c
@@ -235,15 +235,18 @@ const char *rrddim_algorithm_name(int chart_type)
 // ----------------------------------------------------------------------------
 // chart names
 
-char *rrdset_strncpy_name(char *to, const char *from, int length)
+char *rrdset_strncpyz_name(char *to, const char *from, size_t length)
 {
-       int i;
-       for(i = 0; i < length && from[i] ;i++) {
-               if(from[i] == '.' || isalpha(from[i]) || isdigit(from[i])) to[i] = from[i];
-               else to[i] = '_';
+       char c, *p = to;
+
+       while (length-- && (c = *from++)) {
+               if(c != '.' && !isalnum(c))
+                       c = '_';
+
+               *p++ = c;
        }
-       if(i < length) to[i] = '\0';
-       to[length - 1] = '\0';
+
+       *p = '\0';
 
        return to;
 }
@@ -258,7 +261,7 @@ void rrdset_set_name(RRDSET *st, const char *name)
        char n[RRD_ID_LENGTH_MAX + 1];
 
        snprintfz(n, RRD_ID_LENGTH_MAX, "%s.%s", st->type, name);
-       rrdset_strncpy_name(b, n, CONFIG_MAX_VALUE);
+       rrdset_strncpyz_name(b, n, CONFIG_MAX_VALUE);
        st->name = config_get(st->id, "name", b);
        st->hash_name = simple_hash(st->name);
 
@@ -277,7 +280,7 @@ char *rrdset_cache_dir(const char *id)
 
        char b[FILENAME_MAX + 1];
        char n[FILENAME_MAX + 1];
-       rrdset_strncpy_name(b, id, FILENAME_MAX);
+       rrdset_strncpyz_name(b, id, FILENAME_MAX);
 
        snprintfz(n, FILENAME_MAX, "%s/%s", cache_dir, b);
        ret = config_get(id, "cache directory", n);
@@ -468,7 +471,7 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, long multiplier
 
        debug(D_RRD_CALLS, "Adding dimension '%s/%s'.", st->id, id);
 
-       rrdset_strncpy_name(filename, id, FILENAME_MAX);
+       rrdset_strncpyz_name(filename, id, FILENAME_MAX);
        snprintfz(fullfilename, FILENAME_MAX, "%s/%s.db", st->cache_dir, filename);
        if(rrd_memory_mode != RRD_MEMORY_MODE_RAM) rd = (RRDDIM *)mymmap(fullfilename, size, ((rrd_memory_mode == RRD_MEMORY_MODE_MAP)?MAP_SHARED:MAP_PRIVATE), 1);
        if(rd) {
index 60eeeb04ffe65226cd565567d65dd3c92d7e4cc4..c97fe7217a4d76db2c1ae173571f7697d9a8acc0 100644 (file)
--- a/src/rrd.h
+++ b/src/rrd.h
@@ -257,7 +257,7 @@ extern pthread_rwlock_t rrdset_root_rwlock;
 // ----------------------------------------------------------------------------
 // RRD SET functions
 
-extern char *rrdset_strncpy_name(char *to, const char *from, int length);
+extern char *rrdset_strncpyz_name(char *to, const char *from, size_t length);
 extern void rrdset_set_name(RRDSET *st, const char *name);
 
 extern char *rrdset_cache_dir(const char *id);