From 8a333d762da7e5e836e771a94dc57881bcdd31fc Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 18 Nov 2010 22:42:58 -0500 Subject: [PATCH] Patched to compile on Windows. --- misc/lemon.c | 3 ++- mojoshader_assembler.c | 2 +- mojoshader_common.c | 12 ++++++------ mojoshader_internal.h | 15 ++++++++++++--- utils/finderrors.c | 13 ++++++++++--- utils/mojoshader-compiler.c | 4 ++-- 6 files changed, 33 insertions(+), 16 deletions(-) diff --git a/misc/lemon.c b/misc/lemon.c index 5b0fcf3a..e4c67b63 100644 --- a/misc/lemon.c +++ b/misc/lemon.c @@ -26,7 +26,8 @@ #endif #ifdef __WIN32__ -extern int access(); +//extern int access(); +#include #else #include #endif diff --git a/mojoshader_assembler.c b/mojoshader_assembler.c index 5ff6cc25..36e9c914 100644 --- a/mojoshader_assembler.c +++ b/mojoshader_assembler.c @@ -1650,7 +1650,7 @@ static const MOJOSHADER_parseData *build_final_assembly(Context *ctx) // get the final bytecode! const unsigned int output_len = (unsigned int) buffer_size(ctx->output); - unsigned char *bytecode = buffer_flatten(ctx->output); + unsigned char *bytecode = (unsigned char *) buffer_flatten(ctx->output); buffer_destroy(ctx->output); ctx->output = NULL; diff --git a/mojoshader_common.c b/mojoshader_common.c index 05b54d51..dcbe42b8 100644 --- a/mojoshader_common.c +++ b/mojoshader_common.c @@ -589,7 +589,7 @@ Buffer *buffer_create(size_t blksz, MOJOSHADER_malloc m, return buffer; } // buffer_create -void *buffer_reserve(Buffer *buffer, const size_t len) +char *buffer_reserve(Buffer *buffer, const size_t len) { // note that we make the blocks bigger than blocksize when we have enough // data to overfill a fresh block, to reduce allocations. @@ -607,7 +607,7 @@ void *buffer_reserve(Buffer *buffer, const size_t len) buffer->tail->bytes += len; buffer->total_bytes += len; assert(buffer->tail->bytes <= blocksize); - return buffer->tail->data + tailbytes; + return (char *) buffer->tail->data + tailbytes; } // if } // if @@ -630,7 +630,7 @@ void *buffer_reserve(Buffer *buffer, const size_t len) buffer->total_bytes += len; - return item->data; + return (char *) item->data; } // buffer_reserve int buffer_append(Buffer *buffer, const void *_data, size_t len) @@ -739,7 +739,7 @@ void buffer_empty(Buffer *buffer) buffer->total_bytes = 0; } // buffer_empty -void *buffer_flatten(Buffer *buffer) +char *buffer_flatten(Buffer *buffer) { char *retval = (char *) buffer->m(buffer->total_bytes + 1, buffer->d); if (retval == NULL) @@ -764,7 +764,7 @@ void *buffer_flatten(Buffer *buffer) return retval; } // buffer_flatten -void *buffer_merge(Buffer **buffers, const size_t n, size_t *_len) +char *buffer_merge(Buffer **buffers, const size_t n, size_t *_len) { Buffer *first = NULL; size_t len = 0; @@ -779,7 +779,7 @@ void *buffer_merge(Buffer **buffers, const size_t n, size_t *_len) len += buffer->total_bytes; } // for - char *retval = (char *) first ? first->m(len + 1, first->d) : NULL; + char *retval = (char *) (first ? first->m(len + 1, first->d) : NULL); if (retval == NULL) { *_len = 0; diff --git a/mojoshader_internal.h b/mojoshader_internal.h index 4b9c8abd..03654547 100644 --- a/mojoshader_internal.h +++ b/mojoshader_internal.h @@ -85,13 +85,22 @@ typedef unsigned int uint; // this is a printf() helper. don't use for code. #include #define va_copy(a, b) a = b #define snprintf _snprintf // !!! FIXME: not a safe replacement! +#define vsnprintf _vsnprintf // !!! FIXME: not a safe replacement! #define strcasecmp stricmp +#define strncasecmp strnicmp typedef unsigned __int8 uint8; typedef unsigned __int16 uint16; typedef unsigned __int32 uint32; typedef unsigned __int64 uint64; typedef __int32 int32; typedef __int64 int64; +#ifdef _WIN64 +typedef __int64 ssize_t; +#elif defined _WIN32 +typedef __int32 ssize_t; +#else +#error Please define your platform. +#endif // Warning Level 4 considered harmful. :) #pragma warning(disable: 4100) // "unreferenced formal parameter" #pragma warning(disable: 4389) // "signed/unsigned mismatch" @@ -214,14 +223,14 @@ void errorlist_destroy(ErrorList *list); typedef struct Buffer Buffer; Buffer *buffer_create(size_t blksz,MOJOSHADER_malloc m,MOJOSHADER_free f,void *d); -void *buffer_reserve(Buffer *buffer, const size_t len); +char *buffer_reserve(Buffer *buffer, const size_t len); int buffer_append(Buffer *buffer, const void *_data, size_t len); int buffer_append_fmt(Buffer *buffer, const char *fmt, ...) ISPRINTF(2,3); int buffer_append_va(Buffer *buffer, const char *fmt, va_list va); size_t buffer_size(Buffer *buffer); void buffer_empty(Buffer *buffer); -void *buffer_flatten(Buffer *buffer); -void *buffer_merge(Buffer **buffers, const size_t n, size_t *_len); +char *buffer_flatten(Buffer *buffer); +char *buffer_merge(Buffer **buffers, const size_t n, size_t *_len); void buffer_destroy(Buffer *buffer); ssize_t buffer_find(Buffer *buffer, const size_t start, const void *data, const size_t len); diff --git a/utils/finderrors.c b/utils/finderrors.c index b7cc175e..a49ecd2c 100644 --- a/utils/finderrors.c +++ b/utils/finderrors.c @@ -132,10 +132,17 @@ static int do_file(const char *profile, const char *dname, const char *fn, int * } #else const MOJOSHADER_parseData *pd = MOJOSHADER_parse(profile, buf, rc, NULL, 0, NULL, NULL, NULL); - if (pd->error != NULL) - report("FAIL: %s (position %d) %s\n", fname, pd->error_position, pd->error); - else + if (pd->error_count == 0) report("PASS: %s\n", fname); + else + { + int i; + for (i = 0; i < pd->error_count; i++) + { + report("FAIL: %s (position %d) %s\n", pd->errors[i].filename, + pd->errors[i].error_position, pd->errors[i].error); + } // for + } // else MOJOSHADER_freeParseData(pd); #endif diff --git a/utils/mojoshader-compiler.c b/utils/mojoshader-compiler.c index 2d1ad025..dc40e88a 100644 --- a/utils/mojoshader-compiler.c +++ b/utils/mojoshader-compiler.c @@ -14,8 +14,8 @@ #include "mojoshader.h" -#ifndef _WIN32 -#define stricmp(a,b) strcasecmp(a,b) +#ifdef _WIN32 +#define snprintf _snprintf // !!! FIXME: not a safe replacement! #endif static const char **include_paths = NULL;