glcpp: Fix segfault in standalone preprocessor for "file not found", etc.
authorCarl Worth <cworth@cworth.org>
Mon, 23 Aug 2010 16:42:14 +0000 (09:42 -0700)
committerCarl Worth <cworth@cworth.org>
Mon, 23 Aug 2010 17:48:10 +0000 (10:48 -0700)
This error message was missing so that the program would simply
segfault if the provided filename could not be opened for some reason.

While we're at it, we add explicit support for a filename of "-" to
indicate input from stdin.

src/glsl/glcpp/glcpp.c

index e49a1df79c0ab4649dafed2ccd00589cdf1c3f14..011058a36acc7e7224853fd622a41dca8e100a56 100644 (file)
@@ -25,6 +25,8 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <string.h>
+#include <errno.h>
 #include "glcpp.h"
 
 extern int yydebug;
@@ -35,10 +37,18 @@ load_text_file(void *ctx, const char *file_name)
        char *text = NULL;
        struct stat st;
        ssize_t total_read = 0;
-       int fd = file_name == NULL ? STDIN_FILENO : open(file_name, O_RDONLY);
-
-       if (fd < 0) {
-               return NULL;
+       int fd;
+
+       if (file_name == NULL || strcmp(file_name, "-") == 0) {
+          fd = STDIN_FILENO;
+       } else {
+          fd = open (file_name, O_RDONLY);
+
+          if (fd < 0) {
+             fprintf (stderr, "Failed to open file %s: %s\n",
+                      file_name, strerror (errno));
+             return NULL;
+          }
        }
 
        if (fstat(fd, & st) == 0) {
@@ -82,6 +92,9 @@ main (int argc, char *argv[])
        }
 
        shader = load_text_file(ctx, filename);
+       if (shader == NULL)
+          return 1;
+
        ret = preprocess(ctx, &shader, &info_log, NULL);
 
        printf("%s", shader);