diff options
author | Anton Kling <anton@kling.gg> | 2024-02-07 11:36:21 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-02-07 22:25:47 +0100 |
commit | 35958c8c6b600482f68fef08ac26547b5655e987 (patch) | |
tree | a3329136adc1b92885c60462e7dd74c98eaa0953 /userland/libppm | |
parent | b7fa1457727338416499d1b0144f1042a6878a97 (diff) |
A lot of small changes
Diffstat (limited to 'userland/libppm')
-rw-r--r-- | userland/libppm/ppm.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/userland/libppm/ppm.c b/userland/libppm/ppm.c index 030c68d..9013e27 100644 --- a/userland/libppm/ppm.c +++ b/userland/libppm/ppm.c @@ -64,36 +64,47 @@ int load_ppm6_file(FILE *fp, const struct PPM_IMAGE *img, uint32_t buf_width, printf("end malloc\n"); printf("fread"); - int rc = fread(rgb, 3, n_pixels, fp); + const int rc = fread(rgb, 3, n_pixels, fp); if (0 == rc) return 0; printf("end fread"); uint32_t *p = rgb; + u32 buf_size = buf_height * buf_width; if (1 == modifier) { - for (; rc--; p = ((uint8_t *)p) + 3) { - uint32_t v = *p; - buffer[cy * buf_width + cx] = - ((v & 0xFF) << 16) | ((v & 0xFF00)) | ((v & 0xFF0000) >> 16); + for (int i = 0; i < rc && i < buf_size; i++, p = ((uint8_t *)p) + 3) { + if (cx > buf_width) { + i--; + } else { + uint32_t v = *p; + buffer[cy * buf_width + cx] = + ((v & 0xFF) << 16) | ((v & 0xFF00)) | ((v & 0xFF0000) >> 16); + } cx++; if (cx == img->width) { cx = 0; cy++; + i--; continue; } } } else { - for (; rc--; p = ((uint8_t *)p) + 3) { + for (int i = 0; i < rc && i < buf_size; i++, p = ((uint8_t *)p) + 3) { ((uint8_t *)p)[0] *= modifier; ((uint8_t *)p)[1] *= modifier; ((uint8_t *)p)[2] *= modifier; - uint32_t v = *p; - buffer[cy * buf_width + cx] = - ((v & 0xFF) << 16) | ((v & 0xFF00)) | ((v & 0xFF0000) >> 16); + if (cx > buf_width) { + i--; + } else { + uint32_t v = *p; + buffer[cy * buf_width + cx] = + ((v & 0xFF) << 16) | ((v & 0xFF00)) | ((v & 0xFF0000) >> 16); + } cx++; if (cx == img->width) { cx = 0; cy++; + i--; continue; } } |