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.
diff --git a/src/glsl/glcpp/glcpp.c b/src/glsl/glcpp/glcpp.c
index e49a1df..011058a 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 @@
char *text = NULL;
struct stat st;
ssize_t total_read = 0;
- int fd = file_name == NULL ? STDIN_FILENO : open(file_name, O_RDONLY);
+ int fd;
- if (fd < 0) {
- return NULL;
+ 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 @@
}
shader = load_text_file(ctx, filename);
+ if (shader == NULL)
+ return 1;
+
ret = preprocess(ctx, &shader, &info_log, NULL);
printf("%s", shader);