On Sun, Jul 05, 2009 at 06:51:26PM +0300, Pauli Nieminen wrote: > Attached improved patch. > > From cdf9faaab782f2a84ee16c27a4e7b1f70d2e6ad5 Mon Sep 17 00:00:00 2001 > From: Pauli Nieminen <[email protected]> > Date: Sun, 5 Jul 2009 18:31:18 +0300 > Subject: [PATCH 5/6] libdrm: Make chown check for return value. > If call was interrupted by signal we have to make call again. > > --- > libdrm/xf86drm.c | 19 ++++++++++++++++--- > 1 files changed, 16 insertions(+), 3 deletions(-) > > diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c > index 7b05386..3da0380 100644 > --- a/libdrm/xf86drm.c > +++ b/libdrm/xf86drm.c > @@ -269,6 +269,19 @@ static int drmMatchBusID(const char *id1, const char > *id2) > return 0; > } > > +static int chownCheckReturn(const char *path, uid_t owner, gid_t group)
Camel case must die. :) chown_check_return instead, please.
> +{
> + int rv;
> + do {
> + rv = chown(path, owner, group);
> + } while( rv != 0 && errno == EINTR);
> + if (rv == 0)
> + return 0;
> + char *errMsg = strerror(errno);
> + drmMsg("Failed to change ower or group for file %s! %d: %s\n",path,
> errno, errMsg);
Please wrap long lines.
> + return -1;
> +}
> +
> /**
> * Open the DRM device, creating it if necessary.
> *
> @@ -307,7 +320,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 +333,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 +376,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
signature.asc
Description: Digital signature
------------------------------------------------------------------------------
-- _______________________________________________ Dri-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/dri-devel
