device: make device_register() clone the device

This is expected by the callers, but this fact was hidden well within
the old list implementation.

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
master
Jean-Christophe PLAGNIOL-VILLARD 16 years ago committed by Wolfgang Denk
parent e99e9575bb
commit 628ffd73bc
  1. 24
      common/devices.c
  2. 1
      include/devices.h

@ -130,10 +130,32 @@ device_t* device_get_by_name(char* name)
return NULL;
}
device_t* device_clone(device_t *dev)
{
device_t *_dev;
if(!dev)
return NULL;
_dev = calloc(1, sizeof(device_t));
if(!_dev)
return NULL;
memcpy(_dev, dev, sizeof(device_t));
strncpy(_dev->name, dev->name, 16);
return _dev;
}
int device_register (device_t * dev)
{
list_add(&(dev->list), &(devs.list));
device_t *_dev;
_dev = device_clone(dev);
if(!_dev)
return -1;
list_add(&(_dev->list), &(devs.list));
return 0;
}

@ -94,6 +94,7 @@ 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);
#ifdef CONFIG_LCD
int drv_lcd_init (void);

Loading…
Cancel
Save