]> granicus.if.org Git - strace/commitdiff
tests: add hexdump_strdup function to libtests
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 20 Jan 2016 05:26:43 +0000 (05:26 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 20 Jan 2016 15:24:41 +0000 (15:24 +0000)
* tests/tests.h (hexdump_strdup): New prototype.
* tests/hexdump_strdup.c: New file.
* tests/Makefile.am (libtests_a_SOURCES): Add it.

tests/Makefile.am
tests/hexdump_strdup.c [new file with mode: 0644]
tests/tests.h

index 0b79ed6bfabd510af1fd90200ad2a34e78d1591a..cf4e673b4eb6a8c08e0474d3c970a169ce17180e 100644 (file)
@@ -41,8 +41,9 @@ AM_CPPFLAGS = $(ARCH_MFLAGS) \
 AM_LDFLAGS = $(ARCH_MFLAGS)
 
 libtests_a_SOURCES = \
-       get_page_size.c \
        error_msg.c \
+       get_page_size.c \
+       hexdump_strdup.c \
        tail_alloc.c \
        tests.h \
        tprintf.c \
diff --git a/tests/hexdump_strdup.c b/tests/hexdump_strdup.c
new file mode 100644 (file)
index 0000000..e1910fa
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Make a hexdump copy of C string
+ *
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+const char *
+hexdump_strdup(const char *src)
+{
+       size_t src_len = strlen(src);
+       size_t dst_size = 3 * src_len + 1;
+       assert(dst_size > src_len);
+
+       char *dst = malloc(dst_size);
+       if (!dst)
+               perror_msg_and_fail("malloc(%zu)", dst_size);
+
+       char *p = dst;
+       const unsigned char *usrc = (const unsigned char *) src;
+       for (; *usrc; ++usrc) {
+               unsigned int c = *usrc;
+               *(p++) = ' ';
+               *(p++) = "0123456789abcdef"[c >> 4];
+               *(p++) = "0123456789abcdef"[c & 0xf];
+       }
+       *p = '\0';
+
+       return dst;
+}
index e69e4d1a68564f643e6e781edc6ebf6a3ed2c550..de8302adb9f87d46d76857fca4ff19c438f3b7bf 100644 (file)
@@ -63,6 +63,9 @@ void *tail_memdup(const void *, const size_t)
 void tprintf(const char *, ...)
        ATTRIBUTE_FORMAT((printf, 1, 2));
 
+/* Make a hexdump copy of C string */
+const char *hexdump_strdup(const char *);
+
 # define SKIP_MAIN_UNDEFINED(arg) \
        int main(void) { error_msg_and_skip("undefined: %s", arg); }