aboutsummaryrefslogtreecommitdiffstats
path: root/src/glsl/glcpp
diff options
context:
space:
mode:
authorCarl Worth <[email protected]>2010-08-23 09:42:14 -0700
committerCarl Worth <[email protected]>2010-08-23 10:48:10 -0700
commitcf8bb19a114d753bca94f920b87dcf51aa26af99 (patch)
treedf6fb74db01afc75a043e7bffa17eca99c0d503e /src/glsl/glcpp
parenteab206510fc76407ee8b18aacafadd0d5406e483 (diff)
glcpp: Fix segfault in standalone preprocessor for "file not found", etc.
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.
Diffstat (limited to 'src/glsl/glcpp')
-rw-r--r--src/glsl/glcpp/glcpp.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/glsl/glcpp/glcpp.c b/src/glsl/glcpp/glcpp.c
index e49a1df79c0..011058a36ac 100644
--- a/src/glsl/glcpp/glcpp.c
+++ b/src/glsl/glcpp/glcpp.c
@@ -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);