61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Part of libvboxfs - (c) 2012, D.C. van Moolenbroek */
 | |
| 
 | |
| #include "inc.h"
 | |
| 
 | |
| /*
 | |
|  * Store a local path name in the given path object, performing any necessary
 | |
|  * conversions.  The path object is expected to be used read-only, so the size
 | |
|  * of the path object is set as small as possible.  If 'name' is NULL, the path
 | |
|  * will be initialized to the empty string.
 | |
|  */
 | |
| int
 | |
| vboxfs_set_path(vboxfs_path_t *path, char *name)
 | |
| {
 | |
| 	size_t len;
 | |
| 
 | |
| 	len = strlen(name);
 | |
| 
 | |
| 	/* FIXME: missing UTF-8 conversion */
 | |
| 
 | |
| 	if (len >= sizeof(path->data))
 | |
| 		return ENAMETOOLONG;
 | |
| 
 | |
| 	strcpy(path->data, name);
 | |
| 
 | |
| 	path->len = len;
 | |
| 	path->size = len + 1;
 | |
| 
 | |
| 	return OK;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Retrieve the path name from the given path object.  Make sure the name fits
 | |
|  * in the given name buffer first.  The given size must include room for a
 | |
|  * terminating null character.
 | |
|  */
 | |
| int
 | |
| vboxfs_get_path(vboxfs_path_t *path, char *name, size_t size)
 | |
| {
 | |
| 
 | |
| 	/* FIXME: missing UTF-8 conversion */
 | |
| 
 | |
| 	if (path->len >= size)
 | |
| 		return ENAMETOOLONG;
 | |
| 
 | |
| 	assert(path->data[path->len] == 0);
 | |
| 
 | |
| 	strcpy(name, path->data);
 | |
| 
 | |
| 	return OK;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Return the byte size of a previously initialized path object.
 | |
|  */
 | |
| size_t
 | |
| vboxfs_get_path_size(vboxfs_path_t *path)
 | |
| {
 | |
| 
 | |
| 	return offsetof(vboxfs_path_t, data) + path->size;
 | |
| }
 | 
