aboutsummaryrefslogtreecommitdiff
path: root/.repos/farbfeld/util.c
diff options
context:
space:
mode:
authorMarvin Borner2022-05-31 14:17:19 +0200
committerMarvin Borner2022-05-31 14:17:19 +0200
commitb8be82d9113dd0fec9021aa573039cc64dbd849a (patch)
tree0694d21e5ba03e843dc6f03d1c5b1ed033123875 /.repos/farbfeld/util.c
parent272cc6e941d798d7270fcf74a98f592ef06e14ac (diff)
Clean
Diffstat (limited to '.repos/farbfeld/util.c')
-rw-r--r--.repos/farbfeld/util.c242
1 files changed, 0 insertions, 242 deletions
diff --git a/.repos/farbfeld/util.c b/.repos/farbfeld/util.c
deleted file mode 100644
index 6418bc9..0000000
--- a/.repos/farbfeld/util.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <arpa/inet.h>
-
-#include <errno.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include "util.h"
-
-char *argv0;
-
-static void
-verr(const char *fmt, va_list ap)
-{
- if (argv0 && strncmp(fmt, "usage", sizeof("usage") - 1)) {
- fprintf(stderr, "%s: ", argv0);
- }
-
- vfprintf(stderr, fmt, ap);
-
- if (fmt[0] && fmt[strlen(fmt) - 1] == ':') {
- fputc(' ', stderr);
- perror(NULL);
- } else {
- fputc('\n', stderr);
- }
-}
-
-void
-warn(const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- verr(fmt, ap);
- va_end(ap);
-}
-
-void
-die(const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- verr(fmt, ap);
- va_end(ap);
-
- exit(1);
-}
-
-void
-ff_read_header(uint32_t *width, uint32_t *height)
-{
- uint32_t hdr[4];
-
- efread(hdr, sizeof(*hdr), LEN(hdr), stdin);
-
- if (memcmp("farbfeld", hdr, sizeof("farbfeld") - 1)) {
- die("Invalid magic value");
- }
-
- *width = ntohl(hdr[2]);
- *height = ntohl(hdr[3]);
-}
-
-void
-ff_write_header(uint32_t width, uint32_t height)
-{
- uint32_t tmp;
-
- fputs("farbfeld", stdout);
-
- tmp = htonl(width);
- efwrite(&tmp, sizeof(tmp), 1, stdout);
-
- tmp = htonl(height);
- efwrite(&tmp, sizeof(tmp), 1, stdout);
-}
-
-int
-parse_mask(const char *s, uint16_t mask[3])
-{
- size_t slen, i;
- unsigned int col[3], colfac;
- char fmt[] = "%#x%#x%#x";
-
- slen = strlen(s);
- if (slen != 3 && slen != 6 && slen != 12) {
- return 1;
- }
-
- fmt[1] = fmt[4] = fmt[7] = ((slen / 3) + '0');
- if (sscanf(s, fmt, col, col + 1, col + 2) != 3) {
- return 1;
- }
-
- colfac = (slen == 3) ? UINT16_MAX / 0xf :
- (slen == 6) ? UINT16_MAX / 0xff :
- UINT16_MAX / 0xffff;
-
- for (i = 0; i < 3; i++) {
- mask[i] = col[i] * colfac;
- }
-
- return 0;
-}
-
-int
-fshut(FILE *fp, const char *fname)
-{
- int ret = 0;
-
- /* fflush() is undefined for input streams by ISO C,
- * but not POSIX 2008 if you ignore ISO C overrides.
- * Leave it unchecked and rely on the following
- * functions to detect errors.
- */
- fflush(fp);
-
- if (ferror(fp) && !ret) {
- warn("ferror '%s':", fname);
- ret = 1;
- }
-
- if (fclose(fp) && !ret) {
- warn("fclose '%s':", fname);
- ret = 1;
- }
-
- return ret;
-}
-
-void
-efread(void *p, size_t s, size_t n, FILE *f)
-{
- if (fread(p, s, n, f) != n) {
- if (ferror(f)) {
- die("fread:");
- } else {
- die("fread: Unexpected end of file");
- }
- }
-}
-
-void
-efwrite(const void *p, size_t s, size_t n, FILE *f)
-{
- if (fwrite(p, s, n, f) != n) {
- die("fwrite:");
- }
-}
-
-void *
-ereallocarray(void *optr, size_t nmemb, size_t size)
-{
- void *p;
-
- if (!(p = reallocarray(optr, nmemb, size))) {
- die("reallocarray: Out of memory");
- }
-
- return p;
-}
-
-long long
-estrtonum(const char *numstr, long long minval, long long maxval)
-{
- const char *errstr;
- long long ll;
-
- ll = strtonum(numstr, minval, maxval, &errstr);
- if (errstr) {
- die("strtonum '%s': %s", numstr, errstr);
- }
-
- return ll;
-}
-
-/*
- * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX
- * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW
- */
-#define MUL_NO_OVERFLOW (1UL << (sizeof(size_t) * 4))
-
-void *
-reallocarray(void *optr, size_t nmemb, size_t size)
-{
- if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) &&
- nmemb > 0 && SIZE_MAX / nmemb < size) {
- errno = ENOMEM;
- return NULL;
- }
- return realloc(optr, size * nmemb);
-}
-
-#define INVALID 1
-#define TOOSMALL 2
-#define TOOLARGE 3
-
-long long
-strtonum(const char *numstr, long long minval, long long maxval,
- const char **errstrp)
-{
- long long ll = 0;
- int error = 0;
- char *ep;
- struct errval {
- const char *errstr;
- int err;
- } ev[4] = {
- { NULL, 0 },
- { "invalid", EINVAL },
- { "too small", ERANGE },
- { "too large", ERANGE },
- };
-
- ev[0].err = errno;
- errno = 0;
- if (minval > maxval) {
- error = INVALID;
- } else {
- ll = strtoll(numstr, &ep, 10);
- if (numstr == ep || *ep != '\0')
- error = INVALID;
- else if ((ll == LLONG_MIN && errno == ERANGE) || ll < minval)
- error = TOOSMALL;
- else if ((ll == LLONG_MAX && errno == ERANGE) || ll > maxval)
- error = TOOLARGE;
- }
- if (errstrp != NULL)
- *errstrp = ev[error].errstr;
- errno = ev[error].err;
- if (error)
- ll = 0;
-
- return (ll);
-}