Add new func

This commit is contained in:
2025-05-14 13:06:51 +08:00
parent 12d9d1a339
commit d8dba2f70e
2 changed files with 24 additions and 0 deletions

View File

@@ -65,6 +65,23 @@ size_t cmemfile_read(CMemFile* f, size_t buf_len, char* buf) {
return le; return le;
} }
int memfile_seek(MemFile* f, int64_t offset, int origin) {
if (!f) return 1;
int64_t npos = 0;
if (origin == SEEK_SET) {
npos = offset;
} else if (origin == SEEK_CUR) {
npos = f->loc + offset;
} else if (origin == SEEK_END) {
npos = f->len + offset;
} else {
return 1;
}
if (npos < 0 || npos > f->len) return 1;
f->loc = npos;
return 0;
}
int cmemfile_seek(CMemFile* f, int64_t offset, int origin) { int cmemfile_seek(CMemFile* f, int64_t offset, int origin) {
if (!f) return 1; if (!f) return 1;
int64_t npos = 0; int64_t npos = 0;
@@ -87,6 +104,11 @@ int64_t cmemfile_tell(CMemFile* f) {
return f->loc; return f->loc;
} }
int64_t memfile_tell(MemFile* f) {
if (!f) return -1;
return f->loc;
}
#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) #define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) #define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d))
#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') #define AVERROR_EOF FFERRTAG( 'E','O','F',' ')

View File

@@ -34,7 +34,9 @@ void free_memfile(MemFile* f);
void free_cmemfile(CMemFile* f); void free_cmemfile(CMemFile* f);
size_t memfile_read(MemFile* f, char* buf, size_t buf_len); size_t memfile_read(MemFile* f, char* buf, size_t buf_len);
size_t cmemfile_read(CMemFile* f, size_t buf_len, char* buf); size_t cmemfile_read(CMemFile* f, size_t buf_len, char* buf);
int memfile_seek(MemFile* f, int64_t offset, int origin);
int cmemfile_seek(CMemFile* f, int64_t offset, int origin); int cmemfile_seek(CMemFile* f, int64_t offset, int origin);
int64_t memfile_tell(MemFile* f);
int64_t cmemfile_tell(CMemFile* f); int64_t cmemfile_tell(CMemFile* f);
int memfile_readpacket(void* f, uint8_t* buf, int buf_size); int memfile_readpacket(void* f, uint8_t* buf, int buf_size);
size_t cmemfile_read2(void* f, size_t buf_len, char* buf); size_t cmemfile_read2(void* f, size_t buf_len, char* buf);