mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-26 22:52:34 +02:00
print.c: Fix multiline support
- Use the reentrant tokenizer version strtok_r to break up vendor and model names in print.c. - Add implementation of strtok_r for mingw (strtok_r is POSIX only). - Free allocated temporary memory again. Corresponding to flashrom svn r1700. Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:
parent
136388ffa9
commit
4a03865cd9
51
print.c
51
print.c
@ -3,6 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
* Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||||
* Copyright (C) 2009 Carl-Daniel Hailfinger
|
* Copyright (C) 2009 Carl-Daniel Hailfinger
|
||||||
|
* Copyright (C) 2011-2013 Stefan Tauner
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -25,6 +26,27 @@
|
|||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
#include "programmer.h"
|
#include "programmer.h"
|
||||||
|
|
||||||
|
/* FIXME: Find a better solution for MinGW. Maybe wrap strtok_s (C11) below if it becomes available */
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
static char* strtok_r(char *str, const char *delim, char **nextp)
|
||||||
|
{
|
||||||
|
if (str == NULL)
|
||||||
|
str = *nextp;
|
||||||
|
|
||||||
|
str += strspn(str, delim); /* Skip leading delimiters */
|
||||||
|
if (*str == '\0')
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
char *ret = str;
|
||||||
|
str += strcspn(str, delim); /* Find end of token */
|
||||||
|
if (*str != '\0')
|
||||||
|
*str++ = '\0';
|
||||||
|
|
||||||
|
*nextp = str;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a string corresponding to the bustype parameter.
|
* Return a string corresponding to the bustype parameter.
|
||||||
* Memory is obtained with malloc() and must be freed with free() by the caller.
|
* Memory is obtained with malloc() and must be freed with free() by the caller.
|
||||||
@ -69,7 +91,8 @@ static int print_supported_chips(void)
|
|||||||
int maxtypelen = strlen("Type") + 1;
|
int maxtypelen = strlen("Type") + 1;
|
||||||
const struct flashchip *chip;
|
const struct flashchip *chip;
|
||||||
char *s;
|
char *s;
|
||||||
char *tmpven, *tmpdev;
|
char *ven, *dev;
|
||||||
|
char *tmpven, *tmpdev, *tmpven_save, *tmpdev_save;
|
||||||
int tmpvenlen, tmpdevlen, curvenlen, curdevlen;
|
int tmpvenlen, tmpdevlen, curvenlen, curdevlen;
|
||||||
|
|
||||||
/* calculate maximum column widths and by iterating over all chips */
|
/* calculate maximum column widths and by iterating over all chips */
|
||||||
@ -179,17 +202,17 @@ static int print_supported_chips(void)
|
|||||||
* - after all other values are printed print the surplus tokens
|
* - after all other values are printed print the surplus tokens
|
||||||
* on fresh lines
|
* on fresh lines
|
||||||
*/
|
*/
|
||||||
tmpven = malloc(strlen(chip->vendor) + 1);
|
ven = malloc(strlen(chip->vendor) + 1);
|
||||||
if (tmpven == NULL) {
|
if (ven == NULL) {
|
||||||
msg_gerr("Out of memory!\n");
|
msg_gerr("Out of memory!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
strcpy(tmpven, chip->vendor);
|
strcpy(ven, chip->vendor);
|
||||||
|
|
||||||
tmpven = strtok(tmpven, delim);
|
tmpven = strtok_r(ven, delim, &tmpven_save);
|
||||||
msg_ginfo("%s", tmpven);
|
msg_ginfo("%s", tmpven);
|
||||||
curvenlen = strlen(tmpven);
|
curvenlen = strlen(tmpven);
|
||||||
while ((tmpven = strtok(NULL, delim)) != NULL) {
|
while ((tmpven = strtok_r(NULL, delim, &tmpven_save)) != NULL) {
|
||||||
msg_ginfo("%s", delim);
|
msg_ginfo("%s", delim);
|
||||||
curvenlen++;
|
curvenlen++;
|
||||||
tmpvenlen = strlen(tmpven);
|
tmpvenlen = strlen(tmpven);
|
||||||
@ -203,17 +226,17 @@ static int print_supported_chips(void)
|
|||||||
msg_ginfo(" ");
|
msg_ginfo(" ");
|
||||||
|
|
||||||
/* support for multiline device names as above */
|
/* support for multiline device names as above */
|
||||||
tmpdev = malloc(strlen(chip->name) + 1);
|
dev = malloc(strlen(chip->name) + 1);
|
||||||
if (tmpdev == NULL) {
|
if (dev == NULL) {
|
||||||
msg_gerr("Out of memory!\n");
|
msg_gerr("Out of memory!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
strcpy(tmpdev, chip->name);
|
strcpy(dev, chip->name);
|
||||||
|
|
||||||
tmpdev = strtok(tmpdev, delim);
|
tmpdev = strtok_r(dev, delim, &tmpdev_save);
|
||||||
msg_ginfo("%s", tmpdev);
|
msg_ginfo("%s", tmpdev);
|
||||||
curdevlen = strlen(tmpdev);
|
curdevlen = strlen(tmpdev);
|
||||||
while ((tmpdev = strtok(NULL, delim)) != NULL) {
|
while ((tmpdev = strtok_r(NULL, delim, &tmpdev_save)) != NULL) {
|
||||||
msg_ginfo("%s", delim);
|
msg_ginfo("%s", delim);
|
||||||
curdevlen++;
|
curdevlen++;
|
||||||
tmpdevlen = strlen(tmpdev);
|
tmpdevlen = strlen(tmpdev);
|
||||||
@ -287,7 +310,7 @@ static int print_supported_chips(void)
|
|||||||
if (tmpven != NULL){
|
if (tmpven != NULL){
|
||||||
msg_ginfo("%s", tmpven);
|
msg_ginfo("%s", tmpven);
|
||||||
curvenlen = strlen(tmpven);
|
curvenlen = strlen(tmpven);
|
||||||
while ((tmpven = strtok(NULL, delim)) != NULL) {
|
while ((tmpven = strtok_r(NULL, delim, &tmpven_save)) != NULL) {
|
||||||
msg_ginfo("%s", delim);
|
msg_ginfo("%s", delim);
|
||||||
curvenlen++;
|
curvenlen++;
|
||||||
tmpvenlen = strlen(tmpven);
|
tmpvenlen = strlen(tmpven);
|
||||||
@ -306,7 +329,7 @@ static int print_supported_chips(void)
|
|||||||
if (tmpdev != NULL){
|
if (tmpdev != NULL){
|
||||||
msg_ginfo("%s", tmpdev);
|
msg_ginfo("%s", tmpdev);
|
||||||
curdevlen = strlen(tmpdev);
|
curdevlen = strlen(tmpdev);
|
||||||
while ((tmpdev = strtok(NULL, delim)) != NULL) {
|
while ((tmpdev = strtok_r(NULL, delim, &tmpdev_save)) != NULL) {
|
||||||
msg_ginfo("%s", delim);
|
msg_ginfo("%s", delim);
|
||||||
curdevlen++;
|
curdevlen++;
|
||||||
tmpdevlen = strlen(tmpdev);
|
tmpdevlen = strlen(tmpdev);
|
||||||
@ -319,6 +342,8 @@ static int print_supported_chips(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
msg_ginfo("\n");
|
msg_ginfo("\n");
|
||||||
|
free(ven);
|
||||||
|
free(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user