Fix 1986/marshall for linux
Choo choo! :-) There was a problem in linux where it either segfaulted or entered an infinite loop depending on compiler / flags. This was caused by a for loop that had an empty condition and the call to _exit(). A game of cat and mouse occurred where fixing it for one compiler caused the program to segfault with the other compiler. Unfortunately the formatting did have to change a bit but it still mostly looks like a train even if not quite as pretty.
This commit is contained in:
1 parent
c093a0a805
commit
affb0159ff
3 files changed
+19
-13
No files matched your search
@@ -69,7 +69,7 @@ CINCLUDE=
|
|||||||
|
|
||||||
# Optimization
|
# Optimization
|
||||||
#
|
#
|
||||||
OPT= -O3
|
OPT=
|
||||||
|
|
||||||
# Default flags for ANSI C compilation
|
# Default flags for ANSI C compilation
|
||||||
#
|
#
|
||||||
|
|||||||
+12
-12
@@ -1,14 +1,14 @@
|
|||||||
extern int
|
extern int
|
||||||
errno
|
errno
|
||||||
;char
|
;char
|
||||||
grrr
|
grrr
|
||||||
;main( r,
|
;main( r,
|
||||||
argv, argc ) char **argc ,
|
argv, argc ) char **argc ,
|
||||||
r ; char *argv[];{int P( );
|
r ; char *argv[];{ int P( );
|
||||||
#define x int i, j,cc[4];printf(" choo choo\n" ) ;
|
#define x int i, j,cc[4]; printf(" choo choo\n" ) ;
|
||||||
x ;if (P( ! i ) | cc[ ! j ]
|
x ;if (P( ! i ) | cc[ ! j ]
|
||||||
& P(j )>2 ? j : i ){* argv[i++ +!-i]
|
& P(j )>2 ? j : i ){* argv[i++ +!-i]
|
||||||
; for (i= 0;; i++ );
|
; /*for (i= 0;; i++ ); */
|
||||||
_exit(argv[(int)*argc-2/cc[1*(int)*argc]|-1<<4]);printf("%d",P(""));}}
|
_exit(1/*argv[(int)*argc-2/cc[1*(int)*argc]|-1<<4]*/);printf("%d",P(""))
|
||||||
P ( a ) char a ; { a ; while( a > " B "
|
;}} P ( a ) char a ; { a ; /*while( a > " B "
|
||||||
/* - by E ricM arsh all- */); }
|
* - by E ricM arsh all- )*/; }
|
||||||
@@ -144,6 +144,12 @@ was an `int`. He notes that he tried to keep the ASCII art as close to the
|
|||||||
original as possible. The line lengths are the same but some spaces had to be
|
original as possible. The line lengths are the same but some spaces had to be
|
||||||
changed to non-spaces.
|
changed to non-spaces.
|
||||||
|
|
||||||
|
As the fix was it worked for macOS but it did not work for modern linux, not
|
||||||
|
before with gcc or after the fix with either gcc or clang, so Cody fixed that
|
||||||
|
too. This took some changes and commenting code out (commented out for the ASCII
|
||||||
|
art as noted). It was a game of cat and mouse where one fix with one compiler
|
||||||
|
caused it to segfault with the other but after commenting out two portions it
|
||||||
|
works fine.
|
||||||
|
|
||||||
## [1986/wall](1986/wall/wall.c) ([README.md](1986/wall/README.md]))
|
## [1986/wall](1986/wall/wall.c) ([README.md](1986/wall/README.md]))
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user