simplified io-file.c with a macro

This commit is contained in:
hyunghwan.chung 2019-11-02 01:51:44 +00:00
parent b2d7f4bb58
commit ef75871a93

View File

@ -132,10 +132,22 @@ oops:
} \ } \
while(0) while(0)
#define SETRET_WITH_SYSCALL(moo, nargs, n) \
do { \
int x_ = (n); \
if (x_ <= -1) \
{ \
moo_seterrwithsyserr (moo, 0, errno); \
return MOO_PF_FAILURE; \
} \
MOO_STACK_SETRET (moo, nargs, MOO_SMOOI_TO_OOP(x_)); \
} \
while(0)
static moo_pfrc_t pf_chmod_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs) static moo_pfrc_t pf_chmod_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
{ {
moo_oop_t tmp; moo_oop_t tmp;
int fd, n; int fd;
moo_oow_t mode; moo_oow_t mode;
RCV_TO_FD (moo, nargs, fd); RCV_TO_FD (moo, nargs, fd);
@ -149,21 +161,15 @@ static moo_pfrc_t pf_chmod_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
return MOO_PF_FAILURE; return MOO_PF_FAILURE;
} }
n = fchmod(fd, mode); SETRET_WITH_SYSCALL (moo, nargs, fchmod(fd, mode));
if (n <= -1)
{
moo_seterrwithsyserr (moo, 0, errno);
return MOO_PF_FAILURE;
}
MOO_STACK_SETRET (moo, nargs, MOO_SMOOI_TO_OOP(n));
return MOO_PF_SUCCESS; return MOO_PF_SUCCESS;
} }
static moo_pfrc_t pf_chown_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs) static moo_pfrc_t pf_chown_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
{ {
moo_oop_t tmp; moo_oop_t tmp;
int fd, n; int fd;
moo_ooi_t uid, gid; moo_ooi_t uid, gid;
RCV_TO_FD (moo, nargs, fd); RCV_TO_FD (moo, nargs, fd);
@ -188,21 +194,14 @@ static moo_pfrc_t pf_chown_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
if (uid <= -1) uid = (uid_t)-1; if (uid <= -1) uid = (uid_t)-1;
if (gid <= -1) gid = (gid_t)-1; if (gid <= -1) gid = (gid_t)-1;
n = fchown(fd, uid, gid); SETRET_WITH_SYSCALL (moo, nargs, fchown(fd, uid, gid));
if (n <= -1)
{
moo_seterrwithsyserr (moo, 0, errno);
return MOO_PF_FAILURE;
}
MOO_STACK_SETRET (moo, nargs, MOO_SMOOI_TO_OOP(n));
return MOO_PF_SUCCESS; return MOO_PF_SUCCESS;
} }
static moo_pfrc_t pf_lock_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs) static moo_pfrc_t pf_lock_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
{ {
moo_oop_t tmp; moo_oop_t tmp;
int fd, n; int fd;
RCV_TO_FD (moo, nargs, fd); RCV_TO_FD (moo, nargs, fd);
@ -213,18 +212,10 @@ static moo_pfrc_t pf_lock_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
return MOO_PF_FAILURE; return MOO_PF_FAILURE;
} }
n = flock(fd, MOO_OOP_TO_SMOOI(tmp)); SETRET_WITH_SYSCALL (moo, nargs, flock(fd, MOO_OOP_TO_SMOOI(tmp)));
if (n <= -1)
{
moo_seterrwithsyserr (moo, 0, errno);
return MOO_PF_FAILURE;
}
MOO_STACK_SETRET (moo, nargs, MOO_SMOOI_TO_OOP(n));
return MOO_PF_SUCCESS; return MOO_PF_SUCCESS;
} }
static moo_pfrc_t pf_seek_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs) static moo_pfrc_t pf_seek_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
{ {
moo_oop_t tmp; moo_oop_t tmp;
@ -250,7 +241,7 @@ static moo_pfrc_t pf_seek_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
} }
n = lseek(fd, offset, whence); n = lseek(fd, offset, whence);
if (n <= -1) if (n == (off_t)-1)
{ {
moo_seterrwithsyserr (moo, 0, errno); moo_seterrwithsyserr (moo, 0, errno);
return MOO_PF_FAILURE; return MOO_PF_FAILURE;
@ -278,14 +269,7 @@ static moo_pfrc_t pf_truncate_file (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
return MOO_PF_FAILURE; return MOO_PF_FAILURE;
} }
n = ftruncate(fd, size); SETRET_WITH_SYSCALL (moo, nargs, ftruncate(fd, size));
if (n <= -1)
{
moo_seterrwithsyserr (moo, 0, errno);
return MOO_PF_FAILURE;
}
MOO_STACK_SETRET (moo, nargs, MOO_SMOOI_TO_OOP(n));
return MOO_PF_SUCCESS; return MOO_PF_SUCCESS;
} }