projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'collectd-5.4' into collectd-5.5
[collectd.git]
/
src
/
daemon
/
common.c
diff --git
a/src/daemon/common.c
b/src/daemon/common.c
index
e396b79
..
b244808
100644
(file)
--- a/
src/daemon/common.c
+++ b/
src/daemon/common.c
@@
-312,44
+312,51
@@
int strsplit (char *string, char **fields, size_t size)
return ((int) i);
}
return ((int) i);
}
-int strjoin (char *
dst, size_t dst_len
,
+int strjoin (char *
buffer, size_t buffer_size
,
char **fields, size_t fields_num,
const char *sep)
{
char **fields, size_t fields_num,
const char *sep)
{
- size_t field_len;
+ size_t avail;
+ char *ptr;
size_t sep_len;
size_t sep_len;
- int i;
-
- memset (dst, '\0', dst_len);
+ size_t i;
- if (
fields_num <= 0
)
+ if (
(buffer_size < 1) || (fields_num <= 0)
)
return (-1);
return (-1);
+ memset (buffer, 0, buffer_size);
+ ptr = buffer;
+ avail = buffer_size - 1;
+
sep_len = 0;
if (sep != NULL)
sep_len = strlen (sep);
sep_len = 0;
if (sep != NULL)
sep_len = strlen (sep);
- for (i = 0; i <
(int)
fields_num; i++)
+ for (i = 0; i < fields_num; i++)
{
{
+ size_t field_len;
+
if ((i > 0) && (sep_len > 0))
{
if ((i > 0) && (sep_len > 0))
{
- if (
dst_len <=
sep_len)
+ if (
avail <
sep_len)
return (-1);
return (-1);
- strncat (dst, sep, dst_len);
- dst_len -= sep_len;
+ memcpy (ptr, sep, sep_len);
+ ptr += sep_len;
+ avail -= sep_len;
}
field_len = strlen (fields[i]);
}
field_len = strlen (fields[i]);
-
- if (dst_len <= field_len)
+ if (avail < field_len)
return (-1);
return (-1);
- strncat (dst, fields[i], dst_len);
- dst_len -= field_len;
+ memcpy (ptr, fields[i], field_len);
+ ptr += field_len;
+ avail -= field_len;
}
}
- return (strlen (dst));
+ assert (buffer[buffer_size - 1] == 0);
+ return (strlen (buffer));
}
int strsubstitute (char *str, char c_from, char c_to)
}
int strsubstitute (char *str, char c_from, char c_to)
@@
-507,7
+514,7
@@
int escape_slashes (char *buffer, size_t buffer_size)
buffer_len--;
}
buffer_len--;
}
- for (i = 0; i < buffer_len
- 1
; i++)
+ for (i = 0; i < buffer_len; i++)
{
if (buffer[i] == '/')
buffer[i] = '_';
{
if (buffer[i] == '/')
buffer[i] = '_';