mirror of
https://github.com/Fennix-Project/Userspace.git
synced 2025-05-25 22:14:28 +00:00
Implement fseek
This commit is contained in:
parent
d0ec077c09
commit
f48511c6ff
@ -3,6 +3,7 @@
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
@ -29,7 +30,7 @@ extern "C"
|
||||
FILE *fopen(const char *filename, const char *mode);
|
||||
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||
int fseek(FILE *stream, long offset, int whence);
|
||||
off_t fseek(FILE *stream, long offset, int whence);
|
||||
long ftell(FILE *stream);
|
||||
int fclose(FILE *fp);
|
||||
int fflush(FILE *stream);
|
||||
|
@ -4,7 +4,7 @@
|
||||
typedef unsigned int _dev_t;
|
||||
typedef unsigned short _ino_t;
|
||||
typedef unsigned short _mode_t;
|
||||
typedef int _off_t;
|
||||
typedef long _off_t;
|
||||
|
||||
#define dev_t _dev_t
|
||||
#define ino_t _ino_t
|
||||
|
@ -35,22 +35,13 @@ int fclose(FILE *fp)
|
||||
return syscall1(_FileClose, (uint64_t)KP);
|
||||
}
|
||||
|
||||
int fseek(FILE *stream, long offset, int whence)
|
||||
off_t fseek(FILE *stream, long offset, int whence)
|
||||
{
|
||||
switch (whence)
|
||||
{
|
||||
case SEEK_SET:
|
||||
stream->offset = offset;
|
||||
break;
|
||||
case SEEK_CUR:
|
||||
break;
|
||||
case SEEK_END:
|
||||
// stream->offset = syscall1(_FileLength, (uint64_t)File->KernelPrivate) + offset;
|
||||
break;
|
||||
default:
|
||||
off_t new_offset = syscall3(_FileSeek, stream->KernelPrivate, offset, whence);
|
||||
if (IsSyscallError(new_offset))
|
||||
return -1;
|
||||
}
|
||||
return stream->offset;
|
||||
stream->offset = new_offset;
|
||||
return new_offset;
|
||||
}
|
||||
|
||||
long ftell(FILE *stream)
|
||||
|
Loading…
x
Reference in New Issue
Block a user