Release version 2.4.3 2025-03-11
Release 2.4.3 2025-03-11
IMPORTANT NOTE:
While you are NOT required to use this release in order to submit to IOCCC28,
we do RECOMMEND that you use and install this release of the mkiocccentry toolkit.
BACKWARD COMPATIBILITY:
This release is backward compatible with "Release 2.4.2 2025-03-02".
Submissions made under "Release 2.4.2 2025-03-02" remain valid for IOCCC28.
RELEASE DETAILS FOLLOW:
Fix search of tools under $PATH
.
Fix bugs in resolve_path()
where even if one had ./
or /
in front of the
path it could end up resolving a path that is not a regular executable file
(when it did not have a /
in the path this did not happen). Another bug was
fixed where if $PATH
is NULL or empty and the path is not a regular executable
file it still would be a strdup()d copy of the original path.
The above solved a problem where we could get the tools to be found (if they
exist) if we also did a check for is_file()
and is_exec()
but with the above
fixes we only have to check for != NULL
.
The find_utils()
functions now takes a corresponding bool *
for each tool to
find. If the boolean is not NULL then we search for that tool. If it is NULL and
the char **
is not NULL then we set the *tool
to NULL. This way the caller
can, if they wish and they are careful, decide whether or not to find all the
tools. For example txzchk
only looks for tar
if test mode is not enabled.
And although as a safety check before free()ing the pointer we do check that
test mode was not used we do not technically need it as long as we pass in
&tar
(although we do give NULL so we do need to check it).
Sync copyright fixes from jparse.
Force set nul_warning
to false in mkiocccentry(1)
and disable checking of
it in chkentry(1)
. Post IOCCC28 it will be removed from struct info, the
.info.json files and chkentry(1) that checks it.
Rather than directly put in true
in the writing of the .info.json file, force
set first_rule_is_all
to true
in mkiocccentry(1)
and reference that
boolean in the writing of the .info.json file.
Changed MIN_MKIOCCCENTRY_VERSION
to "2.0.1 2025-03-02"
Updated MKIOCCCENTRY_VERSION
to "2.0.2 2025-03-11"
.
Changed MIN_TXZCHK_VERSION
to "2.0.1 2025-03-02"
.
Updated TXZCHK_VERSION
to "2.0.2 2025-03-11"
.
Changed MIN_CHKENTRY_VERSION
to "2.0.1 2025-03-02"
.
Updated CHKENTRY_VERSION
to "2.0.2 2025-03-11"
.
Resolve issue #1229. Add -U UUID
to mkiocccentry(1)
to set the username.
Also fixed an error with -u uuidfile
where it would not set the test
boolean
to true if the UUID was "true"
.
The -u uuidfile
and -U UUID
options may not be used with -i answers
,
-d
, nor -s seed
.
Partial fix to issue #1208. The -x
option to force delete the
submission directory and -r rm
option to set path to rm(1)
were added to
mkiocccentry(1)
as part of issue #1208. The part of issue #1208 that was NOT
done was moved into issue #1235: and that will be completed later for IOCCC29.
Fixed bug where overwrite_answers
was always true by default in mkiocccentry(1)
.
Updated man page for the above changes.
Resolved issues #1233 and #1218. Both mkiocccentry(1)
and txzchk(1)
(the only ones
that use other tools) now search $PATH
for the tools first by way of the
find_utils()
function (modified a fair bit) and a new util function in jparse
called resolve_path()
. The jparse util functions shell_cmd()
and
pipe_open()
were also improved to resolve paths if no /
is in the command
name. As for make
: we now search for gmake
first as the Makefiles we need
are GNU Makefiles.
Add missing -r
to rm
in mkiocccentry_test.sh
.
Resolve issue #1206. Some people wanted this option to submit multiple
submissions without having to repeatedly copy/paste their username UUID. Now they
can just put the UUID in a text file and use -u uuid
. If the file is not a regular
readable file or it does not have a valid UUID it'll prompt like before. If the
-i answers
flag is used it is not relevant.
Resolve issue #1210. The directory/file lists to be ignored prompting was
confusing to some people. The question of 'Is this OK?' was reworded to 'Do you
wish to continue?' and the explanation is hopefully a bit clearer too.
Resolve issue #1221. Removed the check for first rule is all (in Makefiles).
This allows one to also have earlier on the format of CC:= cc
rather than just
CC= cc
, should they wish. The .info.json
file still has this bool but it's
always set to true and chkentry will ignore it. AFTER IOCCC28 it will be
removed from .info.json
and chkentry(1)
code will no longer have the functions
involved.
Resolve issue #1209. Although not labelled 'top priority' it was already done in
the code. If topdir
is the same as workdir
it is an error. If workdir
is under
topdir
it is an error. If topdir
is somehow slipped into the submission
directory it is an error. If workdir
is encountered in topdir
we skip it with
fts_set()
so as to not descend into it. Also, we now check that the
directories are directories an are the right permissions, prior to even trying
to scan/copy files/directories (to show a better error message).
Resolve issue #1214. With guidance from @SirWumpus and Landon, and at their
request, the iocccsize tool no longer warns against wordbuf warning unless
verbosity is high enough; in mkiocccentry(1)
it sets the boolean to true or false
depending on the result but it only notes it as a fun fact, suggesting the user
note it in their remarks. Post IOCCC28 the bool will be removed from .info.json
and chkentry(1)
functions for it will be removed. For now the function that
checks this value in chkentry(1)
simply returns true. Additionally, the wrong
variable was being referenced in soup/rule_count.c
- it was referencing
counts.wordbuf_warning
when it should have been referencing
counts.ungetc_error
. Also, because rule 13 no longer restricts UTF the char
warning is only shown if verbose enough. This did not need to be updated in
mkiocccentry as it's only referenced #ifdef ASCII_ONLY
and before that check
is in soup/rule_count.c
the code does #undef ASCII_ONLY
(and it's not even
referenced in mkiocccentry.c).
Resolve issue #1215.
Now the version checks for chkentry(1)
are a >= check. Uses code from
jparse/verge.c
. Its main()
was moved to verge_main.c
and verge.c
now has
a new function vercmp()
. verge.o
is linked into the library and chkentry
now uses it. Also there are new arrays that we called 'poisoned versions' and
this allows for bad versions to be excluded. Each tool and some other versions
have a minimum version allowed which at this time is equivalent to the current
release. If a version is incremented then the minimum version would be changed
to be the version at the time the contest opens. In this way uploaded
submissions will not be invalidated. As for poisoned versions the lists are
currently empty (just NULL terminated - must be last element).
Updated test_ioccc/gen_test_JSON.sh
to have a new function -
get_version
. This was necessary so we can use grep -v MIN_
. If it was in the
same function it would cause another MIN_
macro to be excluded from
limit_ioccc.h
which was a problem. Updated the script's version to
"1.0.2 2025-03-07"
.