Exemplo n.º 1
0
static unsigned int readdirectory(struct service_backend *backend, struct service_state *state, void *buffer, unsigned int count, unsigned int offset, unsigned int current, struct cpio_header *header)
{

    struct record record;
    struct cpio_header *eheader;
    char *name;

    if (!current)
        return 0;

    eheader = mapheader(backend, state, current);

    if (!eheader)
        return 0;

    name = mapname(backend, state, eheader, current);

    if (!name)
        return 0;

    record.id = current;
    record.size = cpio_filesize(eheader);
    record.length = memory_read(record.name, RECORD_NAMESIZE, name, eheader->namesize - 1, header->namesize);

    return memory_read(buffer, count, &record, sizeof (struct record), offset);

}
Exemplo n.º 2
0
static unsigned int readdirectory(struct service_backend *backend, void *buffer, unsigned int count, unsigned int current, struct cpio_header *header)
{

    struct record *record = buffer;
    struct cpio_header eheader;
    unsigned char name[1024];

    if (!current)
        return 0;

    if (!readheader(backend, &eheader, current))
        return 0;

    if (!readname(backend, &eheader, current, name, 1024))
        return 0;

    record->id = current;
    record->size = cpio_filesize(&eheader);
    record->length = memory_read(record->name, RECORD_NAMESIZE, name, eheader.namesize - 1, header->namesize);

    switch (eheader.mode & 0xF000)
    {

    case 0x4000:
        record->length += memory_write(record->name, RECORD_NAMESIZE, "/", 1, record->length);

        break;

    }

    return sizeof (struct record);

}
Exemplo n.º 3
0
static unsigned int writefile(struct service_backend *backend, struct service_state *state, void *buffer, unsigned int count, unsigned int offset, unsigned int id, struct cpio_header *header)
{

    unsigned int s = cpio_filesize(header) - offset;
    unsigned int o = id + cpio_filedata(header) + offset;

    return backend->write(state, buffer, (count > s) ? s : count, o);

}
Exemplo n.º 4
0
static unsigned int readfile(struct service_backend *backend, void *buffer, unsigned int count, unsigned int offset, unsigned int id, struct cpio_header *header)
{

    unsigned int s = cpio_filesize(header) - offset;
    unsigned int o = cpio_filedata(header, id) + offset;

    return backend->read(buffer, (count > s) ? s : count, o);

}
Exemplo n.º 5
0
static unsigned int protocol_map(struct service_backend *backend, struct service_state *state, unsigned int id)
{

    struct cpio_header *header = mapheader(backend, state, id);

    if (!header)
        return 0;

    return backend->map(state, id + cpio_filedata(header), cpio_filesize(header));

}
Exemplo n.º 6
0
static unsigned long protocol_map(struct service_backend *backend, struct service_state *state)
{

    struct cpio_header header;

    if (!readheader(backend, &header, state->id))
        return 0;

    return backend->map(cpio_filedata(&header, state->id), cpio_filesize(&header));

}