loader: actually stat something that has some chance of existing. (v2)
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. Signed-off-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
		
							parent
							
								
									a5e59230de
								
							
						
					
					
						commit
						d85ab6b648
					
				| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue