diff options
| author | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-07-04 00:55:59 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-07-06 22:21:50 +0200 |
| commit | 892ecce78dec37a1b2701611dd72986442cd094d (patch) | |
| tree | bbd7fb0a0229795bf52d0b8a9ff9b06251363a67 /tools/add-header.c | |
| parent | 99554cc243c4b2ec290639a04ebc2f189890d6dd (diff) | |
| download | wnix-892ecce78dec37a1b2701611dd72986442cd094d.tar.gz | |
Import project skeleton from rts
https://gitea.privatedns.org/xavi/rts
Diffstat (limited to 'tools/add-header.c')
| -rw-r--r-- | tools/add-header.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tools/add-header.c b/tools/add-header.c new file mode 100644 index 0000000..75f7458 --- /dev/null +++ b/tools/add-header.c @@ -0,0 +1,67 @@ +#include <errno.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int main(int argc, char **const argv) +{ + int ret = EXIT_FAILURE; + FILE *in = NULL, *out = NULL; + + if (argc < 3) + { + fprintf(stderr, "%s [arg ...] <in-file> <out-file>\n", *argv); + goto end; + } + + const char *const in_path = argv[argc - 2], + *const out_path = argv[argc - 1]; + + if (!(out = fopen(out_path, "wb"))) + { + fprintf(stderr, "could not open %s: %s\n", out_path, strerror(errno)); + goto end; + } + else if (!(in = fopen(in_path, "rb"))) + { + fprintf(stderr, "could not open %s: %s\n", in_path, strerror(errno)); + goto end; + } + + for (int i = 1; i < argc - 2; i++) + { + if (fprintf(out, "%s", argv[i]) < 0 + || putc('\0', out) == EOF + || ferror(out)) + { + fprintf(stderr, "failed writing to %s\n", out_path); + goto end; + } + } + + while (!feof(in)) + { + char c; + + if ((!fread(&c, sizeof c, 1, in) + || !fwrite(&c, sizeof c, 1, out)) + && (ferror(in) || ferror(out))) + { + fprintf(stderr, "ferror(%s)=%d, ferror(%s)=%d\n", + in_path, ferror(in), out_path, ferror(out)); + goto end; + } + } + + ret = EXIT_SUCCESS; + +end: + if (out) + fclose(out); + + if (in) + fclose(in); + + return ret; +} |
