Introduction
Introduction Statistics Contact Development Disclaimer Help
Refactor ff2pam(1) - farbfeld - suckless image format with conversion tools
git clone git://git.suckless.org/farbfeld
Log
Files
Refs
README
LICENSE
---
commit a78b5dc6efaca25830c31ac17ef3ff81a493314d
parent 9a992f810d2a11751026ac352f435be1717e0979
Author: Laslo Hunhold <[email protected]>
Date: Wed, 12 Apr 2017 23:39:41 +0200
Refactor ff2pam(1)
I chose to go with a row-based-approach here, which is a bit easier
to read and is somewhat "closer" to the input data.
Diffstat:
M ff2pam.c | 52 ++++++++++++++++-------------…
1 file changed, 27 insertions(+), 25 deletions(-)
---
diff --git a/ff2pam.c b/ff2pam.c
@@ -5,28 +5,39 @@
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "util.h"
+static void
+usage(void)
+{
+ fprintf(stderr, "usage: %s\n", argv0);
+ exit(1);
+}
+
int
main(int argc, char *argv[])
{
- uint32_t width, height;
- char buf[BUFSIZ];
- size_t n, t;
+ size_t rowlen;
+ uint32_t width, height, i;
+ uint16_t *row;
+ /* arguments */
argv0 = argv[0], argc--, argv++;
if (argc) {
- fprintf(stderr, "usage: %s\n", argv0);
- return 1;
+ usage();
}
- read_ff_header(&width, &height);
+ /* prepare */
+ ff_read_header(&width, &height);
+ row = ereallocarray(NULL, width, (sizeof("RGBA") - 1) * sizeof(uint16_…
+ rowlen = width * (sizeof("RGBA") - 1);
- /* write PAM header */
+ /* write data */
printf("P7\n"
"WIDTH %" PRIu32 "\n"
"HEIGHT %" PRIu32 "\n"
@@ -36,29 +47,20 @@ main(int argc, char *argv[])
"ENDHDR\n",
width, height);
- /* write image */
- t = (size_t)width * (size_t)height * sizeof(uint16_t) * (sizeof("RGBA"…
- for (; (n = fread(buf, 1, sizeof(buf) <= t ? sizeof(buf) : t, stdin));…
- t -= n;
- fwrite(buf, 1, n, stdout);
-
- if (feof(stdin)) {
- break;
- }
- if (ferror(stdin)) {
- fprintf(stderr, "%s: read: %s\n", argv0, strerror(errn…
+ for (i = 0; i < height; i++) {
+ if (fread(row, sizeof(uint16_t), rowlen, stdin) != rowlen) {
+ if (ferror(stdin)) {
+ fprintf(stderr, "%s: fread: %s\n", argv0, stre…
+ } else {
+ fprintf(stderr, "%s: unexpected end of file\n"…
+ }
return 1;
}
- if (ferror(stdout)) {
- fprintf(stderr, "%s: write: %s\n", argv0, strerror(err…
+ if (fwrite(row, sizeof(uint16_t), rowlen, stdout) != rowlen) {
+ fprintf(stderr, "%s: fwrite: %s\n", argv0, strerror(er…
return 1;
}
}
- if (t > 0) {
- fprintf(stderr, "%s: file too short\n", argv0);
- return 1;
- }
-
return 0;
}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.