On Sat, 4 Jul 2009 02:18:53 +0300 Pauli Nieminen <suok...@gmail.com> 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 Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel