From 355b4abcee015c3fae9ac5653c25259e104a886c Mon Sep 17 00:00:00 2001 From: xleroy Date: Sat, 4 Aug 2007 07:27:50 +0000 Subject: Fusion des modifications faites sur les branches "tailcalls" et "smallstep". En particulier: - Semantiques small-step depuis RTL jusqu'a PPC - Cminor independant du processeur - Ajout passes Selection et Reload - Ajout des langages intermediaires CminorSel et LTLin correspondants - Ajout des tailcalls depuis Cminor jusqu'a PPC git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@384 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- runtime/stdio.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 runtime/stdio.c (limited to 'runtime/stdio.c') diff --git a/runtime/stdio.c b/runtime/stdio.c new file mode 100644 index 00000000..c1532572 --- /dev/null +++ b/runtime/stdio.c @@ -0,0 +1,152 @@ +#include +#include +#define _INSIDE_COMPCERT_COMPATIBILITY_LIBRARY +#include "stdio.h" + +static compcert_FILE * compcert_alloc_file(FILE * f) +{ + struct compcert_FILE_ * r; + r = malloc(sizeof(struct compcert_FILE_)); + if (r == NULL) return NULL; + r->fstr = (void *) f; + return r; +} + +compcert_FILE * compcert_stdin; +compcert_FILE * compcert_stdout; +compcert_FILE * compcert_stderr; + +static __attribute__((constructor)) void compcert_stdio_init(void) +{ + compcert_stdin = compcert_alloc_file(stdin); + compcert_stdout = compcert_alloc_file(stdout); + compcert_stderr = compcert_alloc_file(stderr); +} + +void compcert_clearerr(compcert_FILE * f) +{ + clearerr((FILE *)(f->fstr)); +} + +int compcert_fclose(compcert_FILE * f) +{ + int errcode = fclose((FILE *)(f->fstr)); + free(f); + return errcode; +} + +int compcert_feof(compcert_FILE * f) +{ + return feof((FILE *)(f->fstr)); +} + +int compcert_ferror(compcert_FILE * f) +{ + return ferror((FILE *)(f->fstr)); +} + +int compcert_fflush(compcert_FILE * f) +{ + return fflush((FILE *)(f->fstr)); +} + +int compcert_fgetc(compcert_FILE * f) +{ + return fgetc((FILE *)(f->fstr)); +} + +char *compcert_fgets(char * s, int n, compcert_FILE * f) +{ + return fgets(s, n, (FILE *)(f->fstr)); +} + +compcert_FILE *compcert_fopen(const char * p, const char * m) +{ + FILE * f = fopen(p, m); + if (f == NULL) return NULL; + return compcert_alloc_file(f); +} + +int compcert_fprintf(compcert_FILE * f, const char * s, ...) +{ + va_list ap; + int retcode; + va_start(ap, s); + retcode = vfprintf((FILE *)(f->fstr), s, ap); + va_end(ap); + return retcode; +} + +int compcert_fputc(int c, compcert_FILE * f) +{ + return fputc(c, (FILE *)(f->fstr)); +} + +int compcert_fputs(const char * s, compcert_FILE * f) +{ + return fputs(s, (FILE *)(f->fstr)); +} + +size_t compcert_fread(void * s, size_t p, size_t q, compcert_FILE * f) +{ + return fread(s, p, q, (FILE *)(f->fstr)); +} + +compcert_FILE *compcert_freopen(const char * s, const char * m, + compcert_FILE * f) +{ + FILE * nf = freopen(s, m, (FILE *)(f->fstr)); + if (nf == NULL) return NULL; + f->fstr = nf; + return f; +} + +int compcert_fscanf(compcert_FILE * f, const char * s, ...) +{ + va_list ap; + int retcode; + va_start(ap, s); + retcode = vfscanf((FILE *)(f->fstr), s, ap); + va_end(ap); + return retcode; +} + +int compcert_fseek(compcert_FILE * f, long p, int q) +{ + return fseek((FILE *)(f->fstr), p, q); +} + +long compcert_ftell(compcert_FILE *f) +{ + return ftell((FILE *)(f->fstr)); +} + +size_t compcert_fwrite(const void * b, size_t p, size_t q, compcert_FILE * f) +{ + return fwrite(b, p, q, (FILE *)(f->fstr)); +} + +int compcert_getc(compcert_FILE * f) +{ + return getc((FILE *)(f->fstr)); +} + +int compcert_putc(int c , compcert_FILE * f) +{ + return putc(c, (FILE *)(f->fstr)); +} + +void compcert_rewind(compcert_FILE * f) +{ + rewind((FILE *)(f->fstr)); +} + +int compcert_ungetc(int c, compcert_FILE * f) +{ + return ungetc(c, (FILE *)(f->fstr)); +} + +int compcert_vfprintf(compcert_FILE * f, const char * s, va_list va) +{ + return vfprintf((FILE *)(f->fstr), s, va); +} -- cgit