file_system_list impl
This commit is contained in:
		
							parent
							
								
									c1ca086089
								
							
						
					
					
						commit
						0964c3d2ff
					
				@ -3,6 +3,9 @@
 | 
			
		||||
#include "sigar_os.h"
 | 
			
		||||
#include "sigar_util.h"
 | 
			
		||||
 | 
			
		||||
#include <sys/mount.h>
 | 
			
		||||
#include <sys/fs_types.h>
 | 
			
		||||
 | 
			
		||||
int sigar_os_open(sigar_t **sigar)
 | 
			
		||||
{
 | 
			
		||||
    *sigar = malloc(sizeof(**sigar));
 | 
			
		||||
@ -237,11 +240,53 @@ int sigar_os_fs_type_get(sigar_file_system_t *fsp)
 | 
			
		||||
    return SIGAR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int sigar_fsstat(struct statfs **fs, int *num)
 | 
			
		||||
{
 | 
			
		||||
    int size;
 | 
			
		||||
 | 
			
		||||
    if ((*num = getfsstat(NULL, 0, MNT_WAIT)) < 0) {
 | 
			
		||||
        return errno;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    size = ((*num)+1) * sizeof(struct statfs);
 | 
			
		||||
 | 
			
		||||
    *fs = malloc(size);
 | 
			
		||||
 | 
			
		||||
    if ((*num = getfsstat(*fs, size, MNT_WAIT)) < 0) {
 | 
			
		||||
        free(fs);
 | 
			
		||||
        return errno;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return SIGAR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int sigar_file_system_list_get(sigar_t *sigar,
 | 
			
		||||
                               sigar_file_system_list_t *fslist)
 | 
			
		||||
{
 | 
			
		||||
    int i, num, status;
 | 
			
		||||
    struct statfs *fs;
 | 
			
		||||
 | 
			
		||||
    if ((status = sigar_fsstat(&fs, &num)) != SIGAR_OK) {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sigar_file_system_list_create(fslist);
 | 
			
		||||
 | 
			
		||||
    for (i=0; i<num; i++) {
 | 
			
		||||
        sigar_file_system_t *fsp;
 | 
			
		||||
 | 
			
		||||
        SIGAR_FILE_SYSTEM_LIST_GROW(fslist);
 | 
			
		||||
 | 
			
		||||
        fsp = &fslist->data[fslist->number++];
 | 
			
		||||
 | 
			
		||||
        SIGAR_SSTRCPY(fsp->dir_name, fs[i].f_mntonname);
 | 
			
		||||
        SIGAR_SSTRCPY(fsp->dev_name, fs[i].f_mntfromname);
 | 
			
		||||
        SIGAR_SSTRCPY(fsp->sys_type_name, mnt_names[fs[i].f_type]);
 | 
			
		||||
        sigar_fs_type_init(fsp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    free(fs);
 | 
			
		||||
 | 
			
		||||
    return SIGAR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user