Newer
Older
vvd / src / uid.c
@dd86k dd86k on 16 Aug 2020 1 KB Interface changes
#include <stdio.h>
#include <assert.h>
#include "uid.h"
#include "utils.h"
#include "platform.h"

//TODO: uid_create(UID*,int): Create UID with target in mind

//
// uid_str
//

int uid_str(char *buf, UID *uid, int target) {
	#ifdef ENDIAN_LITTLE
		if (target == UID_UUID)
			uid_swap(uid);
	#else
		if (target == UID_GUID)
			uid_swap(uid);
	#endif
	return snprintf(buf, UID_LENGTH,
	"%08X-%04X-%04X-%04X-%02X%02X%02X%02X%02X%02X",
	uid->time_low, uid->time_mid, uid->time_ver, uid->clock,
	uid->data[10], uid->data[11], uid->data[12],
	uid->data[13], uid->data[14], uid->data[15]
	);
}

//
// uid_swap
//

void uid_swap(UID *uid) {
	uid->time_low = bswap32(uid->time_low);
	uid->time_mid = bswap16(uid->time_mid);
	uid->time_ver = bswap16(uid->time_ver);
	uid->clock = bswap16(uid->clock);
}

//
// uid_nil
//

int uid_nil(UID *uid) {
#if __SIZE_WIDTH__ == 64
	if (uid->u64[0]) return 0;
	if (uid->u64[1]) return 0;
#else
	if (uid->u32[0]) return 0;
	if (uid->u32[1]) return 0;
	if (uid->u32[2]) return 0;
	if (uid->u32[3]) return 0;
#endif
	return 1;
}

//
// uid_cmp
//

int uid_cmp(UID *uid1, UID *uid2) {
	assert(0);
	return 0;
}