#include <stddef.h>
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "flags.h"
File_ExtAttr_setflags_t
File_ExtAttr_flags2setflags (struct hv *flags)
{
const size_t CREATE_KEYLEN = strlen(CREATE_KEY);
const size_t REPLACE_KEYLEN = strlen(REPLACE_KEY);
SV **psv_ns;
File_ExtAttr_setflags_t ret = SET_CREATEIFNEEDED;
if (flags && (psv_ns = hv_fetch(flags, CREATE_KEY, CREATE_KEYLEN, 0)))
ret = SvIV(*psv_ns) ? SET_CREATE : SET_CREATEIFNEEDED;
if (flags && (psv_ns = hv_fetch(flags, REPLACE_KEY, REPLACE_KEYLEN, 0)))
ret = SvIV(*psv_ns) ? SET_REPLACE : SET_CREATEIFNEEDED;
return ret;
}
int
File_ExtAttr_valid_default_namespace (struct hv *flags)
{
const size_t NAMESPACE_KEYLEN = strlen(NAMESPACE_KEY);
SV **psv_ns;
int ok = 1;
if (flags && (psv_ns = hv_fetch(flags, NAMESPACE_KEY, NAMESPACE_KEYLEN, 0)))
{
if (SvOK(*psv_ns))
{
char *s;
STRLEN len = 0;
s = SvPV(*psv_ns, len);
if (len)
ok = (memcmp(NAMESPACE_USER, s, len) == 0);
else
ok = 0;
}
}
return ok;
}
ssize_t
File_ExtAttr_default_listxattrns (char *buf, const size_t buflen)
{
ssize_t ret = 0;
if (buflen >= sizeof(NAMESPACE_USER))
{
memcpy(buf, NAMESPACE_USER, sizeof(NAMESPACE_USER));
ret = sizeof(NAMESPACE_USER);
}
else if (buflen == 0)
{
ret = sizeof(NAMESPACE_USER);
}
else
{
ret = -1;
errno = ERANGE;
}
return ret;
}