mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
nand: Sanitize ONFI strings.
[backport from linux commit 02f8c6aee8df3cdc935e9bdd4f2d020306035dbe] This is part of the synchronization with the nand driver to the Linux 3.0 state. Signed-off-by: Christian Hitz <christian.hitz@aizo.com> Cc: Scott Wood <scottwood@freescale.com> Signed-off-by: Scott Wood <scottwood@freescale.com>
This commit is contained in:
parent
ff8a8a7183
commit
5454ddbc9b
3 changed files with 65 additions and 1 deletions
|
@ -2477,10 +2477,29 @@ static void nand_set_defaults(struct nand_chip *chip, int busw)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_SYS_NAND_ONFI_DETECTION
|
||||
/*
|
||||
* sanitize ONFI strings so we can safely print them
|
||||
*/
|
||||
static void sanitize_string(char *s, size_t len)
|
||||
{
|
||||
ssize_t i;
|
||||
|
||||
/* null terminate */
|
||||
s[len - 1] = 0;
|
||||
|
||||
/* remove non printable chars */
|
||||
for (i = 0; i < len - 1; i++) {
|
||||
if (s[i] < ' ' || s[i] > 127)
|
||||
s[i] = '?';
|
||||
}
|
||||
|
||||
/* remove trailing spaces */
|
||||
strim(s);
|
||||
}
|
||||
|
||||
static u16 onfi_crc16(u16 crc, u8 const *p, size_t len)
|
||||
{
|
||||
int i;
|
||||
|
||||
while (len--) {
|
||||
crc ^= *p++ << 8;
|
||||
for (i = 0; i < 8; i++)
|
||||
|
@ -2541,6 +2560,8 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
|
|||
return 0;
|
||||
}
|
||||
|
||||
sanitize_string(p->manufacturer, sizeof(p->manufacturer));
|
||||
sanitize_string(p->model, sizeof(p->model));
|
||||
if (!mtd->name)
|
||||
mtd->name = p->model;
|
||||
mtd->writesize = le32_to_cpu(p->byte_per_page);
|
||||
|
|
|
@ -47,6 +47,10 @@ extern char * strchr(const char *,int);
|
|||
#ifndef __HAVE_ARCH_STRRCHR
|
||||
extern char * strrchr(const char *,int);
|
||||
#endif
|
||||
extern char * skip_spaces(const char *);
|
||||
|
||||
extern char *strim(char *);
|
||||
|
||||
#ifndef __HAVE_ARCH_STRSTR
|
||||
extern char * strstr(const char *,const char *);
|
||||
#endif
|
||||
|
|
39
lib/string.c
39
lib/string.c
|
@ -214,6 +214,45 @@ char * strrchr(const char * s, int c)
|
|||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* skip_spaces - Removes leading whitespace from @str.
|
||||
* @str: The string to be stripped.
|
||||
*
|
||||
* Returns a pointer to the first non-whitespace character in @str.
|
||||
*/
|
||||
char *skip_spaces(const char *str)
|
||||
{
|
||||
while (isspace(*str))
|
||||
++str;
|
||||
return (char *)str;
|
||||
}
|
||||
|
||||
/**
|
||||
* strim - Removes leading and trailing whitespace from @s.
|
||||
* @s: The string to be stripped.
|
||||
*
|
||||
* Note that the first trailing whitespace is replaced with a %NUL-terminator
|
||||
* in the given string @s. Returns a pointer to the first non-whitespace
|
||||
* character in @s.
|
||||
*/
|
||||
char *strim(char *s)
|
||||
{
|
||||
size_t size;
|
||||
char *end;
|
||||
|
||||
s = skip_spaces(s);
|
||||
size = strlen(s);
|
||||
if (!size)
|
||||
return s;
|
||||
|
||||
end = s + size - 1;
|
||||
while (end >= s && isspace(*end))
|
||||
end--;
|
||||
*(end + 1) = '\0';
|
||||
|
||||
return s;
|
||||
}
|
||||
#ifndef __HAVE_ARCH_STRLEN
|
||||
/**
|
||||
* strlen - Find the length of a string
|
||||
|
|
Loading…
Reference in a new issue