Merge pull request #1496 from xexyl/gets-thanks-faq
This commit is contained in:
2 files changed
+63
-17
No files matched your search
@@ -34,9 +34,10 @@
|
|||||||
|
|
||||||
## Section 4 - [Changes made to IOCCC winners](#faq4)
|
## Section 4 - [Changes made to IOCCC winners](#faq4)
|
||||||
- [4.0 - Why are some winning author remarks incongruent with the winning IOCCC code?](#faq4_0)
|
- [4.0 - Why are some winning author remarks incongruent with the winning IOCCC code?](#faq4_0)
|
||||||
- [4.1 - Why were some calls to the libc function gets changed to use fgets?](#faq4_1)
|
- [4.1 - Why were some calls to the libc function `gets(3)` changed to use `fgets(3)`?](#faq4_1)
|
||||||
- [4.2 - What was changed in an IOCCC winner source code?](#faq4_2)
|
- [4.2 - What was changed in an IOCCC winner source code?](#faq4_2)
|
||||||
- [4.3 - Why do author remarks sometimes not match the source?](#faq4_3)
|
- [4.3 - Why do author remarks sometimes not match the source / why are there
|
||||||
|
other inconsistencies with the original entry?](#faq4_3)
|
||||||
- [4.4 - What is the meaning of the file ending in .orig.c in IOCCC winners?](#faq4_4)
|
- [4.4 - What is the meaning of the file ending in .orig.c in IOCCC winners?](#faq4_4)
|
||||||
|
|
||||||
## Section 5 - [Updating or correcting IOCCC web site content](#faq5)
|
## Section 5 - [Updating or correcting IOCCC web site content](#faq5)
|
||||||
@@ -988,7 +989,7 @@ version like `winner.alt.c` or `prog.alt.c`. In fact it is advisable to look at
|
|||||||
the original code when reading the author's (and sometimes authors') remarks.
|
the original code when reading the author's (and sometimes authors') remarks.
|
||||||
|
|
||||||
|
|
||||||
### <a name="faq4_1"></a>FAQ 4.1: Why were some calls to the libc function gets changed to use fgets?
|
### <a name="faq4_1"></a>FAQ 4.1: Why were some calls to the libc function `gets(3)` changed to use `fgets(3)`?
|
||||||
|
|
||||||
Some may wonder: "Doesn't this tamper with the entry too much?"
|
Some may wonder: "Doesn't this tamper with the entry too much?"
|
||||||
|
|
||||||
@@ -1015,7 +1016,6 @@ those have mainly not been touched except one that has had the buffer size
|
|||||||
increased (which could be done for others that are not possible to change to
|
increased (which could be done for others that are not possible to change to
|
||||||
`fgets()` though this has not been done).
|
`fgets()` though this has not been done).
|
||||||
|
|
||||||
|
|
||||||
Some entries can be made to look almost identical to the original entry. For
|
Some entries can be made to look almost identical to the original entry. For
|
||||||
instance the fix to [1988/reddy](1988/reddy/README.md) required only a single
|
instance the fix to [1988/reddy](1988/reddy/README.md) required only a single
|
||||||
`#define` be added.
|
`#define` be added.
|
||||||
@@ -1023,12 +1023,22 @@ instance the fix to [1988/reddy](1988/reddy/README.md) required only a single
|
|||||||
In the future we, the judges, would prefer that entries use `fgets()` to prevent
|
In the future we, the judges, would prefer that entries use `fgets()` to prevent
|
||||||
these problems.
|
these problems.
|
||||||
|
|
||||||
NOTE: due to 'compatibility reasons' `fgets()` stores the newline and `gets()`
|
An annoying fact is that for '"compatibility" reasons' `fgets()` retains the
|
||||||
does not. We're not sure how this is compatibility but either way it can cause a
|
newline and `gets()` does not. As the v7 man page used to say:
|
||||||
|
|
||||||
|
```
|
||||||
|
BUGS
|
||||||
|
|
||||||
|
The fgets(3) function retains the newline while gets(3) does not, all in the
|
||||||
|
name of backward compatibility.
|
||||||
|
```
|
||||||
|
|
||||||
|
We're not sure how this is compatibility but either way it can cause a
|
||||||
problem and it is this that has complicated most of the fixes though again some
|
problem and it is this that has complicated most of the fixes though again some
|
||||||
can look almost identical.
|
can look almost identical.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="faq4_2"></a>FAQ 4.2: What was changed in an IOCCC winner source code?
|
### <a name="faq4_2"></a>FAQ 4.2: What was changed in an IOCCC winner source code?
|
||||||
|
|
||||||
We have set up make rules to easily do see what was changed in the IOCCC
|
We have set up make rules to easily do see what was changed in the IOCCC
|
||||||
@@ -1126,12 +1136,25 @@ Obviously if you want to view the alt code or the orig code you can just open
|
|||||||
the files as described above.
|
the files as described above.
|
||||||
|
|
||||||
|
|
||||||
### <a name="faq4_3"></a>FAQ 4.3: Why do author remarks sometimes not match the source?
|
### <a name="faq4_3"></a> FAQ 4.3 - Why do author remarks sometimes not match the source / why are there other inconsistencies with the original entry?
|
||||||
|
|
||||||
This is very likely to happen when an entry was fixed for modern systems. When
|
If the entry has been fixed for modern systems and this fix required
|
||||||
you look at the remarks of the author you should look at the `prog.orig.c` or
|
modification to the code then invariably there will be entries where the remarks
|
||||||
the `winner.orig.c` file. You might also find value in the above `diff` make
|
of the author or authors are inconsistent with the original code, the size of
|
||||||
rules.
|
the code might be against rule 2 and other kinds of inconsistencies might also
|
||||||
|
be there.
|
||||||
|
|
||||||
|
This is why we recommend that when you read the remarks, sometimes the judges'
|
||||||
|
remarks and always the author's or authors' remarks, we recommend that you look
|
||||||
|
at the original code. When the entry source code is called `prog.c` the original
|
||||||
|
code is in `prog.orig.c`; otherwise it is `winner.orig.c`. For instance one of
|
||||||
|
Landon's all time favourite entries is
|
||||||
|
[1984/mullender](1984/mullender/README.md) and the original code is in
|
||||||
|
[mullender.orig.c](1984/mullender/mullender.orig.c). In some cases, such as
|
||||||
|
`1984/mullender`, the original code is the same as the code as no changes were
|
||||||
|
made (there is an alt version for systems that are not VAX-11/PDP-11, however).
|
||||||
|
|
||||||
|
See also [FAQ 4.2: What was changed in an IOCCC winner source code?](#faq4_2)
|
||||||
|
|
||||||
|
|
||||||
### <a name="faq4_4"></a>FAQ 4.4: What is the meaning of the file ending in .orig.c in IOCCC winners?
|
### <a name="faq4_4"></a>FAQ 4.4: What is the meaning of the file ending in .orig.c in IOCCC winners?
|
||||||
|
|||||||
+29
-6
@@ -64,10 +64,28 @@ We are pleased to note the many contributions, **made since 2021 Jan 01**,
|
|||||||
on a winner by winner basis.
|
on a winner by winner basis.
|
||||||
|
|
||||||
|
|
||||||
|
## Note about fixes and inconsistencies with the original code and remarks
|
||||||
|
|
||||||
|
Invariably when an entry is fixed and it is not made an alt version (sometimes
|
||||||
|
it is worth an alt version and other times not - it all depends on what was
|
||||||
|
done) some inconsistencies will be introduced of the original code, the remarks
|
||||||
|
of the author(s) and the size restrictions of the contest for that year (and in
|
||||||
|
some cases it might end up being against other rules).
|
||||||
|
|
||||||
|
See [FAQ 4.3 - Why do author remarks sometimes not match the source / why are
|
||||||
|
there other inconsistencies with the original entry?](/faq.md#faq4_3) for this
|
||||||
|
specifically and also [FAQ 4.2: What was changed in an IOCCC winner source
|
||||||
|
code?](/faq.mdfaq4_2).
|
||||||
|
|
||||||
|
|
||||||
## Notes about changing `gets()` to `fgets()` in some entries:
|
## Notes about changing `gets()` to `fgets()` in some entries:
|
||||||
|
|
||||||
Although this is discussed in the [FAQ](/faq.md) we want to say here simply that
|
Although the 'why' is discussed in the [FAQ 4.1: Why were some calls to the libc
|
||||||
the problem with `gets()` is that in some systems a warning can be interspersed
|
function `gets(3)` changed to use `fgets(3)`?](/faq.md#faq4_1) we want to give
|
||||||
|
more details here as it pertains to the fixes and updates made in numerous
|
||||||
|
entries below (note that some of the information in that FAQ entry are below).
|
||||||
|
|
||||||
|
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
|
with the output which can be confusing, to say nothing of the annoyance of it
|
||||||
(which can be fixed via `2>/dev/null` - and this is done with some entries in
|
(which can be fixed via `2>/dev/null` - and this is done with some entries in
|
||||||
the to use/try sections - but which makes it more burdensome to run as there are
|
the to use/try sections - but which makes it more burdensome to run as there are
|
||||||
@@ -76,11 +94,16 @@ a lot of entries that use it still).
|
|||||||
A good example was [1990/tbr](/thanks-for-fixes.md#1990tbr-readmemd) where one
|
A good example was [1990/tbr](/thanks-for-fixes.md#1990tbr-readmemd) where one
|
||||||
would see:
|
would see:
|
||||||
|
|
||||||
```sh
|
```
|
||||||
$ warning: this program uses gets(), which is unsafe.
|
$ warning: this program uses gets(), which is unsafe.
|
||||||
|
# cursor here, what to do?
|
||||||
```
|
```
|
||||||
|
|
||||||
whereas without the warning it's much easier to see that it's a prompt.
|
whereas without the warning it's much easier to see that it's a prompt:
|
||||||
|
|
||||||
|
```
|
||||||
|
$
|
||||||
|
```
|
||||||
|
|
||||||
Another great example is:
|
Another great example is:
|
||||||
|
|
||||||
@@ -114,8 +137,8 @@ fixes in that entry.
|
|||||||
In any case some of the entries have been updated this way for the reasons
|
In any case some of the entries have been updated this way for the reasons
|
||||||
described above and in the [FAQ](/faq.md).
|
described above and in the [FAQ](/faq.md).
|
||||||
|
|
||||||
Where possible `gets` has been redefined to be `fgets` with the appropriate arg.
|
Where possible `gets(3)` has been redefined to be `fgets(3)` with the
|
||||||
This is not always possible but if often is.
|
appropriate arg. This is not always possible but if often it is.
|
||||||
|
|
||||||
See also [bugs.md](/bugs.md) for a further discussion on the matter.
|
See also [bugs.md](/bugs.md) for a further discussion on the matter.
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user