From e9f12002c135f8ab0b1ce176a8c0add030cd8822 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 29 Jul 2007 16:18:02 +0000 Subject: [PATCH] Simpler and more portable code (cannot avoid TOCTOU anyway) --- src/cp.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/cp.c b/src/cp.c index c0c44ca..9f984c1 100644 --- a/src/cp.c +++ b/src/cp.c @@ -180,23 +180,7 @@ static int _single_recurse(Prefs * prefs, char const * src, char const * dst) } sdst = p; sprintf(sdst, "%s/%s", dst, de->d_name); -#ifdef DT_DIR - if(de->d_type == DT_DIR) - ret |= _single_recurse(&prefs2, ssrc, sdst); - else if(de->d_type == DT_LNK && (*prefs & PREFS_P)) -#else - if(lstat(ssrc, &st) != 0) /* XXX TOCTOU */ - { - ret |= _cp_error(ssrc, 1); - continue; - } - if(S_ISDIR(st.st_mode)) - ret |= _single_recurse(&prefs2, ssrc, sdst); - else if(S_ISLNK(st.st_mode) && (*prefs & PREFS_P)) -#endif - ret |= _single_symlink(ssrc, sdst); /* XXX incomplete */ - else - ret |= _cp_single(&prefs2, ssrc, sdst); + ret |= _cp_single(&prefs2, ssrc, sdst); } closedir(dir); free(ssrc);