EMILE/libcontainer/container_open.c

50 lines
946 B
C
Raw Normal View History

2005-12-01 22:14:27 +00:00
/*
*
* (c) 2005 Laurent Vivier <LaurentVivier@wanadoo.fr>
*
*/
2005-12-02 00:49:11 +00:00
#include <stdio.h>
2005-12-01 22:14:27 +00:00
#include <stdlib.h>
#include "libcontainer.h"
container_FILE *container_open(device_io_t *device, char *path)
{
container_FILE *file;
int block_size = device->get_blocksize(device->data);
unsigned long first, nbblocs;
int ret;
first = strtol(path, &path, 0);
if (*path != ',')
return NULL;
path++;
nbblocs = strtol(path, &path, 0);
if (*path != 0)
return NULL;
file = (container_FILE *)malloc(sizeof(container_FILE) + block_size);
if (file == NULL)
return NULL;
2005-12-02 00:49:11 +00:00
file->container = (struct emile_container*)malloc(block_size * nbblocs);
2005-12-01 22:14:27 +00:00
if (file->container == NULL)
{
free(file);
return NULL;
}
ret = device->read_sector(device->data, first, file->container, block_size * nbblocs);
if (ret == -1)
{
free(file->container);
free(file);
}
file->offset = 0;
2005-12-02 00:49:11 +00:00
file->device = device;
2005-12-01 22:14:27 +00:00
file->current_block = 0;
return file;
}