Because only character types are safe for strict aliasing.
POSIX requires them to be 8-bit and two's complement.
redo-ifchange $src conf/zstd.cflags.rc conf/zstd.libs.rc
read ZSTD_CFLAGS < conf/zstd.cflags.rc
read ZSTD_LIBS < conf/zstd.libs.rc
redo-ifchange $src conf/zstd.cflags.rc conf/zstd.libs.rc
read ZSTD_CFLAGS < conf/zstd.cflags.rc
read ZSTD_LIBS < conf/zstd.libs.rc
-${CC:-cc} $CFLAGS $ZSTD_CFLAGS -o $3 $src $ZSTD_LIBS
+${CC:-cc} -fstrict-aliasing $CFLAGS $ZSTD_CFLAGS -o $3 $src $ZSTD_LIBS
int rc = EXIT_FAILURE;
size_t srcSize = 8;
int rc = EXIT_FAILURE;
size_t srcSize = 8;
- uint8_t *src = malloc(srcSize);
+ char *src = malloc(srcSize);
if (src == NULL) {
fprintf(stderr, "can not allocate memory: %zu\n", srcSize);
goto Exit;
};
size_t dstSize = 0;
if (src == NULL) {
fprintf(stderr, "can not allocate memory: %zu\n", srcSize);
goto Exit;
};
size_t dstSize = 0;
size_t srcWantSize = 0;
size_t dstWantSize = 0;
size_t n = 0;
size_t srcWantSize = 0;
size_t dstWantSize = 0;
size_t n = 0;
return 1;
};
int rc = EXIT_FAILURE;
return 1;
};
int rc = EXIT_FAILURE;
- uint8_t *bufIn = NULL;
- uint8_t *bufOut = NULL;
+ char *bufIn = NULL;
+ char *bufOut = NULL;
const size_t bufInSize = ZSTD_DStreamInSize();
bufIn = malloc(bufInSize);
if (bufIn == NULL) {
const size_t bufInSize = ZSTD_DStreamInSize();
bufIn = malloc(bufInSize);
if (bufIn == NULL) {
if (n >= 8 && le32dec(bufIn) == 0x184D2A5D) {
// dictionary frame
size_t dictSize = (size_t)le32dec(bufIn + 4);
if (n >= 8 && le32dec(bufIn) == 0x184D2A5D) {
// dictionary frame
size_t dictSize = (size_t)le32dec(bufIn + 4);
- uint8_t *dict = malloc(dictSize);
+ char *dict = malloc(dictSize);
if (dict == NULL) {
fprintf(stderr, "insufficient memory for dictionary: %zu\n", dictSize);
goto Exit;
if (dict == NULL) {
fprintf(stderr, "insufficient memory for dictionary: %zu\n", dictSize);
goto Exit;
free(dict);
goto Exit;
};
free(dict);
goto Exit;
};
- uint8_t *buf = malloc(bufSize);
+ char *buf = malloc(bufSize);
if (buf == NULL) {
fprintf(
stderr, "insufficient memory for dictionary: %llu\n", bufSize);
if (buf == NULL) {
fprintf(
stderr, "insufficient memory for dictionary: %llu\n", bufSize);