forked from Archive/PX4-Autopilot
Merge pull request #226 from PX4/sscanf
Attempt to fix sscanf() %n handling
This commit is contained in:
commit
39218d5fcc
|
@ -197,7 +197,7 @@ int vsscanf(FAR char *buf, FAR const char *fmt, va_list ap)
|
||||||
noassign = false;
|
noassign = false;
|
||||||
lflag = false;
|
lflag = false;
|
||||||
|
|
||||||
while (*fmt && *buf)
|
while (*fmt)
|
||||||
{
|
{
|
||||||
/* Skip over white space */
|
/* Skip over white space */
|
||||||
|
|
||||||
|
@ -242,6 +242,33 @@ int vsscanf(FAR char *buf, FAR const char *fmt, va_list ap)
|
||||||
fmt--;
|
fmt--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Process %n: Character count */
|
||||||
|
|
||||||
|
if (*fmt == 'n')
|
||||||
|
{
|
||||||
|
lvdbg("vsscanf: Performing character count\n");
|
||||||
|
|
||||||
|
if (!noassign)
|
||||||
|
{
|
||||||
|
size_t nchars = (size_t)(buf - bufstart);
|
||||||
|
|
||||||
|
if (lflag)
|
||||||
|
{
|
||||||
|
long *plong = va_arg(ap, long*);
|
||||||
|
*plong = (long)nchars;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int *pint = va_arg(ap, int*);
|
||||||
|
*pint = (int)nchars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* Check for valid data in input string */
|
||||||
|
if (!(*buf))
|
||||||
|
break;
|
||||||
|
|
||||||
/* Process %s: String conversion */
|
/* Process %s: String conversion */
|
||||||
|
|
||||||
|
@ -445,28 +472,7 @@ int vsscanf(FAR char *buf, FAR const char *fmt, va_list ap)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process %n: Character count */
|
}
|
||||||
|
|
||||||
else if (*fmt == 'n')
|
|
||||||
{
|
|
||||||
lvdbg("vsscanf: Performing character count\n");
|
|
||||||
|
|
||||||
if (!noassign)
|
|
||||||
{
|
|
||||||
size_t nchars = (size_t)(buf - bufstart);
|
|
||||||
|
|
||||||
if (lflag)
|
|
||||||
{
|
|
||||||
long *plong = va_arg(ap, long*);
|
|
||||||
*plong = (long)nchars;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int *pint = va_arg(ap, int*);
|
|
||||||
*pint = (int)nchars;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Note %n does not count as a conversion */
|
/* Note %n does not count as a conversion */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue