#include "types.h"
#include "common.h"

int isNilAtom(ErlNifEnv *env, ERL_NIF_TERM term) {
	if(!enif_is_atom(env, term)) {
		return 0;
	}

	char atom[4] = {0};

	if(!enif_get_atom(env, term, atom, sizeof(atom), ERL_NIF_LATIN1)) {
		return 0;
	}

	return strcmp(atom, "nil") == 0;
}

unsigned char *createNullTermMbString(const ErlNifBinary binary) {
	unsigned char *pt = malloc(binary.size + 1);

	if(pt == NULL) {
		return NULL;
	}

	pt[binary.size] = '\0';

	memcpy(pt, binary.data, binary.size);

	return pt;
}

ErlNifBinary convertWcharToMbBinary(const wchar_t *wstr) {
	size_t mb_byte = wcstombs(NULL, wstr, wcslen(wstr));

	ErlNifBinary ret;

	if(!enif_alloc_binary(mb_byte, &ret)) {
		ret.data = NULL;

		ret.size = 0;

		return ret;
	}

	if((size_t)-1 == wcstombs((char*)ret.data, wstr, mb_byte)) {
		ret.data = NULL;

		ret.size = 0;
	}

	return ret;
}
