Mail Archives: djgpp/1998/07/23/01:01:25
Krian U <krian AT umich DOT edu> wrote in article
<6ovkg5$jlg$1 AT news4 DOT jaring DOT my>...
> I have some code ported over from Borland C to DJGPP that uses "vsscanf",
an
> sscanf-type function that works with va_lists. Since vsscanf isn't
> ANSI-standard, I'd like to ask what I could do to get the same result in
> something that looks [...]
> To clarify myself, my aim is to perform an sscanf on a variable-arg list.
> Anyone can help?
>
> -Krian
>
This is my vsscanf():
#include <stdio.h>
int my_sscanf(const char *buffer, const char *fmt, ...);
int vsscanf(const char *buffer, const char *fmt, va_list ap);
int main()
{
char s1[100]; int d1, d2, x1, n; float f1;
char test_buffer[]="Test vsscanf 10 23 1.056 f 0x123";
printf("Source: %s\n", test_buffer);
n=my_sscanf(test_buffer, "Test %s %d %d %f f %x", &s1, &d1, &d2, &f1,
&x1);
printf("Result (%d): %s %d %d %f, %#x\n", n, s1, d1, d2, f1, x1);
return 0;
}
#include <stdarg.h>
#include <libc/file.h>
#include <libc/unconst.h>
int my_sscanf(const char *str, const char *fmt, ...)
{
int r;
va_list a=0;
va_start(a, fmt);
r=vsscanf(str, fmt, a);
va_end(a);
return r;
}
int vsscanf(const char *str, const char *fmt, va_list ap)
{
int r; /* This code has been cloned from libc/sscanf.c
(DJ) */
FILE _strbuf;
_strbuf._flag = _IOREAD|_IOSTRG;
_strbuf._ptr = _strbuf._base = unconst(str, char *);
_strbuf._cnt = 0;
while (*str++)
_strbuf._cnt++;
_strbuf._bufsiz = _strbuf._cnt;
r = _doscan(&_strbuf, fmt, ap);
return r;
}
- Raw text -