libc: Implement vscanf() function

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
Change-Id: I2421e57b2c848c43afb749b8ebfa79ec457cde26
This commit is contained in:
Xiang Xiao 2020-06-02 23:28:28 +08:00 committed by patacongo
parent d05cca0d91
commit a55f8d24a2
5 changed files with 59 additions and 18 deletions

View File

@ -192,10 +192,11 @@ int vfprintf(FAR FILE *stream, FAR const IPTR char *fmt,
va_list ap);
int vfscanf(FAR FILE *stream, FAR const IPTR char *fmt, va_list ap);
int vprintf(FAR const IPTR char *fmt, va_list ap);
int vscanf(FAR const IPTR char *fmt, va_list ap);
int vsnprintf(FAR char *buf, size_t size, FAR const IPTR char *fmt,
va_list ap);
int vsprintf(FAR char *buf, FAR const IPTR char *fmt, va_list ap);
int vsscanf(FAR const char *buf, FAR const char *fmt, va_list ap);
int vsscanf(FAR const char *buf, FAR const IPTR char *fmt, va_list ap);
/* Operations on file descriptors including:
*

View File

@ -9,7 +9,7 @@
"aio_return","aio.h","defined(CONFIG_FS_AIO)","ssize_t","FAR struct aiocb *"
"aio_suspend","aio.h","defined(CONFIG_FS_AIO)","int","FAR const struct aiocb * const []|FAR const struct aiocb * const *","int","FAR const struct timespec *"
"alarm","unistd.h","!defined(CONFIG_DISABLE_POSIX_TIMERS)","unsigned int","unsigned int"
"asprintf","stdio.h","","int","FAR char **","FAR const char *","..."
"asprintf","stdio.h","","int","FAR char **","FAR const IPTR char *","..."
"b16atan2","fixedmath.h","!defined(CONFIG_HAVE_LONG_LONG)","b16_t","b16_t","b16_t"
"b16cos","fixedmath.h","","b16_t","b16_t"
"b16divb16","fixedmath.h","!defined(CONFIG_HAVE_LONG_LONG)","b16_t","b16_t","b16_t"
@ -42,7 +42,7 @@
"fgets","stdio.h","CONFIG_NFILE_STREAMS > 0","FAR char *","FAR char *","int","FAR FILE *"
"fileno","stdio.h","","int","FAR FILE *"
"fopen","stdio.h","CONFIG_NFILE_STREAMS > 0","FAR FILE *","FAR const char *","FAR const char *"
"fprintf","stdio.h","CONFIG_NFILE_STREAMS > 0","int","FAR FILE *","FAR const char *","..."
"fprintf","stdio.h","CONFIG_NFILE_STREAMS > 0","int","FAR FILE *","FAR const IPTR char *","..."
"fputc","stdio.h","CONFIG_NFILE_STREAMS > 0","int","int","FAR FILE *"
"fputs","stdio.h","CONFIG_NFILE_STREAMS > 0","int","FAR const char *","FAR FILE *"
"fread","stdio.h","CONFIG_NFILE_STREAMS > 0","size_t","FAR void *","size_t","size_t","FAR FILE *"
@ -105,7 +105,7 @@
"ntohs","arpa/inet.h","","uint16_t","uint16_t"
"perror","stdio.h","CONFIG_NFILE_STREAMS > 0","void","FAR const char *"
"pipe","unistd.h","","int","int [2]|FAR int *"
"printf","stdio.h","","int","FAR const char *","..."
"printf","stdio.h","","int","FAR const IPTR char *","..."
"pthread_attr_destroy","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","int","FAR pthread_attr_t *"
"pthread_attr_getinheritsched","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","int","FAR const pthread_attr_t *","FAR int *"
"pthread_attr_getschedparam","pthread.h","!defined(CONFIG_DISABLE_PTHREAD)","int","FAR const pthread_attr_t *","FAR struct sched_param *"
@ -155,8 +155,8 @@
"sigfillset","signal.h","","int","FAR sigset_t *"
"sigismember","signal.h","","int","FAR const sigset_t *","int"
"sleep","unistd.h","","unsigned int","unsigned int"
"snprintf","stdio.h","","int","FAR char *","size_t","FAR const char *","..."
"sprintf","stdio.h","","int","FAR char *","FAR const char *","..."
"snprintf","stdio.h","","int","FAR char *","size_t","FAR const IPTR char *","..."
"sprintf","stdio.h","","int","FAR char *","FAR const IPTR char *","..."
"sq_addafter","queue.h","","void","FAR sq_entry_t *","FAR sq_entry_t *","FAR sq_queue_t *"
"sq_addfirst","queue.h","","void","FAR sq_entry_t *","FAR sq_queue_t *"
"sq_addlast","queue.h","","void","FAR sq_entry_t *","FAR sq_queue_t *"
@ -165,7 +165,7 @@
"sq_remfirst","queue.h","","FAR sq_entry_t *","FAR sq_queue_t *"
"sq_remlast","queue.h","","FAR sq_entry_t *","FAR sq_queue_t *"
"srand","stdlib.h","","void","unsigned int"
"sscanf","stdio.h","","int","FAR const char *","FAR const char *","..."
"sscanf","stdio.h","","int","FAR const IPTR char *","FAR const char *","..."
"strcasecmp","strings.h","","int","FAR const char *","FAR const char *"
"strcasestr","string.h","","FAR char *","FAR const char *","FAR const char *"
"strcat","string.h","","FAR char *","FAR char *","FAR const char *"
@ -199,7 +199,7 @@
"strxfrm","string.h","defined(CONFIG_LIBC_LOCALE)","size_t","FAR char *","FAR const char *","size_t"
"swab","unistd.h","","void","FAR const void *","FAR void *","ssize_t"
"swprintf","wchar.h","defined(CONFIG_LIBC_WCHAR)","int","FAR wchar_t *","size_t","FAR const wchar_t *","..."
"syslog","syslog.h","","void","int","FAR const char *","..."
"syslog","syslog.h","","void","int","FAR const IPTR char *","..."
"tcflush","termios.h","defined(CONFIG_SERIAL_TERMIOS)","int","int","int"
"tcgetattr","termios.h","defined(CONFIG_SERIAL_TERMIOS)","int","int","FAR struct termios *"
"tcsetattr","termios.h","defined(CONFIG_SERIAL_TERMIOS)","int","int","int","FAR const struct termios *"
@ -212,13 +212,14 @@
"ub16sqr","fixedmath.h","!defined(CONFIG_HAVE_LONG_LONG)","ub16_t","ub16_t"
"ungetc","stdio.h","CONFIG_NFILE_STREAMS > 0","int","int","FAR FILE *"
"usleep","unistd.h","","int","useconds_t"
"vasprintf","stdio.h","","int","FAR char **","FAR const char *","va_list"
"vfprintf","stdio.h","CONFIG_NFILE_STREAMS > 0","int","FAR FILE *","FAR const char *","va_list"
"vprintf","stdio.h","CONFIG_NFILE_STREAMS > 0","int","FAR const char *","va_list"
"vsnprintf","stdio.h","","int","FAR char *","size_t","FAR const char *","va_list"
"vsprintf","stdio.h","","int","FAR char *","FAR const char *","va_list"
"vsscanf","stdio.h","","int","FAR const char *","FAR const char *","va_list"
"vsyslog","syslog.h","","void","int","FAR const char *","va_list"
"vasprintf","stdio.h","","int","FAR char **","FAR const IPTR char *","va_list"
"vfprintf","stdio.h","CONFIG_NFILE_STREAMS > 0","int","FAR FILE *","FAR const IPTR char *","va_list"
"vprintf","stdio.h","CONFIG_NFILE_STREAMS > 0","int","FAR const IPTR char *","va_list"
"vscanf","stdio.h","CONFIG_NFILE_STREAMS > 0","int","FAR const IPTR char *","va_list"
"vsnprintf","stdio.h","","int","FAR char *","size_t","FAR const IPTR char *","va_list"
"vsprintf","stdio.h","","int","FAR char *","FAR const IPTR char *","va_list"
"vsscanf","stdio.h","","int","FAR const char *","FAR const IPTR char *","va_list"
"vsyslog","syslog.h","","void","int","FAR const IPTR char *","va_list"
"wcrtomb","wchar.h","defined(CONFIG_LIBC_WCHAR)","size_t","FAR char *","wchar_t","FAR mbstate_t *"
"wcscmp","wchar.h","defined(CONFIG_LIBC_WCHAR)","int","FAR const wchar_t *","FAR const wchar_t *"
"wcscoll","wchar.h","defined(CONFIG_LIBC_WCHAR)","int","FAR const wchar_t *","FAR const wchar_t *"

Can't render this file because it has a wrong number of fields in line 2.

View File

@ -60,7 +60,7 @@ CSRCS += lib_stdinstream.c lib_stdoutstream.c lib_stdsistream.c
CSRCS += lib_stdsostream.c lib_perror.c lib_feof.c lib_ferror.c
CSRCS += lib_rawinstream.c lib_rawoutstream.c lib_rawsistream.c
CSRCS += lib_rawsostream.c lib_remove.c lib_clearerr.c lib_scanf.c
CSRCS += lib_fscanf.c lib_vfscanf.c lib_tmpfile.c
CSRCS += lib_vscanf.c lib_fscanf.c lib_vfscanf.c lib_tmpfile.c
endif

View File

@ -0,0 +1,40 @@
/****************************************************************************
* libs/libc/stdio/lib_vscanf.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdio.h>
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: vscanf
****************************************************************************/
int vscanf(FAR const IPTR char *fmt, va_list ap)
{
/* vfscanf from stdin */
return vfscanf(stdin, fmt, ap);
}

View File

@ -53,7 +53,7 @@
* Name: vsscanf
****************************************************************************/
int vsscanf(FAR const char *buf, FAR const char *fmt, va_list ap)
int vsscanf(FAR const char *buf, FAR const IPTR char *fmt, va_list ap)
{
struct lib_meminstream_s meminstream;
int n;
@ -65,7 +65,6 @@ int vsscanf(FAR const char *buf, FAR const char *fmt, va_list ap)
/* Then let lib_vscanf do the real work */
n = lib_vscanf((FAR struct lib_instream_s *)&meminstream.public, NULL,
fmt, ap);
return n;