コード例 #1
0
ファイル: hio.c プロジェクト: visy/turha
int hio_seek(HIO_HANDLE *h, long offset, int whence)
{
	if (HIO_HANDLE_TYPE(h) == HIO_HANDLE_TYPE_FILE) {
		return fseek(h->f, offset, whence);
	} else {
		switch (whence) {
		default:
		case SEEK_SET:
			if (h->size >= 0 && (offset > h->size || offset < 0))
				return -1;
			h->pos = offset;
			return 0;
		case SEEK_CUR:
			if (h->size >= 0 && (offset > CAN_READ(h) || offset < -h->pos))
				return -1;
			h->pos += offset;
			return 0;
		case SEEK_END:
			if (h->size < 0)
				return -1;
			h->pos = h->size + offset;
			return 0;
		}
	}
}
コード例 #2
0
ファイル: memio.c プロジェクト: EQ4/libxmp
int meof(MFILE *m)
{
	if (m->size <= 0)
		return 0;
	else
		return CAN_READ(m) <= 0;
}
コード例 #3
0
ファイル: memio.c プロジェクト: EQ4/libxmp
int mgetc(MFILE *m)
{
	if (CAN_READ(m) >= 1)
		return *(uint8 *)(m->start + m->pos++);
	else
		return EOF;
}
コード例 #4
0
ファイル: hio.c プロジェクト: kacmem/zxtune
uint8 hio_read8(HIO_HANDLE *h)
{
	if (HIO_HANDLE_TYPE(h) == HIO_HANDLE_TYPE_FILE) {
		return read8(h->f);
	} else {
		if (CAN_READ(h) >= 1) 
			return *(uint8 *)(h->start + h->pos++);
		else
			return EOF;
	}
}
コード例 #5
0
ファイル: hio.c プロジェクト: kacmem/zxtune
int hio_eof(HIO_HANDLE *h)
{
	if (HIO_HANDLE_TYPE(h) == HIO_HANDLE_TYPE_FILE) {
		return feof(h->f);
	} else {
		if (h->size <= 0)
			return 0;
		else
			return CAN_READ(h) <= 0;
	}
}
コード例 #6
0
ファイル: hio.c プロジェクト: kacmem/zxtune
uint32 hio_read24b(HIO_HANDLE *h)
{
	if (HIO_HANDLE_TYPE(h) == HIO_HANDLE_TYPE_FILE) {
		return read24b(h->f);
	} else {
		ptrdiff_t can_read = CAN_READ(h);
		if (can_read >= 3) {
			uint32 n = readmem24b(h->start + h->pos);
			h->pos += 3;
			return n;
		} else {
			h->pos += can_read;
			return EOF;
		}
	}
}
コード例 #7
0
ファイル: hio.c プロジェクト: kacmem/zxtune
uint16 hio_read16b(HIO_HANDLE *h)
{
	if (HIO_HANDLE_TYPE(h) == HIO_HANDLE_TYPE_FILE) {
		return read16b(h->f);
	} else {
		ptrdiff_t can_read = CAN_READ(h);
		if (can_read >= 2) {
			uint16 n = readmem16b(h->start + h->pos);
			h->pos += 2;
			return n;
		} else {
			h->pos += can_read;
			return EOF;
		}
	}
}
コード例 #8
0
ファイル: memio.c プロジェクト: EQ4/libxmp
size_t mread(void *buf, size_t size, size_t num, MFILE *m)
{
 	size_t should_read = size * num;
 	ptrdiff_t can_read = CAN_READ(m);

 	if (size <= 0 || num <= 0 || can_read <= 0) {
 		return 0;
	}

	if (should_read > can_read) {
 		should_read = can_read;
	}

	memcpy(buf, m->start + m->pos, should_read);
 	m->pos += should_read;

	return should_read / size;
}
コード例 #9
0
ファイル: hio.c プロジェクト: kacmem/zxtune
size_t hio_read(void *buf, size_t size, size_t num, HIO_HANDLE *h)
{
	if (HIO_HANDLE_TYPE(h) == HIO_HANDLE_TYPE_FILE) {
		return fread(buf, size, num, h->f);
	} else {
 		size_t should_read = size * num;
 		ptrdiff_t can_read = CAN_READ(h);
 		if (can_read <= 0)
 			return 0;

 		if (should_read > can_read) {
 			should_read = can_read;
 		}

 		memcpy(buf, h->start + h->pos, should_read);
 		h->pos += should_read;

		return should_read / size;
	}
}
コード例 #10
0
ファイル: memio.c プロジェクト: EQ4/libxmp
int mseek(MFILE *m, long offset, int whence)
{
	switch (whence) {
	default:
	case SEEK_SET:
		if (m->size >= 0 && (offset > m->size || offset < 0))
			return -1;
		m->pos = offset;
		return 0;
	case SEEK_CUR:
		if (m->size >= 0 && (offset > CAN_READ(m) || offset < -m->pos))
			return -1;
		m->pos += offset;
		return 0;
	case SEEK_END:
		if (m->size < 0)
			return -1;
		m->pos = m->size + offset;
		return 0;
	}
}