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 @@ @@ -5,7 +5,8 @@
#

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

FTDUMP_GEN_SRCS =


28
ftdump.c

@ -11,36 +11,14 @@ @@ -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) @@ -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(" = <");

28
util.c

@ -1,6 +1,9 @@ @@ -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 @@ @@ -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) @@ -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;
}

11
util.h

@ -1,6 +1,8 @@ @@ -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) @@ -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 */

Loading…
Cancel
Save