Merge pull request #1212 from xexyl/1989-westley-try-sh-fixes

This commit is contained in:
Landon Curt Noll authored and GitHub committed 2023-10-29 09:47:57 -07:00
commit 1cee4ed9ab
7 files changed
+95 -90

No files matched your search

+3 -5
View File
@@ -63,7 +63,7 @@ CDEFINE=
# Include files that are needed to compile # Include files that are needed to compile
# #
CINCLUDE= -include stdio.h -include unistd.h CINCLUDE= -include stdio.h -include unistd.h -include string.h
# Optimization # Optimization
# #
@@ -114,8 +114,8 @@ OBJ= ${PROG}.o
DATA= DATA=
TARGET= ${PROG} TARGET= ${PROG}
# #
ALT_OBJ= ${PROG}.alt.o ALT_OBJ=
ALT_TARGET= ${PROG}.alt ALT_TARGET=
################# #################
@@ -131,8 +131,6 @@ all: data ${TARGET}
sandwich supernova deep_magic magic charon pluto sandwich supernova deep_magic magic charon pluto
${PROG}: ${PROG}.c ${PROG}: ${PROG}.c
@echo "NOTE: this entry uses gets() so you might get a warning about this"
@echo " when compiling and running this program with some systems."
${CC} ${CFLAGS} $< -o $@ ${LDFLAGS} ${CC} ${CFLAGS} $< -o $@ ${LDFLAGS}
# alternative executable # alternative executable
-22
View File
@@ -9,10 +9,6 @@ UK
make all make all
``` ```
There is an alternate version which uses `fgets()`. See the Alternate code
section below as well as the [bugs.md](/bugs.md) file for more details as to why
it is worth having as an alternate version.
## To use: ## To use:
```sh ```sh
@@ -35,24 +31,6 @@ Also try:
echo IOCCC | ./hague 2>/dev/null echo IOCCC | ./hague 2>/dev/null
``` ```
## Alternate code:
Whereas with some entries the change to `fgets()` (see the [FAQ](/faq.md) for
details on why this has been done) can be done in the original code this entry
is more complicated in that although both forms of input show the correct
output, one form segfaults after the output.
If you wish to use this alternate code, do:
```sh
make alt
```
Use `hague.alt` as you would `hague` above. As for which form will segfault
after outputting the text it is when text is piped into the program. Again see
the [bugs.md](/bugs.md) file for more details.
## Judges' remarks: ## Judges' remarks:
+1 -1
View File
@@ -12,7 +12,7 @@ DITDAH _DIT,DITDAH DAH_,DITDAH DIT_,
DITDAH _DIT_,DITDAH DIT_DAH DIT DITDAH _DIT_,DITDAH DIT_DAH DIT
DAH,DITDAH DAH_DIT DIT DAH;DAHDIT DAH,DITDAH DAH_DIT DIT DAH;DAHDIT
DIT _DIT=DIT_DAH DIT 81 DAH,DIT_=_DIT DIT _DIT=DIT_DAH DIT 81 DAH,DIT_=_DIT
__DAH;_DIT=DAH_DIT DIT _DIT,81,stdin DAH,_DIT[strlen(_DIT)-1]='\0',_DIT!=NULL;__DIT __DAH;_DIT==DAH_DIT DIT _DIT,81,stdin DAH&&(_DIT[strlen(_DIT)-1]='\0',_DIT);__DIT
DIT'\n'DAH DAH DAHDIT DIT DAH_=_DIT;DITDAH DIT'\n'DAH DAH DAHDIT DIT DAH_=_DIT;DITDAH
DAH_;__DIT DIT DITDAH DAH_;__DIT DIT DITDAH
_DIT_?_DAH DIT DITDAH DIT_ DAH:'?'DAH,__DIT _DIT_?_DAH DIT DITDAH DIT_ DAH:'?'DAH,__DIT
+2 -2
View File
@@ -4,7 +4,7 @@
#define DITDAH * #define DITDAH *
#define DAHDIT for #define DAHDIT for
#define DIT_DAH malloc #define DIT_DAH malloc
#define DAH_DIT gets #define DAH_DIT fgets
#define _DAHDIT char #define _DAHDIT char
_DAHDIT _DAH_[]="ETIANMSURWDKGOHVFaLaPJBXCYZQb54a3d2f16g7c8a90l?e'b.s;i,d:" _DAHDIT _DAH_[]="ETIANMSURWDKGOHVFaLaPJBXCYZQb54a3d2f16g7c8a90l?e'b.s;i,d:"
;main DIT DAH{_DAHDIT ;main DIT DAH{_DAHDIT
@@ -12,7 +12,7 @@ DITDAH _DIT,DITDAH DAH_,DITDAH DIT_,
DITDAH _DIT_,DITDAH DIT_DAH DIT DITDAH _DIT_,DITDAH DIT_DAH DIT
DAH,DITDAH DAH_DIT DIT DAH;DAHDIT DAH,DITDAH DAH_DIT DIT DAH;DAHDIT
DIT _DIT=DIT_DAH DIT 81 DAH,DIT_=_DIT DIT _DIT=DIT_DAH DIT 81 DAH,DIT_=_DIT
__DAH;_DIT==DAH_DIT DIT _DIT DAH;__DIT __DAH;_DIT==DAH_DIT DIT _DIT,81,stdin DAH&&(_DIT[strlen(_DIT)-1]='\0',_DIT);__DIT
DIT'\n'DAH DAH DAHDIT DIT DAH_=_DIT;DITDAH DIT'\n'DAH DAH DAHDIT DIT DAH_=_DIT;DITDAH
DAH_;__DIT DIT DITDAH DAH_;__DIT DIT DITDAH
_DIT_?_DAH DIT DITDAH DIT_ DAH:'?'DAH,__DIT _DIT_?_DAH DIT DITDAH DIT_ DAH:'?'DAH,__DIT
-1
View File
@@ -132,7 +132,6 @@ all: data ${TARGET}
sandwich supernova deep_magic magic charon pluto sandwich supernova deep_magic magic charon pluto
${PROG}: ${PROG}.c ${PROG}: ${PROG}.c
@echo "NOTE: This entry uses non-standard args to main() that do not work with some modern compilers."
${CC} ${CFLAGS} $< -o $@ ${LDFLAGS} ${CC} ${CFLAGS} $< -o $@ ${LDFLAGS}
# alternative executable # alternative executable
+74 -51
View File
@@ -1,70 +1,93 @@
#!/usr/bin/env bash #!/usr/bin/env bash
make all || exit 1 # first compile everything or at least try to
./compile.sh
echo "$ echo IOCCC | ./westley" if [[ -e "./westley" ]]; then
echo IOCCC | ./westley echo "$ echo IOCCC | ./westley"
echo echo IOCCC | ./westley
echo
echo "$ echo IOCCC | ./westley 1" echo "$ echo IOCCC | ./westley 1"
echo IOCCC | ./westley 1 echo IOCCC | ./westley 1
echo echo
echo "$ echo IOCCC | ./westley 1 2" echo "$ echo IOCCC | ./westley 1 2"
echo IOCCC | ./westley 1 2 echo IOCCC | ./westley 1 2
echo echo
echo "$ echo IOCCC | ./westley 1 2 3" echo "$ echo IOCCC | ./westley 1 2 3"
echo IOCCC | ./westley 1 2 3 echo IOCCC | ./westley 1 2 3
echo echo
fi
echo "$ echo IOCCC | ./ver0" if [[ -e "./ver0" ]]; then
echo IOCCC | ./ver0 echo "$ echo IOCCC | ./ver0"
echo echo IOCCC | ./ver0
echo
echo "$ echo Version 1 | ./ver1" echo "$ echo IOCCC | ./ver0 1"
echo Version 1 | ./ver1 echo IOCCC | ./ver0 1
echo echo
echo "$ echo Version 1 | ./ver1 1" echo "$ echo IOCCC | ./ver0 1 2"
echo Version 1 | ./ver1 1 echo IOCCC | ./ver0 1 2
echo echo
echo "$ echo Version 1 | ./ver1 1 2" echo "$ echo IOCCC | ./ver0 1 2 3"
echo Version 1 | ./ver1 1 2 echo IOCCC | ./ver0 1 2 3
echo echo
fi
echo "$ echo Version 1 | ./ver1 1 2 3" if [[ -e "./ver1" ]]; then
echo Version 1 | ./ver1 1 2 3 echo "$ echo Version 1 | ./ver1"
echo echo Version 1 | ./ver1
echo
echo "$ echo Version 2 | ./ver2" echo "$ echo Version 1 | ./ver1 1"
echo Version 2 | ./ver2 echo Version 1 | ./ver1 1
echo echo
echo "$ echo Version 2 | ./ver2 1" echo "$ echo Version 1 | ./ver1 1 2"
echo Version 2 | ./ver2 1 echo Version 1 | ./ver1 1 2
echo echo
echo "$ echo Version 2 | ./ver2 1 2" echo "$ echo Version 1 | ./ver1 1 2 3"
echo Version 2 | ./ver2 1 2 echo Version 1 | ./ver1 1 2 3
echo echo
fi
echo "$ echo Version 2 | ./ver2 1 2 3" if [[ -e "./ver2" ]]; then
echo Version 2 | ./ver2 1 2 3 echo "$ echo Version 2 | ./ver2"
echo echo Version 2 | ./ver2
echo
echo "$ echo Version 3 | ./ver3" echo "$ echo Version 2 | ./ver2 1"
echo Version 3 | ./ver3 echo Version 2 | ./ver2 1
echo echo
echo "$ echo Version 3 | ./ver3 1" echo "$ echo Version 2 | ./ver2 1 2"
echo Version 3 | ./ver3 1 echo Version 2 | ./ver2 1 2
echo echo
echo "$ echo Version 3 | ./ver3 1 2" echo "$ echo Version 2 | ./ver2 1 2 3"
echo Version 3 | ./ver3 1 2 echo Version 2 | ./ver2 1 2 3
echo echo
fi
echo "$ echo Version 3 | ./ver3 1 2 3" if [[ -e "./ver3" ]]; then
echo Version 3 | ./ver3 1 2 3 echo "$ echo Version 3 | ./ver3"
echo Version 3 | ./ver3
echo
echo "$ echo Version 3 | ./ver3 1"
echo Version 3 | ./ver3 1
echo
echo "$ echo Version 3 | ./ver3 1 2"
echo Version 3 | ./ver3 1 2
echo
echo "$ echo Version 3 | ./ver3 1 2 3"
echo Version 3 | ./ver3 1 2 3
fi
+15 -8
View File
@@ -100,6 +100,18 @@ be made consistent but adding markdown where necessary in the remarks is).
A lot of these fixes were done with his [sgit A lot of these fixes were done with his [sgit
tool](https://github.com/xexyl/sgit) but many were done manually as well. tool](https://github.com/xexyl/sgit) but many were done manually as well.
## A note about changes `fgets()`
Although this is discussed in the [FAQ](/faq.md) we want to say here simply that
the problem with `gets()` is that in some systems a warning can be interspersed
with the output which can be confusing, to say nothing of the annoyance of it. A
good example was [1990/tbr](/thanks-for-fixes.md#1990tbr-readmemd) where one
would see:
```sh
$ warning: this program uses gets(), which is unsafe.
```
## [1984/anonymous](1984/anonymous/anonymous.c) ([README.md](1984/anonymous/README.md)) ## [1984/anonymous](1984/anonymous/anonymous.c) ([README.md](1984/anonymous/README.md))
@@ -292,14 +304,9 @@ commented out.
## [1986/hague](1986/hague/hague.c) ([README.md](1986/hague/README.md])) ## [1986/hague](1986/hague/hague.c) ([README.md](1986/hague/README.md]))
Cody added alt code that uses `fgets()` to avoid alarming and annoying warnings Cody made this use `fgets()` to avoid alarming and annoying messages about
about `gets()` being unsafe. The reason this is alt code, at least for now, is `gets()` being unsafe, sometimes interspersed with the output of the program.
that although it will print the results in both forms of invocation, after the For more details about that see the [FAQ](/faq.md).
output in one invocation form it will segfault. This might be addressed later on
or it might be decided that it is worth it, with a caveat in the Makefile or at
least the README.md file, since it still prints out the correct output, though
that seems like it might not be so ideal unless it can be fixed (which might be
done). See the [bugs.md](/bugs.md) file for details.
## [1986/holloway](1986/holloway/holloway.c) ([README.md](1986/holloway/README.md])) ## [1986/holloway](1986/holloway/holloway.c) ([README.md](1986/holloway/README.md]))