Exemplo n.º 1
0
static int ioctl2AttrDelete(pfs_cache_t *clink, void *arg)
{
    pfs_aentry_t *aentry;

    if ((aentry = getAentry(clink, arg, NULL, PFS_AENTRY_MODE_DELETE)) == NULL)
        return -ENOENT;
    clink->flags |= PFS_CACHE_FLAG_DIRTY;
    return 0;
}
Exemplo n.º 2
0
int ioctl2AttrDelete(pfs_cache_t *clink, void *arg)
{
	pfs_aentry_t *aentry;

	if((aentry=getAentry(clink, arg, 0, 2))==NULL)
		return -ENOENT;
	clink->flags|=CACHE_FLAG_DIRTY;
	return 0;
}
Exemplo n.º 3
0
static int ioctl2AttrLookUp(pfs_cache_t *clink, char *key, char *value)
{
    pfs_aentry_t *aentry;

    if ((aentry = getAentry(clink, key, NULL, PFS_AENTRY_MODE_LOOKUP)) != NULL) {
        memcpy(value, &aentry->str[aentry->kLen], aentry->vLen);
        value[aentry->vLen] = 0;
        return aentry->vLen;
    }
    return -ENOENT;
}
Exemplo n.º 4
0
int ioctl2AttrLoopUp(pfs_cache_t *clink, char *key, char *value)
{
	pfs_aentry_t *aentry;

	if((aentry=getAentry(clink, key, 0, 0))){
		memcpy(value, &aentry->str[aentry->kLen], aentry->vLen);
		value[aentry->vLen]=0;
		return aentry->vLen;
	}
	return -ENOENT;
}
Exemplo n.º 5
0
static int ioctl2AttrAdd(pfs_cache_t *clink, pfs_ioctl2attr_t *attr)
{
    u32 kLen, vLen;
    pfs_aentry_t *aentry;
    u32 tmp;

    // input check
    kLen = strlen(attr->key);
    vLen = strlen(attr->value);
    if (kLen >= PFS_AENTRY_KEY_MAX || vLen >= PFS_AENTRY_VALUE_MAX) // max size bounds check
        return -EINVAL;

    if (kLen == 0 || vLen == 0) // no input check
        return -EINVAL;

    if (getAentry(clink, attr->key, NULL, PFS_AENTRY_MODE_LOOKUP))
        return -EEXIST;
    if ((aentry = getAentry(clink, attr->key, attr->value, PFS_AENTRY_MODE_ADD)) == NULL)
        return -ENOSPC;

    if (aentry->kLen == 0)
        tmp = aentry->aLen;
    else
        tmp = aentry->aLen - ((aentry->kLen + (aentry->vLen + 7)) & 0x3FC); //The only case that uses 0x3FC within the whole PFS driver.

    aentry->aLen -= tmp;
    aentry = (pfs_aentry_t *)((u8 *)aentry + aentry->aLen);
    aentry->kLen = kLen;
    aentry->vLen = vLen;
    aentry->aLen = tmp;
    memcpy(&aentry->str[0], attr->key, aentry->kLen);
    memcpy(&aentry->str[aentry->kLen], attr->value, aentry->vLen);
    clink->flags |= PFS_CACHE_FLAG_DIRTY;

    return 0;
}
Exemplo n.º 6
0
int ioctl2AttrAdd(pfs_cache_t *clink, pfs_ioctl2attr_t *attr)
{
	u32 kLen, vLen;
	pfs_aentry_t *aentry;
	u32 tmp;

	// input check
	kLen=strlen(attr->key);
	vLen=strlen(attr->value);
	if(kLen>=256 || vLen>=256)	// max size safe e check
		return -EINVAL;

	if(kLen==0 || vLen==0)		// no input check
		return -EINVAL;

	if(getAentry(clink, attr->key, NULL, 0))
		return -EEXIST;
	if(!(aentry=getAentry(clink, attr->key, attr->value, 1)))
		return -ENOSPC;

	if(aentry->kLen==0)
		tmp=aentry->aLen;
	else
		tmp=aentry->aLen-((aentry->kLen+(aentry->vLen + 7)) & ~3);

	aentry->aLen-=tmp;
	(char *)aentry+=aentry->aLen;
	aentry->kLen=kLen;
	aentry->vLen=vLen;
	aentry->aLen=tmp;
	memcpy(&aentry->str[0], attr->key, aentry->kLen);
	memcpy(&aentry->str[aentry->kLen], attr->value, aentry->vLen);
	clink->flags|=CACHE_FLAG_DIRTY;

	return 0;
}