summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2009-03-26 09:20:16 -0700
committerJosh Stone <jistone@redhat.com>2009-03-26 11:00:25 -0700
commit4aa2079a01a62ff27cbe90f5eca38137035d34a8 (patch)
treec7f58c68f248f1e0a86e483390ae7500c0462edb
parentbc02f40984fede1c312ca33c0c3937b970e8da6d (diff)
downloadsystemtap-steved-4aa2079a01a62ff27cbe90f5eca38137035d34a8.tar.gz
systemtap-steved-4aa2079a01a62ff27cbe90f5eca38137035d34a8.tar.xz
systemtap-steved-4aa2079a01a62ff27cbe90f5eca38137035d34a8.zip
PR10001: Use the kernel's strlcpy & strlcat
We had our own implementations of these which were triggering gcc bug38480 in some particular cases. It's easier for us to use the kernel's strlcpy and strlcat anyway, which avoids the bug.
-rw-r--r--runtime/map.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/runtime/map.c b/runtime/map.c
index de25d6f3..190ba91b 100644
--- a/runtime/map.c
+++ b/runtime/map.c
@@ -38,27 +38,16 @@ static int int64_eq_p (int64_t key1, int64_t key2)
static void str_copy(char *dest, char *src)
{
- int len = 0;
- if (src) {
- len = strlen(src);
- if (len > MAP_STRING_LENGTH - 1)
- len = MAP_STRING_LENGTH - 1;
- memcpy (dest, src, len);
- }
- dest[len] = 0;
+ if (src)
+ strlcpy(dest, src, MAP_STRING_LENGTH);
+ else
+ *dest = 0;
}
static void str_add(void *dest, char *val)
{
char *dst = (char *)dest;
- int len = strlen(val);
- int len1 = strlen(dst);
- int num = MAP_STRING_LENGTH - 1 - len1;
-
- if (len > num)
- len = num;
- memcpy (&dst[len1], val, len);
- dst[len + len1] = 0;
+ strlcat(dst, val, MAP_STRING_LENGTH);
}
static int str_eq_p (char *key1, char *key2)