summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorPeter Johnson <peter@tortall.net>2007-09-10 07:15:50 +0000
committerPeter Johnson <peter@tortall.net>2007-09-10 07:15:50 +0000
commitd0033b06c510a3b4d67092e384fb40f052323b7e (patch)
tree78956bcc67481b0bb0d72546abc10e25ac61bae1 /tools
parent0e349f552d3f7008ea28bb0fc67767b594537777 (diff)
downloadyasm-d0033b06c510a3b4d67092e384fb40f052323b7e.tar.gz
Change genperf to take input and output filenames rather than outputting to
standard output. This makes for better error handling behavior with make (redirecting the standard output could leave empty files behind on error). svn path=/trunk/yasm/; revision=1939
Diffstat (limited to 'tools')
-rw-r--r--tools/genperf/Makefile.inc2
-rw-r--r--tools/genperf/genperf.c28
2 files changed, 20 insertions, 10 deletions
diff --git a/tools/genperf/Makefile.inc b/tools/genperf/Makefile.inc
index 600c93cb..b7e80ed8 100644
--- a/tools/genperf/Makefile.inc
+++ b/tools/genperf/Makefile.inc
@@ -8,7 +8,7 @@ noinst_PROGRAMS += genperf
# Suffix rule for genperf
SUFFIXES += .gperf
.gperf.c: genperf$(EXEEXT)
- $(top_builddir)/genperf$(EXEEXT) $< > $@
+ $(top_builddir)/genperf$(EXEEXT) $< $@
genperf_SOURCES =
EXTRA_DIST += tools/genperf/genperf.c
diff --git a/tools/genperf/genperf.c b/tools/genperf/genperf.c
index 1020ee14..ef01b818 100644
--- a/tools/genperf/genperf.c
+++ b/tools/genperf/genperf.c
@@ -250,7 +250,7 @@ perfect_gen(FILE *out, const char *lookup_function_name,
int
main(int argc, char *argv[])
{
- FILE *in;
+ FILE *in, *out;
size_t i;
char *ch;
static char line[1024], tmp[1024];
@@ -271,8 +271,8 @@ main(int argc, char *argv[])
sval *sv;
keyword *kw;
- if (argc != 2) {
- fprintf(stderr, "Usage: genperf <in>\n");
+ if (argc != 3) {
+ fprintf(stderr, "Usage: genperf <in> <out>\n");
return EXIT_FAILURE;
}
@@ -511,20 +511,30 @@ main(int argc, char *argv[])
}
/* output code */
- printf("/* %s code produced by genperf */\n", language);
- printf("/* Command-line: genperf %s */\n", argv[1]);
+ out = fopen(argv[2], "wt");
+ if (!out) {
+ fprintf(stderr, "Could not open `%s' for writing\n", argv[2]);
+ return EXIT_FAILURE;
+ }
+
+ fprintf(out, "/* %s code produced by genperf */\n", language);
+ fprintf(out, "/* Command-line: genperf %s %s */\n", argv[1], argv[2]);
STAILQ_FOREACH(sv, &usercode, link)
- printf("%s", sv->str);
+ fprintf(out, "%s", sv->str);
/* Get perfect hash */
- perfect_gen(stdout, lookup_function_name, struct_name, &keywords, filename);
+ perfect_gen(out, lookup_function_name, struct_name, &keywords, filename);
STAILQ_FOREACH(sv, &usercode2, link)
- printf("%s", sv->str);
+ fprintf(out, "%s", sv->str);
- if (errors > 0)
+ fclose(out);
+
+ if (errors > 0) {
+ remove(argv[2]);
return EXIT_FAILURE;
+ }
return EXIT_SUCCESS;
}