mescc: Mes C Library: Support GNU Tar: Add readlink, readlink.

* lib/linux/gnu.c (readlink, symlink): New function.
* include/unistd.h (readlink, symlink): Declare.
* include/linux/x86/syscall.h (SYS_readlink, SYS_symlink): New macro.
* include/linux/x86_64/syscall.h (SYS_symlink, SYS_readlink): New
macro.
This commit is contained in:
Jan Nieuwenhuizen 2019-01-03 00:07:19 +01:00
parent f39e1cc250
commit 2b41e3c1a0
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
4 changed files with 24 additions and 1 deletions

View File

@ -83,4 +83,8 @@
// make+POSIX
#define SYS_sigprocmask 0x7e
// tar
#define SYS_symlink 0x53
#define SYS_readlink 0x55
#endif // __MES_LINUX_X86_SYSCALL_H

View File

@ -80,4 +80,8 @@
// make+POSIX
#define SYS_rt_sigprocmask 0x0e
// tar
#define SYS_symlink 0x58
#define SYS_readlink 0x59
#endif // __MES_LINUX_X86_64_SYSCALL_H

View File

@ -74,15 +74,17 @@ int setuid (uid_t newuid);
uid_t geteuid (void);
gid_t getegid (void);
int isatty (int fd);
int link (char const *oldname, char const *newname);
int link (char const *old_name, char const *new_name);
off_t lseek (int fd, off_t offset, int whence);
ssize_t read (int fd, void *buffer, size_t size);
ssize_t readlink (char const *file_name, char *buffer, size_t size);
#if __SBRK_CHAR_PTRDIFF
/* xmalloc in binutils <= 2.10.1 uses this old prototype */
char * sbrk (ptrdiff_t delta);
#else
void * sbrk (intptr_t delta);
#endif
int symlink (char const *old_name, char const *new_name);
int unlink (char const *file_name);
ssize_t write (int filedes, void const *buffer, size_t size);
pid_t getpid (void);

View File

@ -197,3 +197,16 @@ sigprocmask (int how, sigset_t const *set, sigset_t *oldset)
return _sys_call3 (SYS_rt_sigprocmask, (long)how, (long)set, (long)oldset);
#endif
}
// tar
int
symlink (char const *old_name, char const *new_name)
{
return _sys_call2 (SYS_symlink, (long)old_name, (long)new_name);
}
ssize_t
readlink (char const *file_name, char *buffer, size_t size)
{
return _sys_call3 (SYS_readlink, (long)file_name, (long)buffer, (long)size);
}