Mercurial > hg > toybox
view lib/help.c @ 1604:f057223498e4 draft
Remove more strncpy() calls.
The semantics of strncat() and strncpy() are non-obvious, so let's not use 'em.
Both zero all their remaining buffer space, and with strncat() the size is
the space left at the _end_ of the string (not the size of the buffer) so
it's way too easy to stomp memory you don't own. As long as we have to measure
stuff ourselves to get it right, just use memcpy().
author | Rob Landley <rob@landley.net> |
---|---|
date | Sat, 13 Dec 2014 11:56:41 -0600 |
parents | c51a4dbe5db7 |
children | 5fac2769a159 |
line wrap: on
line source
// Function to display help text #include "toys.h" #if !CFG_TOYBOX_HELP void show_help(void) {;} #else #include "generated/help.h" #undef NEWTOY #undef OLDTOY #define NEWTOY(name,opt,flags) help_##name "\0" #define OLDTOY(name,oldname,opts,flags) "\xff" #oldname "\0" static char *help_data = #include "generated/newtoys.h" ; void show_help(void) { int i = toys.which-toy_list; char *s; for (;;) { s = help_data; while (i--) s += strlen(s) + 1; // If it's an alias, restart search for real name if (*s != 255) break; if (!CFG_TOYBOX) { s = xmprintf("See %s --help\n", ++s); break; } i = toy_find(++s)-toy_list; } fprintf(toys.exithelp ? stderr : stdout, "%s", s); } #endif