Hi, On 01/30/2014 12:51 AM, Peter Hutterer wrote: > Fallout from fecc7eb1cf66db64728ee2d68cd9443df7e70879, and reverts most of the > rest of that patch. > > The device name is allocated and may even change during PreInit. The const > warnings came from the test codes, the correct fix here is to fix the test > code. > > touch.c: In function ‘touch_init’: > touch.c:254:14: warning: assignment discards ‘const’ qualifier from pointer > target type [enabled by default] > dev.name = "test device"; > > Signed-off-by: Peter Hutterer <[email protected]>
Again, please use XNFstrdup instead of strdup sorry for being a PITA about this, but IMHO we should always check for malloc errors, rather then ignore them silently. Yes they should never happen that is why "tearing the house down" is an ok response to malloc errors, ignoring them is not. I guess we already have a lot of code getting this wrong, but that is not an excuse to add more code getting it wrong. With that changed: Reviewed By: Hans de Goede <[email protected]> Regards, Hans > --- > Xi/extinit.c | 4 ++-- > dix/devices.c | 2 +- > include/inputstr.h | 2 +- > test/touch.c | 20 +++++++++++++++----- > 4 files changed, 19 insertions(+), 9 deletions(-) > > diff --git a/Xi/extinit.c b/Xi/extinit.c > index 9ebd733..26c628c 100644 > --- a/Xi/extinit.c > +++ b/Xi/extinit.c > @@ -1169,8 +1169,8 @@ IResetProc(ExtensionEntry * unused) > EventSwapVector[DevicePropertyNotify] = NotImplemented; > RestoreExtensionEvents(); > > - free((void *) xi_all_devices.name); > - free((void *) xi_all_master_devices.name); > + free(xi_all_devices.name); > + free(xi_all_master_devices.name); > > XIBarrierReset(); > } > diff --git a/dix/devices.c b/dix/devices.c > index 45de713..a875f03 100644 > --- a/dix/devices.c > +++ b/dix/devices.c > @@ -955,7 +955,7 @@ CloseDevice(DeviceIntPtr dev) > while (dev->xkb_interest) > XkbRemoveResourceClient((DevicePtr) dev, > dev->xkb_interest->resource); > > - free((void *) dev->name); > + free(dev->name); > > classes = (ClassesPtr) &dev->key; > FreeAllDeviceClasses(classes); > diff --git a/include/inputstr.h b/include/inputstr.h > index dfcf7c3..f6cfb04 100644 > --- a/include/inputstr.h > +++ b/include/inputstr.h > @@ -542,7 +542,7 @@ typedef struct _DeviceIntRec { > GrabInfoRec deviceGrab; /* grab on the device */ > int type; /* MASTER_POINTER, MASTER_KEYBOARD, SLAVE */ > Atom xinput_type; > - const char *name; > + char *name; > int id; > KeyClassPtr key; > ValuatorClassPtr valuator; > diff --git a/test/touch.c b/test/touch.c > index df1db11..a232e60 100644 > --- a/test/touch.c > +++ b/test/touch.c > @@ -40,7 +40,7 @@ touch_grow_queue(void) > int i; > > memset(&dev, 0, sizeof(dev)); > - dev.name = "test device"; > + dev.name = strdup("test device"); > dev.id = 2; > dev.valuator = &val; > val.numAxes = 5; > @@ -82,6 +82,8 @@ touch_grow_queue(void) > assert(t->client_id == 0); > assert(t->ddx_id == 0); > } > + > + free(dev.name); > } > > static void > @@ -95,7 +97,7 @@ touch_find_ddxid(void) > int i; > > memset(&dev, 0, sizeof(dev)); > - dev.name = "test device"; > + dev.name = strdup("test device"); > dev.id = 2; > dev.valuator = &val; > val.numAxes = 5; > @@ -150,6 +152,8 @@ touch_find_ddxid(void) > ProcessWorkQueue(); > ti = TouchFindByDDXID(&dev, 40, TRUE); > assert(ti == &dev.last.touches[size]); > + > + free(dev.name); > } > > static void > @@ -164,7 +168,7 @@ touch_begin_ddxtouch(void) > int size = 5; > > memset(&dev, 0, sizeof(dev)); > - dev.name = "test device"; > + dev.name = strdup("test device"); > dev.id = 2; > dev.valuator = &val; > val.numAxes = 5; > @@ -195,6 +199,8 @@ touch_begin_ddxtouch(void) > assert(ti->client_id > last_client_id); > assert(!ti->emulate_pointer); > last_client_id = ti->client_id; > + > + free(dev.name); > } > > static void > @@ -212,7 +218,7 @@ touch_begin_touch(void) > screenInfo.screens[0] = &screen; > > memset(&dev, 0, sizeof(dev)); > - dev.name = "test device"; > + dev.name = strdup("test device"); > dev.id = 2; > > memset(&sprite, 0, sizeof(sprite)); > @@ -237,6 +243,8 @@ touch_begin_touch(void) > assert(ti->emulate_pointer); > > assert(touch.num_touches == 1); > + > + free(dev.name); > } > > static void > @@ -251,7 +259,7 @@ touch_init(void) > screenInfo.screens[0] = &screen; > > memset(&dev, 0, sizeof(dev)); > - dev.name = "test device"; > + dev.name = strdup("test device"); > > memset(&sprite, 0, sizeof(sprite)); > dev.spriteInfo = &sprite; > @@ -264,6 +272,8 @@ touch_init(void) > rc = InitTouchClassDeviceStruct(&dev, 1, XIDirectTouch, 2); > assert(rc == TRUE); > assert(dev.touch); > + > + free(dev.name); > } > > int > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
