aboutsummaryrefslogtreecommitdiff
path: root/tree234.c (follow)
Commit message (Collapse)AuthorAge
* tree234: avoid an uninitialised-variable warning.Simon Tatham2021-12-11
| | | | | | | | | | | | | | | | | Apparently, some compilers can't work out that the pattern if (!t->root) { special-case handler followed by early return } n = t->root; while (n) { ... } will execute the while loop at least once, on the grounds that the _first_ test for n being non-NULL must pass, because we initialised n from t->root which can't be NULL on any code path where we didn't take the early return. So they might give an uninitialised-variable warning for the variable 'ki', which is initialised inside the while loop. Compilers, eh. But it's easy enough to turn the while into a do-while, so that even the least alert compiler will know it runs at least once.
* malloc.c: check allocation sizes against PTRDIFF_MAX.Simon Tatham2021-12-11
| | | | | | | | | | | | | | | | | | | | | | | I don't expect this to actually come up in any circumstance, but it prevents a warning in some versions of gcc that would otherwise arise from the use of 'int' to compute the input size: if gcc isn't confident that the int is positive, then it complains that possible inputs to malloc might be in the region of 2^64 - (small multiple of a negative 32-bit int). I would hope malloc would fail in any case on such an input, so failing a couple of lines earlier makes no important difference. Annoyingly, stdint.h is missing in my NestedVM build setup (though it has stdbool.h - it's not _totally_ C90). So I have to check that at cmake time. Also, removed the #defines for smalloc and friends from the tree234 test mode. These were needed in the old build system, when tree234-test was built ad-hoc without being linked against malloc.c. But now tree234-test links against the same utils library as everything else, and can use the real smalloc - and doing so prevents another of these warnings when compiling with -flto.
* Build a lot of conditioned-out test and helper programs.Simon Tatham2021-05-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Most of these aren't especially useful, but if we're going to have them in the code base at all, we should at least ensure they compile: bit-rotted conditioned-out code is of no value. One of the new programs is 'galaxieseditor', which borrows most of the Galaxies code but changes the UI so that you can create and remove _dots_ instead of edges, and then run the solver to see whether it can solve the puzzle you've designed. Unlike the rest, this is a GUI helper tool, using the 'guiprogram' cmake function introduced in the previous commit. The programs are: - 'combi', a test program for the utility module that generates all combinations of n things - 'divvy', a test program for the module that divides a rectangle at random into equally-sized polyominoes - 'penrose-test', a test program for the Penrose-tiling generator used in Loopy, which outputs an SVG of a piece of tiling - 'penrose-vector', a much smaller test program for the vector arithmetic subroutines in that code - 'sort-test', a test of this code base's local array sorting routine - 'tree234-test', the exhaustive test code that's been in tree234.c all along. Not all of them compiled first time. Most of the fixes were the usual kind of thing: fixing compiler warnings by removing unused variables/functions, bringing uses of internal APIs up to date. A notable one was that galaxieseditor's interpret_move() modified the input game state, which was an error all along and is now detected by me having made it a const pointer; I had to replace that with an extra wrinkle in the move-string format, so that now execute_move() makes the modification. The one I'm _least_ proud of is squelching a huge number of format-string warnings in tree234-test by interposing a variadic function without __attribute__((printf)).
* Use C99 bool within source modules.Simon Tatham2018-11-13
| | | | | | | | | | This is the main bulk of this boolification work, but although it's making the largest actual change, it should also be the least disruptive to anyone interacting with this code base downstream of me, because it doesn't modify any interface between modules: all the inter-module APIs were updated one by one in the previous commits. This just cleans up the code within each individual source file to use bool in place of int where I think that makes things clearer.
* Adopt C99 bool in the tree234 API.Simon Tatham2018-11-13
| | | | | The only affected function here is splitpos234, which I don't think these puzzles are even using at the moment.
* Patch from Ben Hutchings: explicitly initialise something which someSimon Tatham2010-04-18
| | | | | | gccs complained about. [originally from svn r8923]
* Add a precautionary pair of initialisations to placate optimisers,Simon Tatham2009-11-10
| | | | | | | and asserts to check that the preinitialised values are never actually used. [originally from svn r8745]
* Rather to my surprise given the amount of testing this code has had,Simon Tatham2007-01-11
| | | | | | | | | Kevin Lyles spotted a tree234 bug! copytree234() segfaulted when asked to copy a tree containing no elements, due to failing to allow for the case that t->root might be NULL. Fixed, and added a regression test. [originally from svn r7092]
* Yikes! I've only just noticed that this copy of tree234.c was stillSimon Tatham2005-10-12
| | | | | | | | | using unwrappered malloc/free, leaving plenty of openings for out- of-memory segfaults. Switch to using Puzzles's memory management, which I should have done right at the start but can only assume I forgot about. [originally from svn r6388]
* Initial checkin of a portable framework for writing small GUI puzzleSimon Tatham2004-04-25
games. [originally from svn r4138]