1 (Note: this file has been re-arranged to be in reverse chronological
2 order, which is The Right Thing for ChangeLogs - DLC)
4 December 15, 2021 (fortune-mod 3.10.0)
6 More fixes crosscompiling builds
7 ( https://github.com/shlomif/fortune-mod/issues/58 ; thanks
10 Added datfiles/rules-of-acquisition (based on
11 https://github.com/JKirchartz/fortunes ; thanks
12 @JKirchartz ). Under the Unlicense.
14 cookie-files file: Tabs to spaces.
16 December 14, 2021 (fortune-mod 3.8.0)
18 Try to fix crosscompiling builds
19 ( https://github.com/shlomif/fortune-mod/issues/58 ; thanks
22 Merged datfiles/linuxcookie into datfiles/linux
23 while removing duplicates.
27 Tests suite's speed optimizations.
29 Code cleanups / refactoring.
31 Generate GitHub Actions' scripts.
33 May 31, 2021 (fortune-mod 3.6.1)
35 Fix missing rinutils in release tarball.
36 ( https://github.com/shlomif/fortune-mod/issues/52 ; thanks
39 April 20, 2021 (fortune-mod 3.6.0)
41 Some lib-recode handling fixes.
45 Move some stuff to off.
46 ( https://github.com/shlomif/fortune-mod/pull/51 ; thanks to
50 ( https://github.com/shlomif/fortune-mod/pull/49 ; thanks to
55 November 9, 2020 (fortune-mod 3.4.1)
57 Some lib-recode handling fixes:
58 ( https://github.com/shlomif/fortune-mod/pull/46 ; thanks to @heirecka )
62 November 8, 2020 (fortune-mod 3.4.0)
64 Made the compile-time dependency on lib-recode optional ;
65 handle the missing librinutils better.
66 ( https://github.com/shlomif/fortune-mod/issues/44 )
68 Add some quotes (Thanks in part to @RashadSaleh :
69 https://github.com/shlomif/fortune-mod/pull/43 )
71 September 24, 2020 (fortune-mod 3.2.0)
73 Include rinutils in the source tarball / git checkout.
74 ( https://github.com/shlomif/fortune-mod/issues/44 )
76 September 16, 2020 (fortune-mod 3.0.0)
78 Convert the documentation from troff to DocBook 5/XML using
79 doclifter ( http://www.catb.org/~esr/doclifter/ ). The resultant troff
80 man pages are included in the source release tarball.
82 Fix formatting of several cookies.
84 Minor build fixes (avoid rebuilding the symlinks).
86 Fix the build and tests on AppVeyor-CI / Windows
88 Fix some compiler warnings and modernise the code a little.
90 Add some new fortune cookies.
92 New major version digit just in time for Rosh Hashana
93 and Talk like a Pirate day. Happy new yea..arrrrrrrrr!
95 August 30, 2020 (fortune-mod 2.29.1)
99 Fix the build and tests on AppVeyor-CI / Windows
101 Fix some compiler warnings.
103 August 20, 2020 (fortune-mod 2.29.0)
107 Convert the documentation from troff to DocBook 5/XML using
108 doclifter ( http://www.catb.org/~esr/doclifter/ ). The resultant troff
109 man pages are included in the source release tarball.
111 Fix formatting of several cookies.
113 Minor build fixes (avoid rebuilding the symlinks).
115 June 02, 2020 (fortune-mod 2.28.0)
117 SECURITY [low risk]: avoid overflow with the -i flag
119 Correct attributions and typos (Thanks to Tobin Yehle.)
123 May 02, 2020 (fortune-mod 2.26.0)
125 SECURITY: Avoid integer overflow in parsing the percentages which caused
126 using negative integers.
128 https://metacpan.org/pod/Test::Trap is a new tests' dependency
130 Format strings cleanups in C.
132 April 30, 2020 (fortune-mod 2.24.0)
134 SECURITY: Avoid some potential buffer overflows in unstr, strfile and randstr.
135 - This was found to exist in NetBSD's fortune, and FreeBSD's fortune
136 as well (OpenBSD's fortune appear to have been fixed).
138 Add regression valgrind tests for the buffer overflows.
140 Some cleanups inspired by OpenBSD'd fortune.
142 April 29, 2020 (fortune-mod 2.22.0)
144 SECURITY: Avoid some hypothetical buffer overflows in unstr, strfile and randstr.
146 Modernize and refactor the code.
148 Avoid build targets' proliferation in CMake.
150 April 04, 2020 (fortune-mod 2.20.0)
152 Further avoid double traversal if FORTDIR == LOCFORTDIR.
154 Using clang-format to format the code.
156 Eliminate -D_FORTIFY_SOURCE warnings.
158 Modernize and refactor the code.
160 March 30, 2020 (fortune-mod 2.18.0)
162 Avoid double traversal if FORTDIR == LOCFORTDIR.
164 Typos' corrections and a new quote.
166 February 26, 2020 (fortune-mod 2.16.0)
168 Better portability to Microsoft Windows and other OSes
169 Thanks to AppVeyor (done by Shlomi Fish).
171 Add the -u flag [from debian]
173 Add fortune.desktop [from debian]
175 Remove backspaces in a cookie [from debian]
177 Complete the lyrics of a Leonard Cohen song [from debian]
179 Correct a misattribution.
181 February 23, 2020 (fortune-mod 2.14.0)
183 Correct some typos and add some new cookies.
185 Better Win32/Win64 Portability (AppVeyor is still failing.)
189 December 18, 2019 (fortune-mod 2.12.0)
191 Extract rinutils as a package and require it as a dep:
192 https://github.com/shlomif/rinutils/ .
194 Move some jokes to the offensive collection:
195 https://github.com/shlomif/fortune-mod/pull/38 - thanks
198 June 30, 2019 (fortune-mod 2.10.0)
200 Move strfile and unstr to /usr/bin :
201 https://github.com/shlomif/fortune-mod/issues/35
203 Code cleanups: warnings and portability.
205 Better porting to windows / appveyor-CI
208 June 07, 2019 (fortune-mod 2.8.0)
210 Add some quotes by amigojapan.
212 Some improvements for spelling, punctuation and grammar.
214 Extract a common C header.
218 December 19, 2018 (fortune-mod 2.6.2)
220 Fix the cmake files installation paths. See
221 https://github.com/shlomif/fortune-mod/pull/29 .
223 Some improvements for spelling, punctuation and grammar.
225 Normalize the numbering of "Great Moments in History":
226 https://github.com/shlomif/fortune-mod/issues/28 .
228 July 10, 2018 (fortune-mod 2.6.1)
230 Fix the previously rotated display of offensive fortunes (using the "-o"
231 or "-a" flags). See https://github.com/shlomif/fortune-mod/issues/26 .
233 Incorporate several more minor patches from Debian.
235 June 26, 2018 (fortune-mod 2.6.0)
237 Incorporate patches from the Debian package.
239 Add the "tao", "pratchett" and many individual cookies.
241 March 22, 2018 (fortune-mod 2.4.1)
243 Add the missing cmake/Shlomif_Common.cmake file.
245 March 22, 2018 (fortune-mod 2.4.0)
247 Fix issue #24 reported by @pouar of an underflow error in strfile.
249 Fix some GCC warnings with the Recode flags.
251 Remove some trailing empty lines in fortunes
253 February 15, 2018 (fortune-mod 2.2.1)
255 Fix some mispellings.
257 Remove some duplicates.
259 Thanks to bug reporters on the bug trackers of Linux distributions.
261 January 31, 2018 (fortune-mod 2.2.0)
263 Add the "disclaimer" cookie file (thanks to mathew).
265 Correct some problems in the documentation.
267 Fix some memory leaks (thanks to valgrind).
269 Reenable the valgrind tests (requires Recode 3.7).
271 January 11, 2018 (fortune-mod-2.0.0)
275 Deprecate the BSD_REGEX - we now use only POSIX ones.
279 March 25, 2017 (fortune-mod-1.99.5)
281 Add a new cmake-based configuration/build/install system.
283 Converted the source files to UTF-8.
285 Added automated tests.
287 Removed trailing whitespace.
289 Reformatted long (> 80 chars) lines.
293 Fixed some compiler warnings.
295 Added a build-time option to remove the “-o” (= “offensive”) flag.
297 Incorporated some downstream patches from Linux distributions.
300 March 05, 2004 (fortune-mod-1.99.1)
302 Most of the changes have occurred at some point in time in the last
305 A high number of spelling, punctuation, formatting and grammar
308 Internationalisation support.
310 New -c option to see which file a fortune came from.
314 Incorporated a couple of minor changes made in the (old) Debian
315 fortune-mod package, including the addition of an extra data file
316 called 'cookie'. Renamed some documentation files, and included some
317 install information for non-Linux users. Added a "-v" option to
318 report the program version.
320 I intend to submit this distribution to SunSITE RSN.
322 -- Dennis L. Clark <dbugger@progsoc.uts.edu.au>
326 This release fixes many of the portability problems with the
327 fortune-mod program released by Amy Lewis in October, 1995. The
328 previous version had many Linux-isms in it, which left it unworkable
329 on any other platform. This version replaces most of these with more
330 standard calls, making it more likely to work under other platforms.
331 The Makefiles have been modified so that GNU's gcc and make are no
332 longer required: any standard make and ANSI-compatible C compiler
333 should work. Sorry, pre-ANSI compilers are not supported (c'mon, this
334 is the 90's, darn it!)
336 This version has been tested to work on SunOS 4.1.x as well as Linux.
337 All changes made to the sources were as platform-independant as
338 possible. Therefore, no "#ifdef LINUX" or "#ifdef SUNOS4" directives
339 appear in the code. An effect of this is that a number of 'implicit
340 declaration' warnings are emitted by gcc under SunOS 4.1.x, but this a
341 problem with SunOS's standard headers, not with the program or the
342 compiler. The benefit of this approach is that it eases the work of
343 expanding the port to include other platforms. Bug reports and fixes
344 for other platforms are most welcome!
346 A few "standard" C function calls were replaced with more standard
347 counterparts at various points. Generally, when there was a choice
348 between a BSD version of a function and a POSIX version, the POSIX
349 version was favoured (even though fortune originated on BSD). An
350 exception to this was the regex functions: either POSIX or BSD
351 versions can be used, with selection made via the top-level Makefile.
353 Fortune and strfile also compiles on Solaris 2.5, but a discrepency
354 between the declaration and implementation of 'struct dirent' on the
355 test platform caused fortune to execute incorrectly there. It is not
356 certain whether this is a bug in the header file, the C library, or
359 While the making of this release was not meant to become a bug
360 search-and-destroy mission, some bugs were inadvertently discovered
361 and fixed. including the known bug of using -a with a file that occurs
362 in both the offensive and inoffensive directories. Fixing this
363 particular bug required a way to be able to separately identify two
364 fortune files with the same name, with one in the inoffensive
365 directory, the other one in the offensive directory. Now, such a name
366 will be taken to be the inoffensive file by default. However, you can
367 now append '-o' to a fortune name, and the '-o' will be removed and
368 the offensive directory will be searched. Thus you can say (assuming
369 you use the distributed datfiles):
371 fortune 80% politics politics-o
373 Which has an 80% change of giving an "inoffensive" political fortune,
374 and a 20% change of giving an "offensive" political one. Note that
375 this makes fortune-mod backwards-compatible with BSD fortune, but only
376 for users, not fortune database maintainers.
378 Of course, this solution only passes the buck: with the above example
379 again, if you have a 'politics-o' file in your inoffensive directory,
380 you are back to square one. OTOH, seeing that '-o' originally was
381 meant for offensive fortunes, using it for inoffensive ones is simply
384 Bug fixed: Fortune's definition of a fortune length (for -s and -l)
385 was inconsistent. Unordered fortunes counted the 2 delimiting
386 characters (as hinted in the man page), but sorted or randomized
387 fortunes did not. Now the delimiting characters are _NEVER_ counted,
388 so you will always get the length limit you expect.
390 Another bug fix: -l and -s can now work together with -m. Previously
391 -l and -s were ignored when -m was in effect. The new behaviour helps
392 me count how many long or short fortunes there are in a file.
394 Ansify has been removed from the package, as well as some filter
395 scripts from NetBSD that no longer appear useful. Randstr has been
396 kept, but has not been improved in any way. It at least has a man
397 page: maybe somebody will find it useful.
399 Some of the documentation (including the man pages) has been improved
400 and updated, and some files have been renamed so that the package
401 looks less Linux-specific.
403 -- Dennis L. Clark <dbugger@progsoc.uts.edu.au>
406 Ansify has been abandoned. I'm going to distribute this working version
407 of fortune, and then see how difficult it would be to add termcap/terminfo
408 enhancements to fortune itself--I don't anticipate serious problems, but
409 I'd rather go ahead and get this on the net.
411 A last-minute change was made to the way that percentages are displayed
412 with -f; it is now in the format nnn.nn%. The reason for this is that
413 with the multiplication of small files, fortune -af displayed a large
414 number of "0%"s--no worse than the old version, but not helpful.
416 The fortunes database was finally cleaned up, and this version is now
417 being distributed (at least, I hope it is). I don't consider the current
418 division of fortunes among files absolutely canonical; some are certainly
419 in the wrong places. But things are *better*.
421 Amy A. Lewis alewis@email.unc.edu
424 Another utility, ansify, now compiles; it has not been tested at all, so
425 it may not work even slightly.
427 Ansify is a rather stupid program, all things considered, but the work on
428 it does raise an interesting possibility for an enhanced fortune. At
429 present, the fortune databases contain x^Hy sequences for underline and
430 special characters (and this can be extended to include bold, = x^Hx).
431 Ansify is stupid because it doesn't use the proper tools, ie termcap or
432 terminfo (hmmm ... since it works on files, that may not be so stupid);
433 it appears that if that can be done, then a termcap/terminfo enhanced
434 fortune could be produced, which would recognize the existence of ^H in
435 a string and attempt to display using appropriate control sequences.
436 This sort of modification would be of greater interest to casual users,
437 I think, than even the bug fixes, and since it would not force changes
438 in the storage of fortunes, it is eminently portable. Consider this a
441 Added (early October 95):
442 A new executable, rot, which is a rot13 filter (a caesar cipher). Most
443 probably have caesar, but on the other hand, if you compile this mess
444 as root, caesar probably isn't in the path.
446 A new parameter to fortune, -n, which permits you to specify the length
447 at which to break between long (-l) and short (-s) fortunes.
449 fortune -f now shows probabilities.
451 A bug: fortune -a nn% filename filename ... now fails without an error
452 message, if the filename named following the percentage exists in both
453 the inoffensive and the offensive directories (that is, if you have two
454 files containing definitions, one called fortunes/definitions and one
455 called fortunes/off/definitions, and call fortune as: fortune -a 10%
456 definitions religion politics ..., then fortune simply fails). This
457 appears to be an artifact of the changes that were made in storage/
458 naming of offensive fortunes. It only happens with the combination of
459 a percentage with -a and inoffensive/offensive files that share a name.
460 Temporary workaround: rename one or the other of the files (*sigh* I
461 don't like that as a solution).
463 The man pages have been updated. The old man pages are also available,
464 but are not installed unless you do it yourself (the new ones are). The
465 new man pages have the extension .man; the old ones have numeric
468 A place has been created for fortune files containing HTML tags (the
469 reason I started playing with this mess was because I wanted to be
470 able to format fortunes nicely for the web without having to run an
471 enormously complex script to figure out from formatting how best to
472 display things, a particular problem since the formatting isn't
473 consistent). Tagged fortunes don't exist yet, and I'm seriously
474 considering creating a slightly different fortune binary that would
475 output the necessary headers and trailers (reducing the CGI script
476 to complete triviality) (-f isn't really needed for a webfortune).
478 Todo: I'm thinking of adding a -x to unstr, to rot13 the output. This
479 would have the effect of putting all the necessary tools in one package.
480 It further breaks compatibility with BSD tools (which has *mostly* been
481 maintained, merely enhanced slightly, although the change in how
482 offensive files are distinguished from inoffensive might be regarded as
483 breaking compatibility) by adding yet another parameter to unstr, which
484 didn't have any, before. So I haven't decided, yet.
486 Todo: KOI8 encoded fortunes? They couldn't be rotated without a great
487 deal of trouble, of course.
491 The way that fortune -m prints its output has been slightly changed. It
492 used to print the delimiter first, then, if this were the first fortune
493 from a particular file, it printed the name of the file in parentheses.
494 It now prints the first fortune without an initial delimiter; if the
495 fortune is the first from a particular file, it then prints
496 (filename), newline, delimiter, newline *to stderr*. Redirect stderr to
497 stdout to get something *similar to* (but not the same as) the old
498 behavior. The new behavior, if stderr is redirected to stdout, and
499 both are then redirected to a file, produces fictitious entries, one
500 per file in which a match was found. However, whether stderr is
501 redirected or not, the new format produces files that strfile can
502 parse without choking (the old format, since it placed the filename
503 on the same line as the delimiter character, effectively forced editing
504 of the file in order to make it usable by strfile, unless the option of
505 concatenating two fortunes with an ugly "% (filename)" line separating
506 them was considered acceptable output). Under the new display format,
507 if stderr is redirected into the file, you end up with filenames marking
508 the separation between files (as before), but they are now valid text
509 strings (which should probably, therefore, be deleted).
511 In other words, if you don't care what files the original text came from,
512 and want a new file containing (let us say), quotes from Mark Twain,
514 fortune -am '-- Mark Twain' >twain
515 The files accessed would march down the screen; the fortunes would be
516 stored in parsable format into the file twain. If, however, you planned
517 to edit (perhaps to remove the quotes from the original file, you might
518 then wish to redirect stderr to stdout. Using bash:
519 fortune -am '-- Mark Twain' &>twain
521 fortune -am '-- Mark Twain' >twain 2>&1
523 [The above is now in the man page, more or less]
526 Too many changes to mention, really. Look at the source code for
527 comments on individual files. LINUX.DIF has been removed.
529 It is worth noting that strfile was completely broken as distributed,
530 and fortune had code to make it report a different file list than the
531 one it used to retrieve fortunes. There's some rather strong language
532 on the subject in strfile.c; if it offends you, tough.
534 Bugs were fixed, and some enhancements were added. Unstr, in
535 particular, has had its command line considerably enhanced. Strfile
536 now *really does* sort, instead of merely setting the 'sorted' flag.
537 Ditto for randomizing.
539 Noteworthy: the way to distinguish between offensive and non-offensive
540 files has changed for fortune. A second directory (which may be a
541 subdirectory of the main fortune directory; the program doesn't
542 add files recursively down a directory tree) has been added to
543 pathnames.h. Offensive files should be placed there. There is no
544 longer any need to add the -o suffix to file names, and the problems
545 with finding files (especially offensive ones) seem to have
546 disappeared in the process.
548 Currently, I'm working on breaking the fortune files themselves into
549 smaller, more manageable pieces, checking spelling, punctuation, and
550 grammar, and trying to reduce redundancy. The eventual goal, after
551 the files are cleaned up, is another set of files carrying HTML tags,
552 which would then massively simplify a CGI script that calls fortune.
556 A 'randstr' (I want to call it 'lottery,' but I won't) utility, which
557 amounts to a poor woman's stripped-down fortune, to illustrate some
558 other possible uses of strfile-type random-access strings files.
560 Amy A. Lewis alewis@email.unc.edu