59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Part of libvboxfs - (c) 2012, D.C. van Moolenbroek */
 | |
| 
 | |
| #include "inc.h"
 | |
| 
 | |
| /*
 | |
|  * Get or set file information.
 | |
|  */
 | |
| int
 | |
| vboxfs_getset_info(vboxfs_handle_t handle, u32_t flags, void *data,
 | |
| 	size_t size)
 | |
| {
 | |
| 	vbox_param_t param[5];
 | |
| 
 | |
| 	vbox_set_u32(¶m[0], vboxfs_root);
 | |
| 	vbox_set_u64(¶m[1], handle);
 | |
| 	vbox_set_u32(¶m[2], flags);
 | |
| 	vbox_set_u32(¶m[3], size);
 | |
| 	vbox_set_ptr(¶m[4], data, size, VBOX_DIR_INOUT);
 | |
| 
 | |
| 	return vbox_call(vboxfs_conn, VBOXFS_CALL_INFO, param, 5, NULL);
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Query volume information.
 | |
|  */
 | |
| int
 | |
| vboxfs_query_vol(char *path, vboxfs_volinfo_t *volinfo)
 | |
| {
 | |
| 	vboxfs_handle_t h;
 | |
| 	int r;
 | |
| 
 | |
| 	if ((r = vboxfs_open_file(path, O_RDONLY, 0, &h, NULL)) != OK)
 | |
| 		return r;
 | |
| 
 | |
| 	r = vboxfs_getset_info(h, VBOXFS_INFO_GET | VBOXFS_INFO_VOLUME,
 | |
| 	    volinfo, sizeof(*volinfo));
 | |
| 
 | |
| 	vboxfs_close_file(h);
 | |
| 
 | |
| 	return r;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Query volume information.
 | |
|  */
 | |
| int
 | |
| vboxfs_queryvol(char *path, u64_t *free, u64_t *total)
 | |
| {
 | |
| 	vboxfs_volinfo_t volinfo;
 | |
| 	int r;
 | |
| 
 | |
| 	if ((r = vboxfs_query_vol(path, &volinfo)) != OK)
 | |
| 		return r;
 | |
| 
 | |
| 	*free = volinfo.free;
 | |
| 	*total = volinfo.total;
 | |
| 	return OK;
 | |
| }
 | 
