int nval_set(char *xb, int xb_size, const YCHAR * name, const char *buf, int bsize, int flags) { int pos; int namelen = strnlen(name, xb_size); int reclen; int size_exist = 0; int space; int start; pos = nval_find(xb, xb_size, name, &size_exist); if (flags & XATTR_CREATE && pos >= 0) return -EEXIST; if (flags & XATTR_REPLACE && pos < 0) return -ENODATA; start = nval_used(xb, xb_size); space = xb_size - start + size_exist; reclen = (sizeof(int) + namelen + 1 + bsize); if (reclen > space) return -ENOSPC; if (pos >= 0) { nval_del(xb, xb_size, name); start = nval_used(xb, xb_size); } pos = start; memcpy(xb + pos, &reclen, sizeof(int)); pos += sizeof(int); strncpy((YCHAR *) (xb + pos), name, reclen); pos += (namelen + 1); memcpy(xb + pos, buf, bsize); return 0; }
int nval_hasvalues(const char *xb, int xb_size) { return nval_used(xb, xb_size) > 0; }