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) {