On Sat, 4 Jul 2009 02:18:53 +0300
Pauli Nieminen <[email protected]> wrote:
> ---
> libdrm/xf86drm.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++---
> 1 files changed, 46 insertions(+), 3 deletions(-)
>
> diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c
> index 7b05386..bf80fd4 100644
> --- a/libdrm/xf86drm.c
> +++ b/libdrm/xf86drm.c
> @@ -269,6 +269,49 @@ static int drmMatchBusID(const char *id1, const char
> *id2)
> return 0;
> }
>
> +static int chownCheckReturn(const char *path, uid_t owner, gid_t group)
> +{
> + int rv;
> + do {
> + rv = chown(path, owner, group);
> + } while( rv != 0 && errno == EINTR);
> + if (rv == 0)
> + return 0;
> + char *errMsg = "";
> + switch(errno)
> + {
> + case EACCES:
> + errMsg = "Read permission denied.";
> + break;
> + case ELOOP:
> + errMsg = "Recursive symbolic link.";
> + break;
> + case ENAMETOOLONG:
> + errMsg = "Too long path.";
> + break;
> + case ENOTDIR:
> + errMsg = "Path isn't in a directory.";
> + break;
> + case ENOENT:
> + errMsg = "No file found.";
> + break;
> + case EPERM:
> + errMsg = "No permission to change the permission.";
> + break;
> + case EROFS:
> + errMsg = "Read-only file system.";
> + break;
> + case EIO:
> + errMsg = "I/O error.";
> + break;
> + case EINVAL:
> + errMsg = "The owner or group id is invalid.";
> + break;
> + }
> + drmMsg("Failed to change ower or group for file %s! %d: %s\n",path,
> errno, errMsg);
> + return -1;
> +}
> +
Is there a reason for not using strerror() here?
> /**
> * Open the DRM device, creating it if necessary.
> *
> @@ -307,7 +350,7 @@ static int drmOpenDevice(long dev, int minor, int type)
> if (!isroot)
> return DRM_ERR_NOT_ROOT;
> mkdir(DRM_DIR_NAME, DRM_DEV_DIRMODE);
> - chown(DRM_DIR_NAME, 0, 0); /* root:root */
> + chownCheckReturn(DRM_DIR_NAME, 0, 0); /* root:root */
> chmod(DRM_DIR_NAME, DRM_DEV_DIRMODE);
> }
>
> @@ -320,7 +363,7 @@ static int drmOpenDevice(long dev, int minor, int type)
> }
>
> if (drm_server_info) {
> - chown(buf, user, group);
> + chownCheckReturn(buf, user, group);
> chmod(buf, devmode);
> }
> #else
> @@ -363,7 +406,7 @@ wait_for_udev:
> remove(buf);
> mknod(buf, S_IFCHR | devmode, dev);
> if (drm_server_info) {
> - chown(buf, user, group);
> + chownCheckReturn(buf, user, group);
> chmod(buf, devmode);
> }
> }
> --
> 1.6.3.1
--
Pekka Paalanen
http://www.iki.fi/pq/
------------------------------------------------------------------------------
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel