Exemple #1
0
static int memfs_seek(struct fnode *fno, int off, int whence)
{
    struct memfs_fnode *mfno;
    int new_off;
    mfno = FNO_MOD_PRIV(fno, &mod_memfs);
    if (!mfno)
        return -1;
    switch(whence) {
        case SEEK_CUR:
            new_off = fno->off + off;
            break;
        case SEEK_SET:
            new_off = off;
            break;
        case SEEK_END:
            new_off = fno->size + off;
            break;
        default:
            return -1;
    }

    if (new_off < 0)
        new_off = 0;

    if (new_off > fno->size) {
        mfno->content = krealloc(mfno->content, new_off);
        memset(mfno->content + fno->size, 0, new_off - fno->size);
        fno->size = new_off;
    }
    fno->off = new_off;
    return 0;
}
static int sysfs_close(struct fnode *fno)
{
    struct sysfs_fnode *mfno;
    mfno = FNO_MOD_PRIV(fno, &mod_sysfs);
    if (!mfno)
        return -1;
    fno->off = 0;
    return 0;
}
static int sysfs_write(struct fnode *fno, const void *buf, unsigned int len)
{
    struct sysfs_fnode *mfno;
    if (len <= 0)
        return len;

    mfno = FNO_MOD_PRIV(fno, &mod_sysfs);
    if (mfno)
        return -1;

    if (mfno->do_write) {
        return mfno->do_write(mfno, buf, len);
    }
    return -1;

}
static int sysfs_read(struct fnode *fno, void *buf, unsigned int len)
{
    struct sysfs_fnode *mfno;
    if (len <= 0)
        return len;

    mfno = FNO_MOD_PRIV(fno, &mod_sysfs);
    if (!mfno)
        return -1;

    if (mfno->do_read) {
        return mfno->do_read(mfno, buf, len);
    }
    return -1;

}
Exemple #5
0
static int memfs_read(struct fnode *fno, void *buf, unsigned int len)
{
    struct memfs_fnode *mfno;
    if (len <= 0)
        return len;

    mfno = FNO_MOD_PRIV(fno, &mod_memfs);
    if (!mfno)
        return -1;

    if (fno->size <= (fno->off))
        return -1;

    if (len > (fno->size - fno->off))
        len = fno->size - fno->off;

    memcpy(buf, mfno->content + fno->off, len);
    fno->off += len;
    return len;
}
Exemple #6
0
static int memfs_write(struct fnode *fno, const void *buf, unsigned int len)
{
    struct memfs_fnode *mfno;
    if (len <= 0)
        return len;

    mfno = FNO_MOD_PRIV(fno, &mod_memfs);
    if (!mfno)
        return -1;

    if (fno->size < (fno->off + len)) {
        mfno->content = krealloc(mfno->content, fno->off + len);
    }
    if (!mfno->content)
        return -1;
    memcpy(mfno->content + fno->off, buf, len);
    fno->off += len;
    if (fno->size < fno->off)
        fno->size = fno->off;
    return len;
}