Mesa (master): glsl: Make builtin_compiler portable for non-unices.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Wed Jan 12 16:59:40 UTC 2011


Module: Mesa
Branch: master
Commit: 0035d1d902f34a88ec745925284fe3b768fac261
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0035d1d902f34a88ec745925284fe3b768fac261

Author: José Fonseca <jfonseca at vmware.com>
Date:   Wed Jan 12 16:31:07 2011 +0000

glsl: Make builtin_compiler portable for non-unices.

---

 src/glsl/main.cpp |   59 +++++++++++++++++++++++++---------------------------
 1 files changed, 28 insertions(+), 31 deletions(-)

diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index c8fc267..847540d 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -24,11 +24,6 @@
 #include <cstdio>
 #include <getopt.h>
 
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-
 #include "ast.h"
 #include "glsl_parser_extras.h"
 #include "glsl_parser.h"
@@ -110,38 +105,40 @@ static char *
 load_text_file(void *ctx, const char *file_name)
 {
 	char *text = NULL;
-	struct stat st;
-	ssize_t total_read = 0;
-	int fd = open(file_name, O_RDONLY);
+	size_t size;
+	size_t total_read = 0;
+	FILE *fp = fopen(file_name, "rb");
 
-	if (fd < 0) {
+	if (!fp) {
 		return NULL;
 	}
 
-	if (fstat(fd, & st) == 0) {
-	   text = (char *) talloc_size(ctx, st.st_size + 1);
-		if (text != NULL) {
-			do {
-				ssize_t bytes = read(fd, text + total_read,
-						     st.st_size - total_read);
-				if (bytes < 0) {
-					free(text);
-					text = NULL;
-					break;
-				}
-
-				if (bytes == 0) {
-					break;
-				}
-
-				total_read += bytes;
-			} while (total_read < st.st_size);
-
-			text[total_read] = '\0';
-		}
+	fseek(fp, 0L, SEEK_END);
+	size = ftell(fp);
+	fseek(fp, 0L, SEEK_SET);
+
+	text = (char *) talloc_size(ctx, size + 1);
+	if (text != NULL) {
+		do {
+			size_t bytes = fread(text + total_read,
+					     1, size - total_read, fp);
+			if (bytes < size - total_read) {
+				free(text);
+				text = NULL;
+				break;
+			}
+
+			if (bytes == 0) {
+				break;
+			}
+
+			total_read += bytes;
+		} while (total_read < size);
+
+		text[total_read] = '\0';
 	}
 
-	close(fd);
+	fclose(fp);
 
 	return text;
 }




More information about the mesa-commit mailing list