Code cleanup

From FlightGear wiki
Jump to navigation Jump to search

The purpose of this page is to provide a todo-list or check-list for anyone that wants to help clean up the Flightgear (FG) code. In addition to this list, you also want to try running FG in Valgrind, a very powerful memory debugger and profiler. http://freshmeat.net/projects/valgrind/

Feel free to add additional items to this page

Thanks -- Cameron Moore

Major Task List

  • Move code out of fgMainLoop() and into separate functions or source files.
  • Replace system() calls in simgear/io/sg_binobj.cxx to `mkdir`
  • Replace system() call in simgear/io/sg_binobj.cxx to `gzip`
  • Allow aircraft to be reliably changed at runtime, without requiring a restart of FlightGear
  • Implement scenery support for dynamic LOD configuration at runtime
  • Optimize the 3D panel code and optionally support display list usage
  • Add OpenGL bindings to the scripting language Nasal to support scripted creation of instruments like the HUD
  • Encourage liberal use of SGSharedPointer whereever raw pointers are currently used
  • Split up unnecessarily large files into several separate compilation units, which should eventually also speed up compilation

Persistent Checklist

Carelessness

  • Properly allocate and deallocate memory using malloc/new/new[{][}] and free/delete/delete[{][}]. Valgrind is helpful when looking for these.
  • Close any open file streams when you're through with them. Take care to not write to or close streams that aren't open. Avoid this by initializing file pointers/handles with 0 before use and verify that it is not 0 before accessing/closing.

Compatibility

  • Use the SG_LOG() facilities instead of cout and printf().
  • Use the SG_USING_STD() facilities instead of explicitly using std::function.
  • Use the STL_* variables defined in simgear/compiler.h when including STL headers.
  • When including header files, only use double-quotes when the header is in the same directory.


Security

  • Use C-string functions with fixed write buffers whenever possible to avoid buffer overflows.
  • Perform range/bounds checks on all data received from remote that could cause problems, especially those that specify an amount of data to be handled.

For example, use snprintf() instead of sprintf() and strncpy() instead of strcpy().

And please do not forget that snprintf and strncpy does not necessarily add a trailing 0 byte.