Code cleanup
This commit is contained in:
parent
d9d0ba0c00
commit
1c0a70ec20
39
src/mv.c
39
src/mv.c
|
@ -88,12 +88,12 @@ static int _single_nod(char const * src, char const * dst, mode_t mode,
|
||||||
dev_t rdev);
|
dev_t rdev);
|
||||||
static int _single_symlink(char const * src, char const * dst);
|
static int _single_symlink(char const * src, char const * dst);
|
||||||
static int _single_regular(char const * src, char const * dst);
|
static int _single_regular(char const * src, char const * dst);
|
||||||
|
static int _single_p(char const * dst, struct stat * st);
|
||||||
|
|
||||||
static int _mv_single(Prefs * prefs, char const * src, char const * dst)
|
static int _mv_single(Prefs * prefs, char const * src, char const * dst)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
struct timeval tv[2];
|
|
||||||
|
|
||||||
if(*prefs & PREFS_i
|
if(*prefs & PREFS_i
|
||||||
&& _mv_confirm(src, dst) != 1)
|
&& _mv_confirm(src, dst) != 1)
|
||||||
|
@ -124,20 +124,7 @@ static int _mv_single(Prefs * prefs, char const * src, char const * dst)
|
||||||
ret = _single_regular(src, dst);
|
ret = _single_regular(src, dst);
|
||||||
if(ret != 0)
|
if(ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
if(lchown(dst, st.st_uid, st.st_gid) != 0) /* XXX TOCTOU */
|
_single_p(dst, &st);
|
||||||
{
|
|
||||||
_mv_error(dst, 0);
|
|
||||||
if(chmod(dst, st.st_mode & ~(S_ISUID | S_ISGID)) != 0)
|
|
||||||
_mv_error(dst, 0);
|
|
||||||
}
|
|
||||||
else if(chmod(dst, st.st_mode) != 0)
|
|
||||||
_mv_error(dst, 0);
|
|
||||||
tv[0].tv_sec = st.st_atime;
|
|
||||||
tv[0].tv_usec = 0;
|
|
||||||
tv[1].tv_sec = st.st_mtime;
|
|
||||||
tv[1].tv_usec = 0;
|
|
||||||
if(utimes(dst, tv) != 0)
|
|
||||||
_mv_error(dst, 0);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,6 +190,28 @@ static int _single_regular(char const * src, char const * dst)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _single_p(char const * dst, struct stat * st)
|
||||||
|
{
|
||||||
|
struct timeval tv[2];
|
||||||
|
|
||||||
|
if(lchown(dst, st->st_uid, st->st_gid) != 0) /* XXX TOCTOU */
|
||||||
|
{
|
||||||
|
_mv_error(dst, 0);
|
||||||
|
if(chmod(dst, st->st_mode & ~(S_ISUID | S_ISGID)) != 0)
|
||||||
|
_mv_error(dst, 0);
|
||||||
|
}
|
||||||
|
else if(chmod(dst, st->st_mode) != 0)
|
||||||
|
_mv_error(dst, 0);
|
||||||
|
tv[0].tv_sec = st->st_atime;
|
||||||
|
tv[0].tv_usec = 0;
|
||||||
|
tv[1].tv_sec = st->st_mtime;
|
||||||
|
tv[1].tv_usec = 0;
|
||||||
|
if(utimes(dst, tv) != 0)
|
||||||
|
_mv_error(dst, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* mv_multiple */
|
/* mv_multiple */
|
||||||
static int _mv_multiple(Prefs * prefs, int filec, char * const filev[])
|
static int _mv_multiple(Prefs * prefs, int filec, char * const filev[])
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user