On Wednesday, 2019-01-23 10:45:18 +0000, Emil Velikov wrote: > From: Emil Velikov <emil.velikov@xxxxxxxxxxxxx> > > The functions are virtually identical, fold them up. > > Signed-off-by: Emil Velikov <emil.velikov@xxxxxxxxxxxxx> Assuming patch 1 is OK, and `foo` gets renamed to something better: Reviewed-by: Eric Engestrom <eric.engestrom@xxxxxxxxx> I don't know enough to review patch 1 though. > --- > xf86drm.c | 98 +++++++++---------------------------------------------- > 1 file changed, 15 insertions(+), 83 deletions(-) > > diff --git a/xf86drm.c b/xf86drm.c > index 374734eb..18c9693a 100644 > --- a/xf86drm.c > +++ b/xf86drm.c > @@ -3508,7 +3508,7 @@ free_device: > return ret; > } > > -static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info) > +static int drmParseOFBusInfo(int maj, int min, char *fullname) > { > #ifdef __linux__ > char path[PATH_MAX + 1], *name, *foo; > @@ -3532,19 +3532,18 @@ static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info) > foo++; > } > > - strncpy(info->fullname, foo, DRM_PLATFORM_DEVICE_NAME_LEN); > - info->fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0'; > + strncpy(fullname, foo, DRM_PLATFORM_DEVICE_NAME_LEN); > + fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0'; > free(name); > > return 0; > #else > -#warning "Missing implementation of drmParsePlatformBusInfo" > +#warning "Missing implementation of drmParseOFBusInfo" > return -EINVAL; > #endif > } > > -static int drmParsePlatformDeviceInfo(int maj, int min, > - drmPlatformDeviceInfoPtr info) > +static int drmParseOFDeviceInfo(int maj, int min, char ***compatible) > { > #ifdef __linux__ > char path[PATH_MAX + 1], *value, *foo; > @@ -3562,8 +3561,8 @@ static int drmParsePlatformDeviceInfo(int maj, int min, > count = 1; > } > > - info->compatible = calloc(count + 1, sizeof(*info->compatible)); > - if (!info->compatible) > + *compatible = calloc(count + 1, sizeof(char *)); > + if (!*compatible) > return -ENOMEM; > > for (i = 0; i < count; i++) { > @@ -3587,19 +3586,19 @@ static int drmParsePlatformDeviceInfo(int maj, int min, > free(value); > } > > - info->compatible[i] = foo; > + *compatible[i] = foo; > } > > return 0; > > free: > while (i--) > - free(info->compatible[i]); > + free(*compatible[i]); > > - free(info->compatible); > + free(*compatible); > return err; > #else > -#warning "Missing implementation of drmParsePlatformDeviceInfo" > +#warning "Missing implementation of drmParseOFDeviceInfo" > return -EINVAL; > #endif > } > @@ -3622,7 +3621,7 @@ static int drmProcessPlatformDevice(drmDevicePtr *device, > > dev->businfo.platform = (drmPlatformBusInfoPtr)ptr; > > - ret = drmParsePlatformBusInfo(maj, min, dev->businfo.platform); > + ret = drmParseOFBusInfo(maj, min, dev->businfo.platform->fullname); > if (ret < 0) > goto free_device; > > @@ -3630,7 +3629,7 @@ static int drmProcessPlatformDevice(drmDevicePtr *device, > ptr += sizeof(drmPlatformBusInfo); > dev->deviceinfo.platform = (drmPlatformDeviceInfoPtr)ptr; > > - ret = drmParsePlatformDeviceInfo(maj, min, dev->deviceinfo.platform); > + ret = drmParseOFDeviceInfo(maj, min, &dev->deviceinfo.platform->compatible); > if (ret < 0) > goto free_device; > } > @@ -3644,73 +3643,6 @@ free_device: > return ret; > } > > -static int drmParseHost1xBusInfo(int maj, int min, drmHost1xBusInfoPtr info) > -{ > -#ifdef __linux__ > - char path[PATH_MAX + 1], *name; > - > - snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min); > - > - name = sysfs_uevent_get(path, "OF_FULLNAME"); > - if (!name) > - return -ENOENT; > - > - strncpy(info->fullname, name, DRM_HOST1X_DEVICE_NAME_LEN); > - info->fullname[DRM_HOST1X_DEVICE_NAME_LEN - 1] = '\0'; > - free(name); > - > - return 0; > -#else > -#warning "Missing implementation of drmParseHost1xBusInfo" > - return -EINVAL; > -#endif > -} > - > -static int drmParseHost1xDeviceInfo(int maj, int min, > - drmHost1xDeviceInfoPtr info) > -{ > -#ifdef __linux__ > - char path[PATH_MAX + 1], *value; > - unsigned int count, i; > - int err; > - > - snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min); > - > - value = sysfs_uevent_get(path, "OF_COMPATIBLE_N"); > - if (!value) > - return -ENOENT; > - > - sscanf(value, "%u", &count); > - free(value); > - > - info->compatible = calloc(count + 1, sizeof(*info->compatible)); > - if (!info->compatible) > - return -ENOMEM; > - > - for (i = 0; i < count; i++) { > - value = sysfs_uevent_get(path, "OF_COMPATIBLE_%u", i); > - if (!value) { > - err = -ENOENT; > - goto free; > - } > - > - info->compatible[i] = value; > - } > - > - return 0; > - > -free: > - while (i--) > - free(info->compatible[i]); > - > - free(info->compatible); > - return err; > -#else > -#warning "Missing implementation of drmParseHost1xDeviceInfo" > - return -EINVAL; > -#endif > -} > - > static int drmProcessHost1xDevice(drmDevicePtr *device, > const char *node, int node_type, > int maj, int min, bool fetch_deviceinfo, > @@ -3729,7 +3661,7 @@ static int drmProcessHost1xDevice(drmDevicePtr *device, > > dev->businfo.host1x = (drmHost1xBusInfoPtr)ptr; > > - ret = drmParseHost1xBusInfo(maj, min, dev->businfo.host1x); > + ret = drmParseOFBusInfo(maj, min, dev->businfo.host1x->fullname); > if (ret < 0) > goto free_device; > > @@ -3737,7 +3669,7 @@ static int drmProcessHost1xDevice(drmDevicePtr *device, > ptr += sizeof(drmHost1xBusInfo); > dev->deviceinfo.host1x = (drmHost1xDeviceInfoPtr)ptr; > > - ret = drmParseHost1xDeviceInfo(maj, min, dev->deviceinfo.host1x); > + ret = drmParseOFDeviceInfo(maj, min, &dev->deviceinfo.host1x->compatible); > if (ret < 0) > goto free_device; > } > -- > 2.20.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel