mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
vsprintf: add %pOF
This prints a full ofnode path. Signed-off-by: Casey Connolly <casey.connolly@linaro.org>
This commit is contained in:
@@ -26,6 +26,11 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
/* For %pOF */
|
||||
#if CONFIG_IS_ENABLED(OF_CONTROL)
|
||||
#include <dm/ofnode.h>
|
||||
#endif
|
||||
|
||||
/* we use this so that we can do without the ctype library */
|
||||
#define is_digit(c) ((c) >= '0' && (c) <= '9')
|
||||
|
||||
@@ -438,6 +443,30 @@ static char *uuid_string(char *buf, char *end, u8 *addr, int field_width,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_IS_ENABLED(OF_CONTROL) && !defined(API_BUILD)
|
||||
static char *ofnode_string(char *buf, char *end, ofnode *dp, int field_width,
|
||||
int precision, int flags)
|
||||
{
|
||||
#define NP_PATH_MAX 64
|
||||
char str[NP_PATH_MAX] = { 0 };
|
||||
const char *err = "...";
|
||||
|
||||
/* If dp == NULL output the string '<NULL>' */
|
||||
if (!dp || !ofnode_valid(*dp))
|
||||
return string(buf, end, NULL, field_width, precision, flags);
|
||||
|
||||
/* Get the path and indicate if it got cut off */
|
||||
if (ofnode_get_path(*dp, str, NP_PATH_MAX)) {
|
||||
str[NP_PATH_MAX - 1] = '\0';
|
||||
char *p = str + min((NP_PATH_MAX - 2) - strlen(err), strlen(str));
|
||||
memcpy(p, err, strlen(err) + 1);
|
||||
}
|
||||
|
||||
return string(buf, end, str, field_width, precision, flags);
|
||||
#undef NP_PATH_MAX
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Show a '%p' thing. A kernel extension is that the '%p' is followed
|
||||
* by an extra set of alphanumeric characters that are extended format
|
||||
@@ -473,6 +502,14 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||
case 'D':
|
||||
return device_path_string(buf, end, ptr, field_width,
|
||||
precision, flags);
|
||||
#endif
|
||||
/* Device paths only exist in the EFI context. */
|
||||
#if CONFIG_IS_ENABLED(OF_CONTROL) && !defined(API_BUILD)
|
||||
case 'O':
|
||||
if (fmt[1] == 'F')
|
||||
return ofnode_string(buf, end, ptr, field_width,
|
||||
precision, flags);
|
||||
break;
|
||||
#endif
|
||||
case 'a':
|
||||
flags |= SPECIAL | ZEROPAD;
|
||||
|
||||
Reference in New Issue
Block a user