1
0
Fork 0
Commit Graph

350 Commits

Author SHA1 Message Date
John Zaitseff 1e2fc6ad5f Add SPDX licence identifiers to all source code files 2024-05-26 06:05:27 +10:00
John Zaitseff cc5ee96ceb Update the copyright year to 2024 2024-01-02 12:33:37 +11:00
John Zaitseff 3f3f6157f0 Use -1 instead of EOF for an invalid file descriptor
The POSIX standards specify that the open() and openat() functions
technically return -1, not EOF, on failure -- even though most (perhaps
all) systems define EOF to be -1!
2022-08-02 21:06:18 +10:00
John Zaitseff 30bfcd167a Keep Coverity Scan happy
Coverity Scan (https://scan.coverity.com/projects/trader) complains that
a high-impact defect is present in the scramble() function: "String not
null terminated" -- even though b64encode() does give a NUL-termininated
buffer.
2022-08-01 22:27:56 +10:00
John Zaitseff e3d5d04774 Eliminate a second TOCTOU bug in xmkdir() itself
The theoretical odds of hitting this time-of-check / time-of-use bug are
extremely remote.  But we do want to keep Coverity Scan happy, don't we?
2022-08-01 22:26:12 +10:00
John Zaitseff 89fdb5a65e Eliminate a TOCTOU bug between data_directory() and xmkdir()
Checking the presence of the traditional data directory using stat()
leads to a time-of-check / time-of-use bug by the time it is possibly
created using xmkdir().  Use file descriptors and openat() to work around
this problem.
2022-08-01 22:23:06 +10:00
John Zaitseff 9f5c0c361e Fix bug when the HOME environment variable is empty 2022-08-01 11:37:28 +10:00
John Zaitseff 9f65939586 Make home_directory() an internal function to utils.c 2022-08-01 11:27:09 +10:00
John Zaitseff 1231c084b8 Update the copyright year to 2022 2022-08-01 04:46:15 +10:00
John Zaitseff 2cc2dfffd5 Allow TEXTDOMAINDIR to specify the message catalog path 2021-01-14 13:06:31 +11:00
John Zaitseff 535f4cf965 Refactor locale initialisation into init_locale() 2021-01-14 12:28:02 +11:00
John Zaitseff aa0e539540 Prevent the AppImage internal name from leaking out 2021-01-14 12:07:01 +11:00
John Zaitseff 82d460fe31 Rename init_locale() to init_locale_vars() 2021-01-14 12:04:48 +11:00
John Zaitseff c525bc266f Refactor preliminary initialisation code into init_program_prelim() 2021-01-14 12:04:03 +11:00
John Zaitseff 90a815afbb Create parent directories if required during mkdir 2021-01-12 09:48:05 +11:00
John Zaitseff 9631b64b45 Use make variables instead of autoconf replacements 2021-01-09 10:08:32 +11:00
John Zaitseff 4e1378cbb5 Include libraries recommended by gnulib-tool 2021-01-09 10:08:19 +11:00
John Zaitseff b132686a63 Use the XDG Base Directory Specification for storing game files 2021-01-07 23:19:41 +11:00
John Zaitseff 0d2462ef41 Update the copyright year to 2021 2021-01-07 17:07:55 +11:00
John Zaitseff 6996770631 Tweak reStructuredText files using the default interpreted text role 2020-12-30 10:56:27 +11:00
John Zaitseff 814ce71842 Update the copyright year to 2020 2020-01-02 08:37:36 +11:00
John Zaitseff 7c9b6be6b1 Add a comment for translators about "[Y/N]" in strings
Thanks to Rafael Fontenelle for suggesting this change, as otherwise
translators may well miss the need to localise the "Y" and "N".
2019-11-19 21:50:03 +11:00
John Zaitseff 52997c5860 Remove hyphen from all occurrences of "e-mail"
Because spelling it "e-mail" is so last decade and even century...
2019-04-12 05:13:41 +10:00
John Zaitseff 9414aa7ad6 Convert all text files to reStructuredText (ReST) format
The reStructuredText (ReST) format is still quite readable as raw text,
and is much more capable than the myriad all-slightly-incompatible
variants of Markdown.
2019-04-12 05:04:24 +10:00
John Zaitseff fa0cb153ff Update copyright year to 2019 2019-01-05 08:10:28 +11:00
John Zaitseff d553aca98c Rename ret to n for consistency with other utility functions 2018-08-24 14:53:18 +10:00
John Zaitseff aed5e8a46d Correct comments about locale 2018-08-24 14:11:21 +10:00
John Zaitseff 98696aa91c Use the wide-character version of EILSEQ_REPL 2018-08-24 13:32:32 +10:00
John Zaitseff 7647561a92 Use the more common post-increment form 2018-08-24 13:21:20 +10:00
John Zaitseff daab2e94da Convert xstrfmon() into a wide-character version xwcsfmon()
Also work around buggy implementations of strfmon() that do not copy
complete multibyte sequences that may be part of a locale's
mon_thousands_sep, thousands_sep, mon_decimal_point or decimal_point.
2018-08-24 13:20:51 +10:00
John Zaitseff 6ec3beab75 Minor aesthetic cleanup 2018-08-24 10:46:13 +10:00
John Zaitseff 74218edb89 Bug fix: preincrement index when storing EILSEQ_REPL 2018-08-24 10:45:31 +10:00
John Zaitseff 1e0285f6c0 Rename l_strfmon() and rewrite as xstrfmon() to handle POSIX locale better
Current and previous versions of ISO/IEC 9945-1 (POSIX), particularly SUSv3
(2001) and SUSv4 (2008), require strfmon() to return rather meaningless
strings when used with the POSIX "C" locale.  In particular, the standard
POSIX locale does not define a currency symbol, a monetary radix symbol
(decimal point) or a negative sign.  This means strfmon(..., "%n", -123.45)
is supposed to produce "12345" instead of something like "$-123.45"!

The new xstrfmon() overcomes these limitations by using snprintf() as
appropriate.
2018-08-21 21:55:21 +10:00
John Zaitseff 89be55c7c9 Use __attribute__((unused)) to silence GCC with the -Wextra flag 2018-08-09 18:42:10 +10:00
John Zaitseff 2032f6de8a Move redefinition of _XOPEN_SOURCE into its own Autoconf macro and header
This makes the main source code look a little cleaner, at the expense of
background magic happening in the configure-generated config.h.  But this
magic was already happening for _GNU_SOURCE, __EXTENSIONS__ and the like.

The only wrinkle is that newer versions of NcursesW cause ./configure to
include "-D_XOPEN_SOURCE=600" as part of the compilation command line--on
systems that support _XOPEN_SOURCE=700.  The AC_DEFINE/AC_DEFINE_UNQUOTED
macros automatically comment out any "#undef" lines in config.h, so the
file lib/xopen_source.h works around this limitation.  It is
automatically included by config.h.
2018-08-09 18:05:39 +10:00
John Zaitseff e578802ac6 Use the Gnulib extensions module to define _GNU_SOURCE and __EXTENSIONS__ 2018-08-09 14:11:38 +10:00
John Zaitseff 1f734e960b Replace spaces with tabs and vice versa
For Star Traders, all text files use spaces only (no tabs); for C source
code files, tabs are used, except in comments, where spaces only are used.
2018-08-08 14:55:58 +10:00
John Zaitseff 097c9b0e5b Avoid a Clang warning about a comparison that is always false
Rewrite a check that unscramble_table[] is of the right size as an
assertion, which prevents Clang from issuing a warning that the "result
of comparison of constant 256 with expression of type 'const unsigned
char' is always false".

Oh for the day that C11's _Static_assert can be used amongst all
compilers!  But perhaps Gnulib's assert-h module can be used instead...
2018-08-08 13:50:15 +10:00
John Zaitseff 0e656681bc Correct spelling or grammatical mistakes in various comments 2018-08-06 22:09:20 +10:00
John Zaitseff 5caf1ef165 Keep the Intel C compiler quiet
By default, the Intel C compiler warns "enumerated type mixed with
another type" when compiling this code.  Explicit casts keep it quiet.
2018-08-06 13:59:25 +10:00
John Zaitseff eb0ed43ce2 Bug fix: char may be unsigned on some platforms
The function wctob() returns an int that can be -1; a conversion to
unsigned char will make that value 0xFF.  Although the "if" statement
still works in this case, we should be more diligent in our programming.
2018-08-06 13:57:16 +10:00
John Zaitseff 1c3afc571b Minor whitespace cleanup in #define statements 2018-08-04 22:14:03 +10:00
John Zaitseff 192b749018 Use a better check for Solaris (SunOS 5.x)
The __sun__ macro is not always defined by Oracle Solaris Studio, but
__sun is, as it is in GCC and Clang.  By itself, __sun__ also matches the
very obsolete SunOS 4.x BSD-based operating system, hence the need for
__SVR4 as well.

See https://web.archive.org/web/20180221212835/http://nadeausoftware.com/articles/2012/01/c_c_tip_how_use_compiler_predefined_macros_detect_operating_system
for more information on operating system macro checks.
2018-08-04 18:03:33 +10:00
John Zaitseff 2d6a339fb1 Define _XOPEN_SOURCE correctly for Solaris systems 2018-08-04 16:48:29 +10:00
John Zaitseff de6f113d12 Change parameters of apply_xor() from void * to char *
Arithmetic on void * pointers is undefined, according to Section 6.5.6
Paragraph 2, Section 6.2.5 Paragraph 1 and Section 6.2.5 Paragraph 19 of
the ISO/IEC 9899:1999 C99 standard: the void type is incomplete and thus
its size cannot be determined.

GCC allows pointer arithmetic on void * as an extension (and only warns
if "-Wpointer-arith" is given); the Oracle Developer Studio C compiler
issues a warning by default.
2018-08-04 14:31:45 +10:00
John Zaitseff a47e8528dc Force redefinition of _XOPEN_SOURCE if required
Newer versions of libncurses/libncursesw "#define _XOPEN_SOURCE 600" in
their pkg-config file.  This change forces _XOPEN_SOURCE to be redefined
to 700 in that case.
2018-07-27 18:39:18 +10:00
John Zaitseff f45986e88d Pedantically type-cast integer comparisons
The latest versions of the GNU Compiler Collection complain about signed
and unsigned integer comparisons when run with the "-Wextra" flag.  Keep
those compilers happy.
2018-07-27 18:33:14 +10:00
John Zaitseff c550549783 Correct spelling mistake in utils.c 2018-07-24 18:41:59 +10:00
John Zaitseff 1427eb683f Change label from "New Stock:" to "New stock:" for consistency
This inconsistency (between the "Old stock:" and "New Stock:" labels) has
been present since August 2011!
2018-03-30 14:50:47 +11:00
John Zaitseff abc9b77bd6 Change all relevant http references to https (secure HTTP) 2018-03-30 12:46:37 +11:00