X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Frecursive_action.c;h=6672db17fe9966b424bc720c1e7c3c1be0df1ee9;hb=6fc92a506ab3c490a4dc028334c908f19c0d0806;hp=6b93340becedbb8be1849ce854bfb1dff7b4ade4;hpb=aad1a88c76f208d188fd061e3723bd637437e8d5;p=oweals%2Fbusybox.git diff --git a/libbb/recursive_action.c b/libbb/recursive_action.c index 6b93340be..6672db17f 100644 --- a/libbb/recursive_action.c +++ b/libbb/recursive_action.c @@ -26,15 +26,12 @@ */ #include +#include #include #include +#include /* free() */ #include "libbb.h" -/* same conditions as recursive_action */ -#define bb_need_name_too_long -#define BB_DECLARE_EXTERN -#include "../messages.c" - #undef DEBUG_RECURS_ACTION @@ -111,25 +108,18 @@ int recursive_action(const char *fileName, } status = TRUE; while ((next = readdir(dir)) != NULL) { - char nextFile[PATH_MAX]; + char *nextFile; if ((strcmp(next->d_name, "..") == 0) || (strcmp(next->d_name, ".") == 0)) { continue; } - if (strlen(fileName) + strlen(next->d_name) + 1 > PATH_MAX) { - error_msg(name_too_long); - return FALSE; - } - memset(nextFile, 0, sizeof(nextFile)); - if (fileName[strlen(fileName)-1] == '/') - sprintf(nextFile, "%s%s", fileName, next->d_name); - else - sprintf(nextFile, "%s/%s", fileName, next->d_name); + nextFile = concat_path_file(fileName, next->d_name); if (recursive_action(nextFile, TRUE, followLinks, depthFirst, fileAction, dirAction, userData) == FALSE) { status = FALSE; } + free(nextFile); } closedir(dir); if (dirAction != NULL && depthFirst == TRUE) {