src/utils_cmd_putval.[ch]: Allow identifiers to include spaces.
[collectd.git] / bindings / perl / Collectd / Unixsock.pm
index cd910ed..c136221 100644 (file)
@@ -134,6 +134,22 @@ sub _parse_identifier
        return ($ident);
 } # _parse_identifier
 
+sub _escape_argument
+{
+       my $string = shift;
+
+       if ($string =~ m/^\w+$/)
+       {
+               return ("$string");
+       }
+
+       $string =~ s#\\#\\\\#g;
+       $string =~ s#"#\\"#g;
+       $string = "\"$string\"";
+
+       return ($string);
+}
+
 =head1 PUBLIC METHODS
 
 =over 4
@@ -175,7 +191,7 @@ sub getval
        my %args = @_;
 
        my $status;
-       my $fh = $obj->{'sock'} or confess;
+       my $fh = $obj->{'sock'} or confess ('object has no filehandle');
        my $msg;
        my $identifier;
 
@@ -183,7 +199,7 @@ sub getval
 
        $identifier = _create_identifier (\%args) or return;
 
-       $msg = "GETVAL $identifier\n";
+       $msg = 'GETVAL ' . _escape_argument ($identifier) . "\n";
        #print "-> $msg";
        send ($fh, $msg, 0) or confess ("send: $!");
 
@@ -240,7 +256,8 @@ sub putval
 
        if (defined $args{'interval'})
        {
-               $interval = ' interval=' . $args{'interval'};
+               $interval = ' interval='
+               . _escape_argument ($args{'interval'});
        }
 
        $identifier = _create_identifier (\%args) or return;
@@ -260,7 +277,10 @@ sub putval
                $values = join (':', $time, map { defined ($_) ? $_ : 'U' } (@{$args{'values'}}));
        }
 
-       $msg = "PUTVAL $identifier$interval $values\n";
+       $msg = 'PUTVAL '
+       . _escape_argument ($identifier)
+       . $interval
+       . ' ' . _escape_argument ($values) . "\n";
        #print "-> $msg";
        send ($fh, $msg, 0) or confess ("send: $!");
        $msg = undef;
@@ -477,14 +497,8 @@ sub flush
                        {
                                return;
                        }
-                       if ($ident_str =~ m/ /)
-                       {
-                               $ident_str =~ s#\\#\\\\#g;
-                               $ident_str =~ s#"#\\"#g;
-                               $ident_str = "\"$ident_str\"";
-                       }
 
-                       $msg .= " identifier=$ident_str";
+                       $msg .= ' identifier=' . _escape_argument ($ident_str);
                }
        }