Skip to content
Snippets Groups Projects
  1. Jul 04, 2010
    • Wolfgang Denk's avatar
      Make sure that argv[] argument pointers are not modified. · 54841ab5
      Wolfgang Denk authored
      
      The hush shell dynamically allocates (and re-allocates) memory for the
      argument strings in the "char *argv[]" argument vector passed to
      commands.  Any code that modifies these pointers will cause serious
      corruption of the malloc data structures and crash U-Boot, so make
      sure the compiler can check that no such modifications are being done
      by changing the code into "char * const argv[]".
      
      This modification is the result of debugging a strange crash caused
      after adding a new command, which used the following argument
      processing code which has been working perfectly fine in all Unix
      systems since version 6 - but not so in U-Boot:
      
      int main (int argc, char **argv)
      {
      	while (--argc > 0 && **++argv == '-') {
      /* ====> */	while (*++*argv) {
      			switch (**argv) {
      			case 'd':
      				debug++;
      				break;
      			...
      			default:
      				usage ();
      			}
      		}
      	}
      	...
      }
      
      The line marked "====>" will corrupt the malloc data structures and
      usually cause U-Boot to crash when the next command gets executed by
      the shell.  With the modification, the compiler will prevent this with
      an
      	error: increment of read-only location '*argv'
      
      N.B.: The code above can be trivially rewritten like this:
      
      	while (--argc > 0 && **++argv == '-') {
      		char *arg = *argv;
      		while (*++arg) {
      			switch (*arg) {
      			...
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      Acked-by: default avatarMike Frysinger <vapier@gentoo.org>
      54841ab5
    • Wolfgang Denk's avatar
      Make *printf() return "int" instead of "void" · d9c27253
      Wolfgang Denk authored
      
      Change the return type of the *printf() functions to the standard
      "int"; no changes are needed but returning the already available
      length count.
      
      This will save a few additional strlen() calls later...
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      d9c27253
  2. Apr 21, 2010
  3. Apr 13, 2010
  4. Dec 05, 2009
    • Ingo van Lil's avatar
      Generic udelay() with watchdog support · 3eb90bad
      Ingo van Lil authored
      
      According to the PPC reference implementation the udelay() function is
      responsible for resetting the watchdog timer as frequently as needed.
      Most other architectures do not meet that requirement, so long-running
      operations might result in a watchdog reset.
      
      This patch adds a generic udelay() function which takes care of
      resetting the watchdog before calling an architecture-specific
      __udelay().
      
      Signed-off-by: default avatarIngo van Lil <inguin@gmx.de>
      3eb90bad
  5. Jul 27, 2009
  6. Jul 21, 2009
Loading