1
0
mirror of https://gitlab.os-k.eu/os-k-team/os-k.git synced 2023-08-25 14:03:10 +02:00

scanf (proto)

This commit is contained in:
Julian Barathieu 2020-02-06 10:26:44 +01:00
parent ddbf8ac07e
commit be5ec0fcf5
2 changed files with 13 additions and 17 deletions

View File

@ -167,8 +167,8 @@ size_t vbprintf(Buffer_t *, const char *, va_list);
error_t bgetc(Buffer_t *, uchar *); error_t bgetc(Buffer_t *, uchar *);
size_t bread(Buffer_t *, uchar *, size_t); size_t bread(Buffer_t *, uchar *, size_t);
size_t bscanf(Buffer_t *, size_t *, const char *, ...); size_t bscanf(Buffer_t *, const char *, ...);
size_t vbscanf(Buffer_t *, size_t *, const char *, va_list); size_t vbscanf(Buffer_t *, const char *, va_list);
error_t bemptybuf(Buffer_t *); error_t bemptybuf(Buffer_t *);
error_t bscrolldown(Buffer_t *); error_t bscrolldown(Buffer_t *);

View File

@ -21,7 +21,7 @@
// You should have received a copy of the GNU General Public License // // You should have received a copy of the GNU General Public License //
// along with OS/K. If not, see <https://www.gnu.org/licenses/>. // // along with OS/K. If not, see <https://www.gnu.org/licenses/>. //
//----------------------------------------------------------------------------// //----------------------------------------------------------------------------//
#if 0
#include <lib/buf.h> #include <lib/buf.h>
// //
@ -43,7 +43,7 @@ size_t BScanFromBuf(Buffer_t *buf, const char *fmt, ...)
size_t BScanFromBufV(Buffer_t *buf, const char *fmt, va_list ap) size_t BScanFromBufV(Buffer_t *buf, const char *fmt, va_list ap)
{ {
size_t rc; size_t sz;
ExAcquireLock(&buf->lock); ExAcquireLock(&buf->lock);
sz = vbscanf(buf, fmt, ap); sz = vbscanf(buf, fmt, ap);
@ -70,13 +70,14 @@ size_t vbscanf(Buffer_t *buf, const char *fmt, va_list ap)
size_t readcnt = 0; size_t readcnt = 0;
uchar ch = 0; uchar ch = 0;
char *chptr;
bool l, h; bool l, h;
size_t width; size_t width;
bool ignore; // '*' modifier, don't write to va_list for current mod bool ignore; // '*' modifier, don't write to va_list for current mod
if (!buf || !fmt) { seterrnp(EINVAL); return 0; } if (!buf || !fmt) { seterrno(EINVAL); return 0; }
if (buf->flags & (BF_EOF|BF_ERR)) { seterrno(EENDF); return 0; } if (buf->flags & (BF_EOF|BF_ERR)) { seterrno(EENDF); return 0; }
if (buf->state != BS_RDWR && buf->state != BS_WRONLY) { if (buf->state != BS_RDWR && buf->state != BS_WRONLY) {
seterrno(EBADF); seterrno(EBADF);
@ -84,7 +85,7 @@ size_t vbscanf(Buffer_t *buf, const char *fmt, va_list ap)
} }
// Progress in format string // Progress in format string
for (*fmt && !rc) { while (*fmt && !rc) {
// Skip all kinds of whitespaces // Skip all kinds of whitespaces
if (isspace(*fmt)) { if (isspace(*fmt)) {
@ -154,8 +155,6 @@ size_t vbscanf(Buffer_t *buf, const char *fmt, va_list ap)
fmt++; fmt++;
} }
assert(!(width < 0));
// //
// Extract length field // Extract length field
// //
@ -167,7 +166,7 @@ size_t vbscanf(Buffer_t *buf, const char *fmt, va_list ap)
else if (*fmt == 'h') { else if (*fmt == 'h') {
h = 1; h = 1;
fmt++ fmt++;
} }
// //
@ -183,8 +182,9 @@ size_t vbscanf(Buffer_t *buf, const char *fmt, va_list ap)
for (; width; width--) { for (; width; width--) {
rc = bgetc(buf, &ch); rc = bgetc(buf, &ch);
if (!rc) break; if (!rc) break;
if (ignore) continue;
char *chptr = va_arg(ap, char *); chptr = va_arg(ap, char *);
*chptr = (char)ch; *chptr = (char)ch;
readcnt++; readcnt++;
} }
@ -192,7 +192,7 @@ size_t vbscanf(Buffer_t *buf, const char *fmt, va_list ap)
// Decimal integer // Decimal integer
else if (*fmt == 'd') { else if (*fmt == 'd') {
;
} }
} }
@ -205,10 +205,6 @@ size_t vbscanf(Buffer_t *buf, const char *fmt, va_list ap)
#endif