#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>

#include <SO.h>
#include <SO_blk.h>

static void	* b_dev = NULL;
static int	b_fd = ERROR;

int SO_blk_mount(char * path)
{
	if (!path)
		return ERROR;

	if ((b_fd = open(path,O_RDWR)) == -1)
		return ERROR;

	if ((b_dev = mmap((caddr_t) 0, SO_BLOCKSIZE * SO_FSSIZE, PROT_READ|PROT_WRITE,MAP_SHARED, b_fd, 0)) == NULL)
		return ERROR;

	return OK;
}

int SO_blk_umount(void)
{
	close(b_fd);

	return OK;
}

int SO_blk_bread(u16 blockNum, void * block)
{
	memcpy(block,((u8 *)b_dev)+(SO_BLOCKSIZE * blockNum),SO_BLOCKSIZE);
	return OK;
}

int SO_blk_bwrite(u16 blockNum, const void * block)
{
	memcpy(((u8 *)b_dev)+(SO_BLOCKSIZE * blockNum),block,SO_BLOCKSIZE);

	return OK;
}

