Compare commits

...

2 commits

Author SHA1 Message Date
Eric
4e8bb86ddd change Makefile to be stricter
-Og enables better detection of bugs that would only occur in optimized
compilations and allows for slightly lesser than -O1 optimization that
does not interfere with debugging.
2025-05-28 17:55:13 +02:00
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
3 changed files with 22 additions and 17 deletions

View file

@ -1,13 +1,14 @@
CFLAGS = -g -Wall -Wextra -Werror
CC = gcc
CFLAGS = -Og -Wall -Wextra -Werror
objects = main.o input.o output.o encode.o
b64 : $(objects)
cc -o b64 $(objects)
$(CC) -o b64 $(objects)
main.o input.o : input.h
main.o output.o : output.h
main.o encode.o : encode.h
main.o output.o : output.h
.PHONY : clean
clean :

31
main.c
View file

@ -13,11 +13,12 @@ unsigned char sbuf[SXTETBUF];
int
main(int argc, char *argv[])
{
int c, n, l;
int c, n, last;
int dec, url, hlp, wrp;
char *prog = *argv;
FILE *in, *out;
char *prog;
prog = *argv;
dec = url = hlp = wrp = 0;
while (--argc > 0 && (*++argv)[0] == '-')
while ((c = *++argv[0]))
@ -42,6 +43,7 @@ main(int argc, char *argv[])
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);
@ -51,22 +53,23 @@ main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
if (dec) {
while ((n = getsxts((argc >= 1) ? in : stdin, sbuf))) {
while ((n = getsxts((in) ? in : stdin, sbuf))) {
n = decode(sbuf, n, obuf, url);
fwrite(obuf, sizeof(*obuf), n, (argc == 2) ? out : stdout);
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((argc >= 1) ? in : stdin, obuf))) {
if (wrp) {
n = encode(obuf, n, sbuf, url);
l = printw((argc == 2) ? out : stdout, sbuf, n);
} else {
encode(obuf, n, sbuf, url);
fprintf((argc == 2) ? out : stdout, "%s", sbuf);
}
while ((n = getocts((in) ? in : stdin, obuf))) {
encode(obuf, n, sbuf, url);
fprintf((out) ? out : stdout, "%s", sbuf);
}
if (wrp && l != '\n')
fprintf((argc == 2) ? out : stdout, "\n");
}
if (in)
fclose(in);

View file

@ -8,6 +8,7 @@ printw(FILE *fp, unsigned char *s, int slen)
static int col;
int c;
c = '\n';
while (slen--) {
fputc((c = *s++), fp);
++col;