diff options
-rw-r--r-- | Makefile.ftdump | 3 | ||||
-rw-r--r-- | ftdump.c | 28 | ||||
-rw-r--r-- | util.c | 28 | ||||
-rw-r--r-- | util.h | 11 |
4 files changed, 44 insertions, 26 deletions
diff --git a/Makefile.ftdump b/Makefile.ftdump index b70905a..2744a18 100644 --- a/Makefile.ftdump +++ b/Makefile.ftdump @@ -5,7 +5,8 @@ # FTDUMP_SRCS = \ - ftdump.c + ftdump.c \ + util.c FTDUMP_GEN_SRCS = @@ -11,36 +11,14 @@ #include <fdt.h> #include <libfdt_env.h> +#include "util.h" + #define FTDUMP_BUF_SIZE 65536 #define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1)) #define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a)))) #define GET_CELL(p) (p += 4, *((const uint32_t *)(p-4))) -static int is_printable_string(const void *data, int len) -{ - const char *s = data; - const char *ss; - - /* zero length is not */ - if (len == 0) - return 0; - - /* must terminate with zero */ - if (s[len - 1] != '\0') - return 0; - - ss = s; - while (*s && isprint(*s)) - s++; - - /* not zero, or not done yet */ - if (*s != '\0' || (s + 1 - ss) < len) - return 0; - - return 1; -} - static void print_data(const char *data, int len) { int i; @@ -50,7 +28,7 @@ static void print_data(const char *data, int len) if (len == 0) return; - if (is_printable_string(data, len)) { + if (util_is_printable_string(data, len)) { printf(" = \"%s\"", (const char *)data); } else if ((len % 4) == 0) { printf(" = <"); @@ -1,6 +1,9 @@ /* * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. * + * util_is_printable_string contributed by + * Pantelis Antoniou <pantelis.antoniou AT gmail.com> + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the @@ -17,6 +20,7 @@ * USA */ +#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <stdarg.h> @@ -57,3 +61,27 @@ char *join_path(const char *path, const char *name) memcpy(str+lenp, name, lenn+1); return str; } + +int util_is_printable_string(const void *data, int len) +{ + const char *s = data; + const char *ss; + + /* zero length is not */ + if (len == 0) + return 0; + + /* must terminate with zero */ + if (s[len - 1] != '\0') + return 0; + + ss = s; + while (*s && isprint(*s)) + s++; + + /* not zero, or not done yet */ + if (*s != '\0' || (s + 1 - ss) < len) + return 0; + + return 1; +} @@ -1,6 +1,8 @@ #ifndef _UTIL_H #define _UTIL_H +#include <stdarg.h> + /* * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. * @@ -53,4 +55,13 @@ static inline void *xrealloc(void *p, size_t len) extern char *xstrdup(const char *s); extern char *join_path(const char *path, const char *name); +/** + * Check a string of a given length to see if it is all printable and + * has a valid terminator. + * + * @param data The string to check + * @param len The string length including terminator + * @return 1 if a valid printable string, 0 if not */ +int util_is_printable_string(const void *data, int len); + #endif /* _UTIL_H */ |