From bca3f3fb88d117c1f339d33befb7316685d5c70c Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 22 Oct 2006 13:50:31 +0000 Subject: [PATCH] Going on --- src/c99.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/c99.c b/src/c99.c index 0e84986..0ec4189 100644 --- a/src/c99.c +++ b/src/c99.c @@ -4,7 +4,10 @@ #include +#include #include +#include +#include /* types */ @@ -41,18 +44,77 @@ static int _c99_error(char const * message, int ret) return ret; } +static int _c99_do_c(Prefs * prefs, char const * outfile, FILE * outfp, + char * infile, FILE * infp); +static int _c99_do_E(Prefs * prefs, char const * outfile, FILE * outfp, + char * infile, FILE * infp); +static int _c99_do_o(Prefs * prefs, char const * outfile, FILE * outfp, + char * infile, FILE * infp); static int _c99_do(Prefs * prefs, char const * outfile, FILE * outfp, char * infile) { FILE * infp; + int ret; if((infp = fopen(infile, "r")) == NULL) return _c99_error(infile, 1); + if(*prefs & PREFS_c) + ret = _c99_do_c(prefs, outfile, outfp, infile, infp); + else if(*prefs & PREFS_E) + ret = _c99_do_E(prefs, outfile, outfp, infile, infp); + else + ret = _c99_do_o(prefs, outfile, outfp, infile, infp); /* FIXME implement */ fclose(infp); + return ret; +} + +static int _c99_do_c(Prefs * prefs, char const * outfile, FILE * outfp, + char * infile, FILE * infp) +{ + size_t len; + char * o = NULL; + + if(outfile == NULL) + { + if((len = strlen(infile)) < 3 || infile[len-2] != '.' + || infile[len-1] != 'c') + { + errno = EINVAL; + return _c99_error(infile, 1); + } + if((o = strdup(infile)) == NULL) + return _c99_error("strdup", 1); + o[len-1] = 'o'; + if((outfp = fopen(o, "w")) == NULL) + { + free(o); + return _c99_error(o, 1); + } + } + /* FIXME implement */ + if(o != NULL) + { + fclose(outfp); + free(o); + } return 0; } +static int _c99_do_E(Prefs * prefs, char const * outfile, FILE * outfp, + char * infile, FILE * infp) +{ + /* FIXME implement */ + return 1; +} + +static int _c99_do_o(Prefs * prefs, char const * outfile, FILE * outfp, + char * infile, FILE * infp) +{ + /* FIXME implement */ + return 1; +} + /* usage */ static int _usage(void)