Fix pointer math ('unsigned long' will truncate the pointer).

[MKISOFS/SCHILY TOOLS]
Fix the invalid assumption that a 'long' variable can hold pointers. Will be sent upstream.

With this the whole of reactos and rostests builds on x64. Rosapps still has issues.

svn path=/trunk/; revision=75399
This commit is contained in:
David Quintana
2017-07-24 18:37:25 +00:00
parent f8e1661549
commit b0469b9227
5 changed files with 30 additions and 27 deletions
+2 -2
View File
@@ -74,7 +74,7 @@ ULONG CMSZipCodec::Compress(void* OutputBuffer,
ZStream.next_in = (unsigned char*)InputBuffer;
ZStream.avail_in = InputLength;
ZStream.next_out = (unsigned char*)((unsigned long)OutputBuffer + 2);
ZStream.next_out = ((unsigned char *)OutputBuffer + 2);
ZStream.avail_out = CAB_BLOCKSIZE + 12;
/* WindowBits is passed < 0 to tell that there is no zlib header */
@@ -137,7 +137,7 @@ ULONG CMSZipCodec::Uncompress(void* OutputBuffer,
return CS_BADSTREAM;
}
ZStream.next_in = (unsigned char*)((unsigned long)InputBuffer + 2);
ZStream.next_in = ((unsigned char*)InputBuffer + 2);
ZStream.avail_in = InputLength - 2;
ZStream.next_out = (unsigned char*)OutputBuffer;
ZStream.avail_out = CAB_BLOCKSIZE + 12;
@@ -47,6 +47,9 @@
#ifndef _SCHILY_CCOMDEFS_H
#include <schily/ccomdefs.h>
#endif
#ifndef _SCHILY_STDINT_H
#include <schily/stdint.h>
#endif
#ifdef __cplusplus
extern "C" {
@@ -464,12 +467,12 @@ extern size_t wcslcatl __PR((wchar_t *, size_t, ...));
extern int wcseql __PR((const wchar_t *, const wchar_t *));
#endif
#ifdef va_arg
extern int format __PR((void (*)(char, long), long, const char *,
extern int format __PR((void (*)(char, intptr_t), intptr_t, const char *,
va_list));
extern int fprformat __PR((long, const char *, va_list));
extern int fprformat __PR((intptr_t, const char *, va_list));
#else
extern int format __PR((void (*)(char, long), long, const char *, void *));
extern int fprformat __PR((long, const char *, void *));
extern int format __PR((void (*)(char, intptr_t), intptr_t, const char *, void *));
extern int fprformat __PR((intptr_t, const char *, void *));
#endif
extern int ftoes __PR((char *, double, int, int));
@@ -138,9 +138,9 @@ typedef struct f_args {
char *ptr; /* Current ptr in buf */
int cnt; /* Free char count in buf */
#else
void (*outf)__PR((char, long)); /* Func from format(fun, arg) */
void (*outf)__PR((char, intptr_t)); /* Func from format(fun, arg) */
#endif
long farg; /* Arg from format (fun, arg) */
intptr_t farg; /* Arg from format (fun, arg) */
int minusflag; /* Fieldwidth is negative */
int flags; /* General flags (+-#) */
int fldwidth; /* Field width as in %3d */
@@ -227,7 +227,7 @@ xflsbuf(c, ap)
#define FORMAT_FUNC_NAME format
#define FORMAT_FUNC_PARM
#define FORMAT_FUNC_PROTO_DECL void (*fun)(char, long),
#define FORMAT_FUNC_PROTO_DECL void (*fun)(char, intptr_t),
#define FORMAT_FUNC_KR_DECL register void (*fun)();
#define FORMAT_FUNC_KR_ARGS fun,
@@ -243,14 +243,14 @@ xflsbuf(c, ap)
#ifdef PROTOTYPES
EXPORT int
FORMAT_FUNC_NAME(FORMAT_FUNC_PROTO_DECL
long farg,
intptr_t farg,
const char *fmt,
va_list oargs)
#else
EXPORT int
FORMAT_FUNC_NAME(FORMAT_FUNC_KR_ARGS farg, fmt, oargs)
FORMAT_FUNC_KR_DECL
register long farg;
register intptr_t farg;
register char *fmt;
va_list oargs;
#endif
@@ -292,7 +292,7 @@ FORMAT_FUNC_NAME(FORMAT_FUNC_KR_ARGS farg, fmt, oargs)
fa.ptr = fa.iobuf;
fa.fp = (FILE *)farg;
fa.err = 0;
farg = fa.farg = (long)&fa;
farg = fa.farg = (intptr_t)&fa;
} else { /* recursion */
farg &= ~1;
}
@@ -1023,7 +1023,7 @@ error sizeof (ptrdiff_t) is unknown
}
out:
#ifdef FORMAT_BUFFER
if (farg == (long)&fa) { /* Top level call, flush buffer */
if (farg == (intptr_t)&fa) { /* Top level call, flush buffer */
if (fa.err)
return (EOF);
if ((fa.ptr != fa.iobuf) &&
@@ -1208,9 +1208,9 @@ prbuf(s, fa)
{
register int diff;
register int rfillc;
register long arg = fa->farg;
register intptr_t arg = fa->farg;
#ifdef FORMAT_FUNC_PARM
register void (*fun) __PR((char, long)) = fa->outf;
register void (*fun) __PR((char, intptr_t)) = fa->outf;
#endif
register int count;
register int lzero = 0;
@@ -1274,9 +1274,9 @@ prc(c, fa)
{
register int diff;
register int rfillc;
register long arg = fa->farg;
register intptr_t arg = fa->farg;
#ifdef FORMAT_FUNC_PARM
register void (*fun) __PR((char, long)) = fa->outf;
register void (*fun) __PR((char, intptr_t)) = fa->outf;
#endif
register int count;
@@ -57,7 +57,7 @@ js_printf(form, va_alist)
#else
va_start(args);
#endif
ret = fprformat((long)stdout, form, args);
ret = fprformat((intptr_t)stdout, form, args);
va_end(args);
return (ret);
}
@@ -82,7 +82,7 @@ js_fprintf(file, form, va_alist)
#else
va_start(args);
#endif
ret = fprformat((long)file, form, args);
ret = fprformat((intptr_t)file, form, args);
va_end(args);
return (ret);
}
@@ -103,7 +103,7 @@ typedef struct {
} *BUF, _BUF;
LOCAL void _bflush __PR((BUF));
LOCAL void _bput __PR((char, long));
LOCAL void _bput __PR((char, intptr_t));
EXPORT int js_fprintf __PR((FILE *, const char *, ...));
EXPORT int js_printf __PR((const char *, ...));
@@ -120,12 +120,12 @@ _bflush(bp)
#ifdef PROTOTYPES
LOCAL void
_bput(char c, long l)
_bput(char c, intptr_t l)
#else
LOCAL void
_bput(c, l)
char c;
long l;
intptr_t l;
#endif
{
register BUF bp = (BUF)l;
@@ -158,7 +158,7 @@ js_printf(form, va_alist)
#else
va_start(args);
#endif
format(_bput, (long)&bb, form, args);
format(_bput, (intptr_t)&bb, form, args);
va_end(args);
if (bb.cnt < BFSIZ)
_bflush(&bb);
@@ -189,7 +189,7 @@ js_fprintf(file, form, va_alist)
#else
va_start(args);
#endif
format(_bput, (long)&bb, form, args);
format(_bput, (intptr_t)&bb, form, args);
va_end(args);
if (bb.cnt < BFSIZ)
_bflush(&bb);
@@ -33,12 +33,12 @@ typedef struct {
#ifdef PROTOTYPES
static void
_cput(char c, long l)
_cput(char c, intptr_t l)
#else
static void
_cput(c, l)
char c;
long l;
intptr_t l;
#endif
{
register BUF bp = (BUF)l;
@@ -78,7 +78,7 @@ js_snprintf(buf, maxcnt, form, va_alist)
#else
va_start(args);
#endif
cnt = format(_cput, (long)&bb, form, args);
cnt = format(_cput, (intptr_t)&bb, form, args);
va_end(args);
if (maxcnt > 0)
*(bb.ptr) = '\0';