[PATCH] loader: actually stat something that has some chance of existing. (v2)

Dave Airlie airlied at redhat.com
Sun Nov 8 14:59:53 PST 2009


On Tue, 2009-10-13 at 10:15 +1000, Dave Airlie wrote:
> FindModuleInSubdir seems to expect a / at the end of the subdir its
> finding for, so we add the / early, the stat will fail if its
> not a subdir, I'm leaving the S_ISDIR in just in case there is another
> reason it could return 0. This does look a bit silly in strace
> but it seems to work fine.
> 
> I have a very intermittent issue where drivers loses its / that
> I've been seeing on/off for a while, this may or may not fix it.
> 

ping?

Dave.

> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  hw/xfree86/loader/loadmod.c |    7 +++++--
>  1 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
> index 0b220f1..5b175a5 100644
> --- a/hw/xfree86/loader/loadmod.c
> +++ b/hw/xfree86/loader/loadmod.c
> @@ -399,8 +399,11 @@ FindModuleInSubdir(const char *dirpath, const char *module)
>      while ((direntry = readdir(dir))) {
>          if (direntry->d_name[0] == '.')
>              continue;
> -        if ((stat(direntry->d_name, &stat_buf) == 0) && S_ISDIR(stat_buf.st_mode)) {
> -            snprintf(tmpBuf, PATH_MAX, "%s/%s", dirpath, direntry->d_name);
> +        snprintf(tmpBuf, PATH_MAX, "%s%s/", dirpath, direntry->d_name);
> +	/* the stat with the appended / fails for normal files,
> +	   and works for sub dirs fine, looks a bit strange in strace
> +	   but does seem to work */
> +        if ((stat(tmpBuf, &stat_buf) == 0) && S_ISDIR(stat_buf.st_mode)) {
>              if ((ret = FindModuleInSubdir(tmpBuf, module)))
>                  break;
>              continue;




More information about the xorg-devel mailing list