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
  2. Jul 17, 2009
    • Jean-Christophe PLAGNIOL-VILLARD's avatar
      stdio/device: rework function naming convention · 52cb4d4f
      Jean-Christophe PLAGNIOL-VILLARD authored
      
      So far the console API uses the following naming convention:
      
      	======Extract======
      	typedef struct device_t;
      
      	int	device_register (device_t * dev);
      	int	devices_init (void);
      	int	device_deregister(char *devname);
      	struct list_head* device_get_list(void);
      	device_t* device_get_by_name(char* name);
      	device_t* device_clone(device_t *dev);
      	=======
      
      which is too generic and confusing.
      
      Instead of using device_XX and device_t we change this
      into stdio_XX and stdio_dev
      
      This will also allow to add later a generic device mechanism in order
      to have support for multiple devices and driver instances.
      
      Signed-off-by: default avatarJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
      
      Edited commit message.
      
      Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
      52cb4d4f
  3. Jan 28, 2009
  4. Aug 31, 2008
  5. Aug 29, 2008
  6. Jan 09, 2008
Loading