lib_libvsprintf.c:add option in Kconfig to control "%p*" special format specifier.
Signed-off-by: likun17 <likun17@xiaomi.com>
This commit is contained in:
parent
83914d5b29
commit
9de0465a8a
4 changed files with 44 additions and 19 deletions
|
|
@ -55,30 +55,38 @@ do \
|
|||
|
||||
void vwarn(FAR const char *fmt, va_list ap)
|
||||
{
|
||||
#ifdef CONFIG_LIBC_PRINT_EXTENSION
|
||||
int error = get_errno();
|
||||
struct va_format vaf;
|
||||
|
||||
#ifdef va_copy
|
||||
# ifdef va_copy
|
||||
va_list copy;
|
||||
|
||||
va_copy(copy, ap);
|
||||
|
||||
vaf.fmt = fmt;
|
||||
vaf.va = ©
|
||||
#else
|
||||
# else
|
||||
vaf.fmt = fmt;
|
||||
vaf.va = ≈
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#ifdef CONFIG_FILE_STREAM
|
||||
# ifdef CONFIG_FILE_STREAM
|
||||
fprintf(stderr, "%d: %pV: %s\n", _SCHED_GETTID(), &vaf, strerror(error));
|
||||
#else
|
||||
# else
|
||||
dprintf(STDERR_FILENO, "%d: %pV: %s\n", _SCHED_GETTID(),
|
||||
&vaf, strerror(error));
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#ifdef va_copy
|
||||
# ifdef va_copy
|
||||
va_end(copy);
|
||||
# endif
|
||||
#else
|
||||
# ifdef CONFIG_FILE_STREAM
|
||||
vfprintf(stderr, fmt, ap);
|
||||
# else
|
||||
vdprintf(STDERR_FILENO, fmt, ap);
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -88,28 +96,36 @@ void vwarn(FAR const char *fmt, va_list ap)
|
|||
|
||||
void vwarnx(FAR const char *fmt, va_list ap)
|
||||
{
|
||||
#ifdef CONFIG_LIBC_PRINT_EXTENSION
|
||||
struct va_format vaf;
|
||||
|
||||
#ifdef va_copy
|
||||
# ifdef va_copy
|
||||
va_list copy;
|
||||
|
||||
va_copy(copy, ap);
|
||||
|
||||
vaf.fmt = fmt;
|
||||
vaf.va = ©
|
||||
#else
|
||||
# else
|
||||
vaf.fmt = fmt;
|
||||
vaf.va = ≈
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#ifdef CONFIG_FILE_STREAM
|
||||
# ifdef CONFIG_FILE_STREAM
|
||||
fprintf(stderr, "%d: %pV\n", _SCHED_GETTID(), &vaf);
|
||||
#else
|
||||
# else
|
||||
dprintf(STDERR_FILENO, "%d: %pV\n", _SCHED_GETTID(), &vaf);
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#ifdef va_copy
|
||||
# ifdef va_copy
|
||||
va_end(copy);
|
||||
# endif
|
||||
#else
|
||||
# ifdef CONFIG_FILE_STREAM
|
||||
vfprintf(stderr, fmt, ap);
|
||||
# else
|
||||
vdprintf(STDERR_FILENO, fmt, ap);
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -106,4 +106,10 @@ config LIBC_SCANSET
|
|||
---help---
|
||||
Add scanset support to sscanf().
|
||||
|
||||
config LIBC_PRINT_EXTENSION
|
||||
bool
|
||||
default n
|
||||
---help---
|
||||
Enables vsprintf supports using "%p*" to print.
|
||||
|
||||
endmenu #Standard C I/O
|
||||
|
|
|
|||
|
|
@ -1119,6 +1119,7 @@ str_lpad:
|
|||
break;
|
||||
|
||||
case 'p':
|
||||
#ifdef CONFIG_LIBC_PRINT_EXTENSION
|
||||
c = fmt_char(fmt);
|
||||
switch (c)
|
||||
{
|
||||
|
|
@ -1133,22 +1134,22 @@ str_lpad:
|
|||
case 'V':
|
||||
{
|
||||
FAR struct va_format *vaf = (FAR void *)(uintptr_t)x;
|
||||
#ifdef va_copy
|
||||
# ifdef va_copy
|
||||
va_list copy;
|
||||
|
||||
va_copy(copy, *vaf->va);
|
||||
lib_vsprintf(stream, vaf->fmt, copy);
|
||||
va_end(copy);
|
||||
#else
|
||||
# else
|
||||
lib_vsprintf(stream, vaf->fmt, *vaf->va);
|
||||
#endif
|
||||
# endif
|
||||
continue;
|
||||
}
|
||||
|
||||
case 'S':
|
||||
case 's':
|
||||
{
|
||||
#ifdef CONFIG_ALLSYMS
|
||||
# ifdef CONFIG_ALLSYMS
|
||||
FAR const struct symtab_s *symbol;
|
||||
FAR void *addr = (FAR void *)(uintptr_t)x;
|
||||
size_t symbolsize;
|
||||
|
|
@ -1173,7 +1174,7 @@ str_lpad:
|
|||
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1181,6 +1182,7 @@ str_lpad:
|
|||
fmt_ungetc(fmt);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
flags |= FL_ALT;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
config ALLSYMS
|
||||
bool "Load all symbols for debugging"
|
||||
select LIBC_PRINT_EXTENSION
|
||||
default n
|
||||
---help---
|
||||
Say Y here to let the nuttx print out symbolic crash information and
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue