#include <stdio.h>
#include <stdlib.h>
#include "media.h"
static long media_kind = 0;
long
allocate_media_kind(void)
{
media_kind++;
return media_kind;
}
MEDIA
new_media(long size)
{
return (MEDIA) malloc(size);
}
void
delete_media(MEDIA m)
{
if (m == 0) {
return;
}
free(m);
}
unsigned long
media_granularity(MEDIA m)
{
if (m == 0) {
return 0;
} else {
return m->grain;
}
}
long long
media_total_size(MEDIA m)
{
if (m == 0) {
return 0;
} else {
return m->size_in_bytes;
}
}
long
read_media(MEDIA m, long long offset, unsigned long count, void *address)
{
long result;
if (m != 0 && m->do_read != 0) {
result = (*m->do_read)(m, offset, count, address);
return result;
} else {
return 0;
}
}
long
write_media(MEDIA m, long long offset, unsigned long count, void *address)
{
long result;
if (m != 0 && m->do_write != 0) {
result = (*m->do_write)(m, offset, count, address);
return result;
} else {
return 0;
}
}
void
close_media(MEDIA m)
{
if (m == 0) {
return;
}
if (m->kind != 0) {
if (m->do_close != 0) {
(*m->do_close)(m);
}
m->kind = 0;
delete_media(m);
}
}
void
os_reload_media(MEDIA m)
{
if (m != 0 && m->do_os_reload != 0) {
(*m->do_os_reload)(m);
}
}
#if !defined(__linux__) && !defined(__unix__)
#pragma mark -
#endif
MEDIA_ITERATOR
new_media_iterator(long size)
{
return (MEDIA_ITERATOR) malloc(size);
}
void
private_delete_media_iterator(MEDIA_ITERATOR m)
{
if (m == 0) {
return;
}
free(m);
}
void
reset_media_iterator(MEDIA_ITERATOR m)
{
if (m != 0 && m->do_reset != 0) {
(*m->do_reset)(m);
}
}
char *
step_media_iterator(MEDIA_ITERATOR m)
{
char *result;
if (m != 0 && m->do_step != 0) {
result = (*m->do_step)(m);
} else {
result = 0;
}
return result;
}
void
delete_media_iterator(MEDIA_ITERATOR m)
{
if (m == 0) {
return;
}
if (m->kind != 0) {
if (m->do_delete != 0) {
(*m->do_delete)(m);
}
m->kind = 0;
private_delete_media_iterator(m);
}
}