Introduction
Introduction Statistics Contact Development Disclaimer Help
Add util.{c|h} to deduplicate code - farbfeld - suckless image format with conv…
git clone git://git.suckless.org/farbfeld
Log
Files
Refs
README
LICENSE
---
commit d25f3c73afa5beb83121c9b033bc0146c755ca3a
parent d0ce307972fbc95073666e92043fc7012ffbefdf
Author: Laslo Hunhold <[email protected]>
Date: Thu, 30 Mar 2017 09:49:48 +0200
Add util.{c|h} to deduplicate code
Diffstat:
M ff2jpg.c | 19 +++++--------------
M ff2pam.c | 18 ++++--------------
M ff2png.c | 16 ++++------------
M ff2ppm.c | 16 +++-------------
M jpg2ff.c | 15 ++++-----------
M png2ff.c | 15 ++++-----------
A util.c | 51 +++++++++++++++++++++++++++++…
A util.h | 10 ++++++++++
8 files changed, 85 insertions(+), 75 deletions(-)
---
diff --git a/ff2jpg.c b/ff2jpg.c
@@ -11,8 +11,7 @@
#include <jpeglib.h>
#include "arg.h"
-
-char *argv0;
+#include "util.h"
METHODDEF(void)
jpeg_error(j_common_ptr js)
@@ -37,7 +36,7 @@ main(int argc, char *argv[])
struct jpeg_error_mgr jerr;
size_t rowlen;
uint64_t a;
- uint32_t hdr[4], width, height, i, j, k, l;
+ uint32_t width, height, i, j, k, l;
uint16_t *row, mask[3] = { 0xffff, 0xffff, 0xffff };
uint8_t *rowout;
char *color, colfmt[] = "%#x%#x%#x";
@@ -75,19 +74,11 @@ main(int argc, char *argv[])
usage();
} ARGEND
- if (argc)
+ if (argc) {
usage();
-
- /* header */
- if (fread(hdr, sizeof(*hdr), 4, stdin) != 4) {
- goto readerr;
}
- if (memcmp("farbfeld", hdr, sizeof("farbfeld") - 1)) {
- fprintf(stderr, "%s: invalid magic value\n", argv0);
- return 1;
- }
- width = ntohl(hdr[2]);
- height = ntohl(hdr[3]);
+
+ read_ff_header(&width, &height);
if (width > SIZE_MAX / ((sizeof("RGBA") - 1) * sizeof(uint16_t))) {
fprintf(stderr, "%s: row length integer overflow\n", argv0);
diff --git a/ff2pam.c b/ff2pam.c
@@ -8,12 +8,12 @@
#include <string.h>
#include <unistd.h>
-static char *argv0;
+#include "util.h"
int
main(int argc, char *argv[])
{
- uint32_t hdr[4], width, height;
+ uint32_t width, height;
char buf[BUFSIZ];
size_t n, t;
@@ -24,19 +24,9 @@ main(int argc, char *argv[])
return 1;
}
- /* header */
- if (fread(hdr, sizeof(*hdr), 4, stdin) != 4) {
- fprintf(stderr, "%s: file too short\n", argv0);
- return 1;
- }
- if (memcmp("farbfeld", hdr, sizeof("farbfeld") - 1)) {
- fprintf(stderr, "%s: invalid magic value\n", argv0);
- return 1;
- }
- width = ntohl(hdr[2]);
- height = ntohl(hdr[3]);
+ read_ff_header(&width, &height);
- /* write header */
+ /* write PAM header */
printf("P7\n"
"WIDTH %" PRIu32 "\n"
"HEIGHT %" PRIu32 "\n"
diff --git a/ff2png.c b/ff2png.c
@@ -9,11 +9,12 @@
#include <png.h>
-static char *argv0;
+#include "util.h"
void
pngerr(png_structp pngs, const char *msg)
{
+ (void)pngs;
fprintf(stderr, "%s: libpng: %s\n", argv0, msg);
exit(1);
}
@@ -24,7 +25,7 @@ main(int argc, char *argv[])
png_structp pngs;
png_infop pngi;
size_t rowlen;
- uint32_t hdr[4], width, height, i;
+ uint32_t width, height, i;
uint16_t *row;
argv0 = argv[0], argc--, argv++;
@@ -34,16 +35,7 @@ main(int argc, char *argv[])
return 1;
}
- /* header */
- if (fread(hdr, sizeof(*hdr), 4, stdin) != 4) {
- goto readerr;
- }
- if (memcmp("farbfeld", hdr, sizeof("farbfeld") - 1)) {
- fprintf(stderr, "%s: invalid magic value\n", argv0);
- return 1;
- }
- width = ntohl(hdr[2]);
- height = ntohl(hdr[3]);
+ read_ff_header(&width, &height);
/* load png */
pngs = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, pngerr,
diff --git a/ff2ppm.c b/ff2ppm.c
@@ -9,8 +9,7 @@
#include <string.h>
#include "arg.h"
-
-char *argv0;
+#include "util.h"
static void
usage(void)
@@ -24,7 +23,7 @@ main(int argc, char *argv[])
{
size_t rowlen;
uint64_t a;
- uint32_t hdr[4], width, height, i, j, k, l;
+ uint32_t width, height, i, j, k, l;
uint16_t *row, mask[3] = { 0xffff, 0xffff, 0xffff };
uint8_t *rowout;
char *color, colfmt[] = "%#x%#x%#x";
@@ -58,16 +57,7 @@ main(int argc, char *argv[])
if (argc)
usage();
- /* header */
- if (fread(hdr, sizeof(*hdr), 4, stdin) != 4) {
- goto readerr;
- }
- if (memcmp("farbfeld", hdr, sizeof("farbfeld") - 1)) {
- fprintf(stderr, "%s: invalid magic value\n", argv0);
- return 1;
- }
- width = ntohl(hdr[2]);
- height = ntohl(hdr[3]);
+ read_ff_header(&width, &height);
if (width > SIZE_MAX / ((sizeof("RGBA") - 1) * sizeof(uint16_t))) {
fprintf(stderr, "%s: row length integer overflow\n", argv0);
diff --git a/jpg2ff.c b/jpg2ff.c
@@ -8,7 +8,7 @@
#include <jpeglib.h>
-static char *argv0;
+#include "util.h"
METHODDEF(void)
jpeg_error(j_common_ptr js)
@@ -23,7 +23,7 @@ main(int argc, char *argv[])
{
struct jpeg_decompress_struct js;
struct jpeg_error_mgr jerr;
- uint32_t width, height, tmp32;
+ uint32_t width, height;
uint16_t *row;
size_t rowlen, i;
JSAMPARRAY jpgrow;
@@ -63,14 +63,8 @@ main(int argc, char *argv[])
return 1;
}
- /* write header */
- fputs("farbfeld", stdout);
- tmp32 = htonl(width);
- if (fwrite(&tmp32, sizeof(uint32_t), 1, stdout) != 1)
- goto writerr;
- tmp32 = htonl(height);
- if (fwrite(&tmp32, sizeof(uint32_t), 1, stdout) != 1)
- goto writerr;
+ /* write data */
+ write_ff_header(width, height);
while (js.output_scanline < js.output_height) {
/* jpeg_read_scanlines expects an array of pointers to
@@ -87,7 +81,6 @@ main(int argc, char *argv[])
row[4*i + 3] = htons(65535);
}
- /* write data */
if (fwrite(row, sizeof(uint16_t), rowlen, stdout) != rowlen)
goto writerr;
}
diff --git a/png2ff.c b/png2ff.c
@@ -8,7 +8,7 @@
#include <png.h>
-static char *argv0;
+#include "util.h"
void
pngerr(png_structp pngs, const char *msg)
@@ -22,7 +22,7 @@ main(int argc, char *argv[])
{
png_structp pngs;
png_infop pngi;
- uint32_t width, height, rowlen, tmp32, r, i;
+ uint32_t width, height, rowlen, r, i;
uint16_t *row;
uint8_t **pngrows;
@@ -66,16 +66,9 @@ main(int argc, char *argv[])
return 1;
}
- /* write header */
- fputs("farbfeld", stdout);
- tmp32 = htonl(width);
- if (fwrite(&tmp32, sizeof(uint32_t), 1, stdout) != 1)
- goto writerr;
- tmp32 = htonl(height);
- if (fwrite(&tmp32, sizeof(uint32_t), 1, stdout) != 1)
- goto writerr;
-
/* write data */
+ write_ff_header(width, height);
+
switch(png_get_bit_depth(pngs, pngi)) {
case 8:
for (r = 0; r < height; ++r) {
diff --git a/util.c b/util.c
@@ -0,0 +1,51 @@
+/* See LICENSE file for copyright and license details. */
+#include <arpa/inet.h>
+
+#include <errno.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "util.h"
+
+char *argv0;
+
+void
+read_ff_header(uint32_t *width, uint32_t *height)
+{
+ uint32_t hdr[4];
+
+ if (fread(hdr, sizeof(*hdr), LEN(hdr), stdin) != LEN(hdr)) {
+ fprintf(stderr, "%s: fread: %s", argv0, strerror(errno));
+ exit(1);
+ }
+
+ if (memcmp("farbfeld", hdr, sizeof("farbfeld") - 1)) {
+ fprintf(stderr, "%s: invalid magic value\n", argv0);
+ exit(1);
+ }
+
+ *width = ntohl(hdr[2]);
+ *height = ntohl(hdr[3]);
+}
+
+void
+write_ff_header(uint32_t width, uint32_t height)
+{
+ uint32_t tmp;
+
+ fputs("farbfeld", stdout);
+
+ tmp = htonl(width);
+ if (fwrite(&tmp, sizeof(tmp), 1, stdout) != 1) {
+ fprintf(stderr, "%s: write: %s", argv0, strerror(errno));
+ exit(1);
+ }
+
+ tmp = htonl(height);
+ if (fwrite(&tmp, sizeof(tmp), 1, stdout) != 1) {
+ fprintf(stderr, "%s: write: %s", argv0, strerror(errno));
+ exit(1);
+ }
+}
diff --git a/util.h b/util.h
@@ -0,0 +1,10 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdint.h>
+#include <stdio.h>
+
+extern char *argv0;
+
+#define LEN(x) (sizeof (x) / sizeof *(x))
+
+void read_ff_header(uint32_t *width, uint32_t *height);
+void write_ff_header(uint32_t width, uint32_t height);
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.