Browse Source

Split out is_printable_string() into util.c

This useful function is split out so it will be available to programs
other than ftdump.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: David Gibson <david@gibson.dropbear.id.au>
main
Simon Glass 13 years ago committed by Jon Loeliger
parent
commit
492f9d5de7
  1. 3
      Makefile.ftdump
  2. 28
      ftdump.c
  3. 28
      util.c
  4. 11
      util.h

3
Makefile.ftdump

@ -5,7 +5,8 @@
# #


FTDUMP_SRCS = \ FTDUMP_SRCS = \
ftdump.c ftdump.c \
util.c


FTDUMP_GEN_SRCS = FTDUMP_GEN_SRCS =



28
ftdump.c

@ -11,36 +11,14 @@
#include <fdt.h> #include <fdt.h>
#include <libfdt_env.h> #include <libfdt_env.h>


#include "util.h"

#define FTDUMP_BUF_SIZE 65536 #define FTDUMP_BUF_SIZE 65536


#define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1)) #define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1))
#define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a)))) #define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a))))
#define GET_CELL(p) (p += 4, *((const uint32_t *)(p-4))) #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) static void print_data(const char *data, int len)
{ {
int i; int i;
@ -50,7 +28,7 @@ static void print_data(const char *data, int len)
if (len == 0) if (len == 0)
return; return;


if (is_printable_string(data, len)) { if (util_is_printable_string(data, len)) {
printf(" = \"%s\"", (const char *)data); printf(" = \"%s\"", (const char *)data);
} else if ((len % 4) == 0) { } else if ((len % 4) == 0) {
printf(" = <"); printf(" = <");

28
util.c

@ -1,6 +1,9 @@
/* /*
* Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. * 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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the * published by the Free Software Foundation; either version 2 of the
@ -17,6 +20,7 @@
* USA * USA
*/ */


#include <ctype.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
@ -57,3 +61,27 @@ char *join_path(const char *path, const char *name)
memcpy(str+lenp, name, lenn+1); memcpy(str+lenp, name, lenn+1);
return str; 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;
}

11
util.h

@ -1,6 +1,8 @@
#ifndef _UTIL_H #ifndef _UTIL_H
#define _UTIL_H #define _UTIL_H


#include <stdarg.h>

/* /*
* Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. * 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 *xstrdup(const char *s);
extern char *join_path(const char *path, const char *name); 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 */ #endif /* _UTIL_H */

Loading…
Cancel
Save