Mercurial > hg > tinycc
changeset 581:8595fe33590f
Support filename "-" as a synonym for /dev/stdin.
author | Rob Landley <rob@landley.net> |
---|---|
date | Sat, 29 Mar 2008 13:51:33 -0500 |
parents | 7ddeaeed4e94 |
children | 8e2f9e376489 |
files | options.c tcc.c |
diffstat | 2 files changed, 23 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/options.c Fri Mar 21 20:25:14 2008 -0500 +++ b/options.c Sat Mar 29 13:51:33 2008 -0500 @@ -302,7 +302,7 @@ } else break; } r = argv[optind++]; - if (r[0] != '-') { + if (r[0] != '-' || !r[1]) { /* add a new file */ dynarray_add((void ***)&files, &nb_files, r); if (!multiple_files) {
--- a/tcc.c Fri Mar 21 20:25:14 2008 -0500 +++ b/tcc.c Sat Mar 29 13:51:33 2008 -0500 @@ -915,7 +915,8 @@ BufferedFile *bf; int i, len; - fd = open(filename, O_RDONLY | O_BINARY); + if (!filename) fd = 0; + else fd = open(filename, O_RDONLY | O_BINARY); if (fd < 0) return NULL; bf = xmalloc(sizeof(BufferedFile)); @@ -923,7 +924,8 @@ bf->buf_ptr = bf->buffer; bf->buf_end = bf->buffer; bf->buffer[0] = CH_EOB; /* put eob symbol */ - pstrcpy(bf->filename, sizeof(bf->filename), filename); + pstrcpy(bf->filename, sizeof(bf->filename), + filename ? filename : "*stdin*"); len = strlen(bf->filename); for (i = 0; i < len; i++) if (bf->filename[i] == '\\') @@ -931,7 +933,7 @@ bf->line_num = 1; bf->ifndef_macro = 0; bf->ifdef_stack_ptr = s1->ifdef_stack_ptr; - // printf("opening '%s'\n", filename); + return bf; } @@ -8917,20 +8919,27 @@ int tcc_add_file_internal(TCCState *s1, char *filename, int flags) { - char *ext, *filename1; + char *ext = 0; int fd, ret; BufferedFile *saved_file; - /* find source file type with extension */ - filename1 = strrchr(filename, '/'); - if (filename1) filename1++; - else filename1 = filename; - ext = strrchr(filename1, '.'); - if (ext) ext++; - - /* open the file */ saved_file = file; - file = tcc_open(s1, filename); + + // Treat filename "-" as /dev/stdin + if (*filename=='-' && !filename[1]) file = tcc_open(s1, 0); + else { + char *filename1; + + /* find source file type with extension */ + filename1 = strrchr(filename, '/'); + if (filename1) filename1++; + else filename1 = filename; + ext = strrchr(filename1, '.'); + if (ext) ext++; + + file = tcc_open(s1, filename); + } + if (tccg_verbose > !file) printf("%s file '%s'\n", file ? "Read" : "Tried", filename); if (!file) {