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;
|
||
|
}
|