From c03738a9f3b3f5d3b145f9c3152eb5057e5665a8 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Mon, 5 Mar 2012 16:01:43 +0100 Subject: [PATCH] Added a stub for sscanf(3). This stub implements an ugly hack to help port binutils. Hopefully we'll get a real scanf family of functions soon. --- libmaxsi/include/stdio.h | 2 +- libmaxsi/io.cpp | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libmaxsi/include/stdio.h b/libmaxsi/include/stdio.h index c5c57803..e6ce005d 100644 --- a/libmaxsi/include/stdio.h +++ b/libmaxsi/include/stdio.h @@ -102,6 +102,7 @@ extern int snprintf(char* restrict s, size_t n, const char* restrict format, ... extern char* sortix_gets(void); extern int sortix_puts(const char* str); extern int sprintf(char* restrict s, const char* restrict format, ...); +extern int sscanf(const char* restrict s, const char* restrict format, ...); extern int vfprintf(FILE* restrict stream, const char* restrict format, va_list ap); extern int vprintf(const char* restrict format, va_list ap); extern int vsnprintf(char* restrict, size_t, const char* restrict, va_list); @@ -131,7 +132,6 @@ extern int rename(const char* oldname, const char* newname); extern int renameat(int oldfd, const char* oldname, int newfd, const char* newname); extern int scanf(const char* restrict format, ...); extern int setvbuf(FILE* restrict stream, char* restrict buf, int type, size_t size); -extern int sscanf(const char* restrict s, const char* restrict format, ...); extern int ungetc(int c, FILE* stream); extern int vdprintf(int fildes, const char* restrict format, va_list ap); extern int vfscanf(FILE* restrict stream, const char* restrict format, va_list arg); diff --git a/libmaxsi/io.cpp b/libmaxsi/io.cpp index 5b16d5c5..217196a5 100644 --- a/libmaxsi/io.cpp +++ b/libmaxsi/io.cpp @@ -119,6 +119,23 @@ namespace Maxsi return (int) result; } + // TODO: This is an ugly hack to help build binutils. + #warning Ugly sscanf hack to help build binutils + extern int sscanf(const char* s, const char* format, ...) + { + if ( strcmp(format, "%x") != 0 ) + { + fprintf(stderr, "sscanf hack doesn't implement: '%s'\n", format); + abort(); + } + + va_list list; + va_start(list, format); + unsigned* dec = va_arg(list, unsigned*); + *dec = strtol(s, NULL, 16); + return strlen(s); + } + typedef struct vsnprintf_struct { char* str;