view doc/admin/todo-small.txt @ 7:57b2cc9b87f7

Use memcpy instead of strncpy when we know the length anyway. Modern gcc seems to think it knows how to detect misuse of strncpy, but it's wrong (in fact: very, very wrong) and the path of least resistance is to not try to fight with it.
author David A. Holland
date Mon, 30 May 2022 23:47:52 -0400
parents 13d2b8934445
children
line wrap: on
line source

Small todo items

This file describes the smaller and more code-oriented things that
need to be done.

------------------------------------------------------------
POSSIBLE BUGS

 - AgStackStorage::~AgStackStorage (in support/agstack.cpp, near the
bottom) has a bogus delete call. See comment there.

 - There's some thread locking in a few places (one being
openfile.cpp, another being stacks.cpp) and most of it appears to be
pretty bogus. This should be cleaned up. (Note: the ICritSec class is
really a locking hook, not a lock; all ICritSec instances appear to be
connected to a single big global lock. How lame. Also, why do Windows
people insist on creating "critical section" objects? A critical
section is a piece of *code*.) Relatedly, rewrite/replace resource.h.

 - fence_ng in myalloc.cpp will probably blow up on non-intel
architectures. All of myalloc.cpp should probably be revamped.


------------------------------------------------------------
CODE CLEANUP

 - There are quite a few uses of sprintf and vsprintf about. These
should be replaced with snprintf and vsnprintf.

 - Should fix up any code that warns when -fno-strict-aliasing is
turned off.

 - fix up the configuration parameters so they aren't all defined in
three places (config.h, config.cpp, and cf.syn) - maybe rig up some
code generation so they can be listed once.

 - fix or remove FindTabs class (currently in wdata.h); it copies the
string but doesn't use the copy.

- Move things that don't need to be in header files into the
corresponding source files, to reduce crosstalk.

- Figure out where to put PUREMARK instead of defining it separately
in key.cpp, ut.cpp, and ws.cpp.

 - void_token_type is an int and it very much looks like it ought to
be unsigned.

 - buildErrorMsg[] ought to belong to error.h.
(this should make ctrlpanel.cpp not need bpe3.h)

 - The templates in regismd.h have become quite disgusting with
apparently-now-required explicit template name qualification all over
everywhere. Fix.

- AgAction::Kernel (in action.h), or most of it, should be a generic
RefCount object.

- The key_words enum is declared in both bpe3.cpp and keyword.cpp, and
should be shared in a header file. It also looks like it *must* be the
same as the key_words enum declared in engine.cgs.

- agstring.cpp shouldn't be including csexp.h
- bitmap.h shouldn't be including data.h
- windowreg.cpp shouldn't be using vaclgui files
- there are still some uses of "extern" in various cpp files
- extern char *string_base in dvplug.cpp
- in bpe3.cpp check header_write_error for consistent usage (is error
  EOF or just nonzero?)
- how about condensing all the cut&pasted comparison code in agstring.cpp?
- in dspar.cpp, make ColorPair::setValue(char *) be const char *

------------------------------------------------------------
CODE

 - It should be possible to disable certain warnings on the agcl
command line. (e.g. unused tokens, conflicts resolved by precedence
rules, stuff like that.)

 - Add -v option to agcl to print the version.

 - It would be nice if the copyright notice in the About box linked to
the copy of the license in the help system. Right now, we can't do
that, because the About box isn't a help window and doesn't have help
links per se.

 - Figure out where to put agclib1 in the tree. Also figure out how to
maintain it separately without causing an administrative nightmare.

 - It would be nice if the about box listed the author, and it
doesn't. But I think it's going to need multiple tabs or something to
have room to do it nicely, and that's a hassle. (Nor is it worth doing
in the old UI.)


------------------------------------------------------------
BUILD

 - Running the test suite under Wine causes diffs. These diffs appear
to be benign as of this writing, but it would be better for everyone
if they didn't happen at all.

 - Running the test suite under Wine requires an X display. Without
one, even agcl.exe doesn't work. It's not immediately clear why, but
it might not be all that hard to fix.

 - make depend crashes out if there are no *.d files. (Or, with the
IBM compiler, *.u files.) This won't happen in the ordinary course of
things, but if someone does "make distclean; make depend" it will.

 - If you build in the source dir, run the tests, and clean the tests,
tests/agcl/ffcalc/number.h, which would be needed by two of the ffcalc
variants to compile if they actually got compiled, gets erased. This
is unimportant, for now at least, but irritating. Probably the right
way to fix it is to revamp the test makefiles to know the exact output
files that should exist instead of using wildcards.

 - It would be nice to have the lint scripts stuff also test-compile
each header file on its own without any other material. Header files
are supposed to themselves include everything they depend on, but in
general this stops being true unless it's enforced.

 - While GNU make can't do successful parallel builds, BSD make could
be made to by use of .WAIT. Setting this up is not all that difficult
given a way to conditionally define $(WAIT) as .WAIT for BSD make and
empty for everyone else, and there are hacks that can be made to
accomplish that.


------------------------------------------------------------
MANUAL AND DOCS

 - From one of the tex faqs:
    : Courier is (as we all know, to our cost) freely available; a far more
    : presentable monospace font is LuxiMono, which is also freely available.
    : Monospace text in the typeset version of this FAQ uses LuxiMono, with
    : the metrics and LaTeX support available on the archive.
http://www.tex.ac.uk/tex-archive/fonts/LuxiMono/

 - Quite a few things in "sbb" (sbb-doc.txt et al.) are just plain
wrong. These should be fixed... but not until the various copies have
been reconciled and can be built from one master version.

 - "reserve keywords" is missing from Appendix A.

 - There should probably be a "bug reporting" topic in the help, and
it should maybe even have its own menu entry in the gui.