support recursion in dir_stat
This commit is contained in:
		
							parent
							
								
									7eb8286364
								
							
						
					
					
						commit
						6f6f92fb42
					
				@ -591,8 +591,11 @@ int sigar_link_attrs_get(sigar_t *sigar,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int dir_stat_get(sigar_t *sigar,
 | 
					static int dir_stat_get(sigar_t *sigar,
 | 
				
			||||||
                        const char *dir,
 | 
					                        const char *dir,
 | 
				
			||||||
                        sigar_dir_stat_t *dirstats)
 | 
					                        sigar_dir_stat_t *dirstats,
 | 
				
			||||||
 | 
					                        int recurse)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    int status;
 | 
				
			||||||
 | 
					    int do_log = SIGAR_LOG_IS_WARN(sigar);
 | 
				
			||||||
    char name[SIGAR_PATH_MAX+1];
 | 
					    char name[SIGAR_PATH_MAX+1];
 | 
				
			||||||
    int len = strlen(dir);
 | 
					    int len = strlen(dir);
 | 
				
			||||||
    int max = sizeof(name)-len-1;
 | 
					    int max = sizeof(name)-len-1;
 | 
				
			||||||
@ -644,6 +647,17 @@ static int dir_stat_get(sigar_t *sigar,
 | 
				
			|||||||
            break;
 | 
					            break;
 | 
				
			||||||
          case SIGAR_FILETYPE_DIR:
 | 
					          case SIGAR_FILETYPE_DIR:
 | 
				
			||||||
            ++dirstats->subdirs;
 | 
					            ++dirstats->subdirs;
 | 
				
			||||||
 | 
					            if (recurse) {
 | 
				
			||||||
 | 
					                status = 
 | 
				
			||||||
 | 
					                    dir_stat_get(sigar, name,
 | 
				
			||||||
 | 
					                                 dirstats, recurse);
 | 
				
			||||||
 | 
					                if ((status != SIGAR_OK) && do_log) {
 | 
				
			||||||
 | 
					                    sigar_log_printf(sigar, SIGAR_LOG_WARN,
 | 
				
			||||||
 | 
					                                     "dir_stat: %s: %s\n",
 | 
				
			||||||
 | 
					                                     name,
 | 
				
			||||||
 | 
					                                     sigar_strerror(sigar, status));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
          case SIGAR_FILETYPE_LNK:
 | 
					          case SIGAR_FILETYPE_LNK:
 | 
				
			||||||
            ++dirstats->symlinks;
 | 
					            ++dirstats->symlinks;
 | 
				
			||||||
@ -680,7 +694,7 @@ int sigar_dir_stat_get(sigar_t *sigar,
 | 
				
			|||||||
                       sigar_dir_stat_t *dirstats)
 | 
					                       sigar_dir_stat_t *dirstats)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SIGAR_ZERO(dirstats);    
 | 
					    SIGAR_ZERO(dirstats);    
 | 
				
			||||||
    return dir_stat_get(sigar, dir, dirstats);
 | 
					    return dir_stat_get(sigar, dir, dirstats, 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user