Commit 140a45fc authored by Andres Salomon's avatar Andres Salomon Committed by Dave Airlie

drm: replace DRM_COPY macro w/ a function

Don't inline it; the compiler can figure it out.  Comments added that are
based upon my interpretation of the code.  Hopefully they're correct. :)
Signed-off-by: default avatarAndres Salomon <dilinger@collabora.co.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 156822f7
...@@ -368,14 +368,25 @@ module_exit(drm_core_exit); ...@@ -368,14 +368,25 @@ module_exit(drm_core_exit);
/** /**
* Copy and IOCTL return string to user space * Copy and IOCTL return string to user space
*/ */
#define DRM_COPY(name, value) \ static int drm_copy_field(char *buf, size_t *buf_len, const char *value)
len = strlen(value); \ {
if (len > name##_len) len = name##_len; \ int len;
name##_len = strlen(value); \
if (len && name) { \ /* don't overflow userbuf */
if (copy_to_user(name, value, len)) \ len = strlen(value);
return -EFAULT; \ if (len > *buf_len)
} len = *buf_len;
/* let userspace know exact length of driver value (which could be
* larger than the userspace-supplied buffer) */
*buf_len = strlen(value);
/* finally, try filling in the userbuf */
if (len && buf)
if (copy_to_user(buf, value, len))
return -EFAULT;
return 0;
}
/** /**
* Get version information * Get version information
...@@ -392,14 +403,13 @@ static int drm_version(struct drm_device *dev, void *data, ...@@ -392,14 +403,13 @@ static int drm_version(struct drm_device *dev, void *data,
struct drm_file *file_priv) struct drm_file *file_priv)
{ {
struct drm_version *version = data; struct drm_version *version = data;
int len;
version->version_major = dev->driver->major; version->version_major = dev->driver->major;
version->version_minor = dev->driver->minor; version->version_minor = dev->driver->minor;
version->version_patchlevel = dev->driver->patchlevel; version->version_patchlevel = dev->driver->patchlevel;
DRM_COPY(version->name, dev->driver->name); drm_copy_field(version->name, &version->name_len, dev->driver->name);
DRM_COPY(version->date, dev->driver->date); drm_copy_field(version->date, &version->date_len, dev->driver->date);
DRM_COPY(version->desc, dev->driver->desc); drm_copy_field(version->desc, &version->desc_len, dev->driver->desc);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment