From: Stacey Son <[email protected]> Add implementation of uuidgen(2) syscall that generates UUIDs and converts them to target ABI format.
Signed-off-by: Stacey Son <[email protected]> Signed-off-by: Warner Losh <[email protected]> --- bsd-user/bsd-misc.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/bsd-user/bsd-misc.h b/bsd-user/bsd-misc.h index d81b4fbaef..b722c63437 100644 --- a/bsd-user/bsd-misc.h +++ b/bsd-user/bsd-misc.h @@ -43,6 +43,40 @@ static inline abi_long do_bsd_reboot(abi_long how) return -TARGET_ENOSYS; } +/* uuidgen(2) */ +static inline abi_long do_bsd_uuidgen(abi_ulong target_addr, int count) +{ + int i; + abi_long ret; + struct uuid *host_uuid; + + if (count < 1 || count > 2048) { + return -TARGET_EINVAL; + } + + host_uuid = g_malloc(count * sizeof(struct uuid)); + + if (host_uuid == NULL) { + return -TARGET_ENOMEM; + } + + ret = get_errno(uuidgen(host_uuid, count)); + if (is_error(ret)) { + goto out; + } + for (i = 0; i < count; i++) { + ret = host_to_target_uuid(target_addr + + (abi_ulong)(sizeof(struct target_uuid) * i), &host_uuid[i]); + if (is_error(ret)) { + goto out; + } + } + +out: + g_free(host_uuid); + return ret; +} + /* getdtablesize(2) */ static inline abi_long do_bsd_getdtablesize(void) { -- 2.52.0
