b64/main.c
Eric 733a013ee7 remove bugs related to uninitialized variables
These bugs became visible when using optimization options. They were
either not present unoptimized or very unlikely to occur. However, given
the options, the resulting program would behave incorrectly and reliably
break under all circumstances.

The makefile will see the intended changes accordingly in the following
commit to ensure compatibility.
2025-05-28 17:31:07 +02:00

80 lines
2.2 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include "input.h"
#include "output.h"
#include "encode.h"
#define OCTETBUF 4
#define SXTETBUF 5
unsigned char obuf[OCTETBUF];
unsigned char sbuf[SXTETBUF];
int
main(int argc, char *argv[])
{
int c, n, last;
int dec, url, hlp, wrp;
FILE *in, *out;
char *prog;
prog = *argv;
dec = url = hlp = wrp = 0;
while (--argc > 0 && (*++argv)[0] == '-')
while ((c = *++argv[0]))
switch (c) {
case 'd':
dec = 1;
break;
case 'u':
url = 1;
break;
case 'h':
hlp = 1;
break;
case 'w':
wrp = 1;
break;
default:
fprintf(stderr, "%s: illegal option %c\n", prog, c);
exit(EXIT_FAILURE);
break;
}
if (hlp) {
fprintf(stdout, "Usage: %s -duhw infile outfile\n", prog);
} else {
in = out = NULL;
if (argc >= 1 && (in = fopen(*argv, "r")) == NULL) {
fprintf(stderr, "%s: can't open %s\n", prog, *argv);
exit(EXIT_FAILURE);
}
if (argc == 2 && (out = fopen(*(argv+1), "w")) == NULL) {
fprintf(stderr, "%s: can't open %s\n", prog, *(argv+1));
exit(EXIT_FAILURE);
}
if (dec) {
while ((n = getsxts((in) ? in : stdin, sbuf))) {
n = decode(sbuf, n, obuf, url);
fwrite(obuf, sizeof(*obuf), n, (out) ? out : stdout);
}
} else if (wrp) {
last = 0;
while ((n = getocts((in) ? in : stdin, obuf))) {
n = encode(obuf, n, sbuf, url);
last = printw((out) ? out : stdout, sbuf, n);
}
if (last != '\n')
fprintf((out) ? out : stdout, "\n");
} else {
while ((n = getocts((in) ? in : stdin, obuf))) {
encode(obuf, n, sbuf, url);
fprintf((out) ? out : stdout, "%s", sbuf);
}
}
if (in)
fclose(in);
if (out)
fclose(out);
}
exit(EXIT_SUCCESS);
}