diff --git a/fileio.c b/fileio.c index f2251d27..ef6a5c1b 100644 --- a/fileio.c +++ b/fileio.c @@ -937,6 +937,7 @@ int fileio(int op, char * filename, FILEFMT format, struct fioparms fio; int i; AVRMEM * mem; + int using_stdio; mem = avr_locate_mem(p, memtype); if (mem == NULL) { @@ -977,6 +978,8 @@ int fileio(int op, char * filename, FILEFMT format, } } + using_stdio = 0; + if (strcmp(filename, "-")==0) { if (fio.op == FIO_READ) { fname = ""; @@ -986,6 +989,7 @@ int fileio(int op, char * filename, FILEFMT format, fname = ""; f = stdout; } + using_stdio = 1; } else { fname = filename; @@ -993,6 +997,14 @@ int fileio(int op, char * filename, FILEFMT format, } if (format == FMT_AUTO) { + if (using_stdio) { + fprintf(stderr, + "%s: can't auto detect file format when using stdin/out.\n" + " Please specify a file format using the -f option and try again.\n", + progname); + exit(1); + } + format = fmt_autodetect(fname); if (format < 0) { fprintf(stderr, @@ -1006,12 +1018,14 @@ int fileio(int op, char * filename, FILEFMT format, } if (format != FMT_IMM) { - fname = filename; - f = fopen(fname, fio.mode); - if (f == NULL) { - fprintf(stderr, "%s: can't open %s file %s: %s\n", - progname, fio.iodesc, fname, strerror(errno)); - return -1; + if (!using_stdio) { + fname = filename; + f = fopen(fname, fio.mode); + if (f == NULL) { + fprintf(stderr, "%s: can't open %s file %s: %s\n", + progname, fio.iodesc, fname, strerror(errno)); + return -1; + } } }