From f51770cd64d45e14afb6cad5fd6ddf8ffb61a503 Mon Sep 17 00:00:00 2001 From: Eric Engle Date: Tue, 21 Jan 2025 14:13:29 -0500 Subject: [PATCH] Trying this simple change... --- src/g2cio.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/g2cio.c b/src/g2cio.c index b1dcf170..50801eb1 100644 --- a/src/g2cio.c +++ b/src/g2cio.c @@ -41,7 +41,7 @@ int g2c_file_io(FILE *f, int write, int g2ctype, void *var) { void *void_be; - char *bvar = NULL; + signed char *bvar = NULL; short *svar = NULL; int *ivar = NULL; long long int *i64var = NULL; @@ -64,7 +64,15 @@ g2c_file_io(FILE *f, int write, int g2ctype, void *var) void_be = &byte_be; if (write) { - byte_tmp = *bvar; + /* Are we writing a negative number? */ + if (g2ctype == G2C_BYTE && *bvar < 0) + { + byte_tmp = -1 * *bvar; /* Store as positive. */ + byte_tmp |= 1UL << BITSHIFT_7; /* Set sign bit. */ + } + else + byte_tmp = *bvar; + /* Convert result to big-endian. */ byte_be = byte_tmp; } @@ -150,6 +158,13 @@ g2c_file_io(FILE *f, int write, int g2ctype, void *var) case G2C_UBYTE: /* No conversion needed for one-byte values. */ *bvar = byte_be; + + /* Did we read a negative number? Check the sign bit... */ + if (g2ctype == G2C_BYTE && *bvar & 1 << BITSHIFT_7) + { + *bvar &= ~(1UL << BITSHIFT_7); /* Clear sign bit. */ + *bvar *= -1; /* Make it negative. */ + } break; case G2C_SHORT: case G2C_USHORT: