perror_msg("%s", fileName);
return FALSE;
}
+ status = TRUE;
while ((next = readdir(dir)) != NULL) {
- char nextFile[BUFSIZ + 1];
+ char nextFile[PATH_MAX];
if ((strcmp(next->d_name, "..") == 0)
- || (strcmp(next->d_name, ".") == 0)) {
+ || (strcmp(next->d_name, ".") == 0)) {
continue;
}
- if (strlen(fileName) + strlen(next->d_name) + 1 > BUFSIZ) {
+ if (strlen(fileName) + strlen(next->d_name) + 1 > PATH_MAX) {
error_msg(name_too_long);
return FALSE;
}
memset(nextFile, 0, sizeof(nextFile));
- sprintf(nextFile, "%s/%s", fileName, next->d_name);
- status =
- recursive_action(nextFile, TRUE, followLinks, depthFirst,
- fileAction, dirAction, userData);
- if (status == FALSE) {
- closedir(dir);
- return FALSE;
+ if (fileName[strlen(fileName)-1] == '/')
+ sprintf(nextFile, "%s%s", fileName, next->d_name);
+ else
+ sprintf(nextFile, "%s/%s", fileName, next->d_name);
+ if (recursive_action(nextFile, TRUE, followLinks, depthFirst,
+ fileAction, dirAction, userData) == FALSE) {
+ status = FALSE;
}
}
- status = closedir(dir);
- if (status < 0) {
- perror_msg("%s", fileName);
- return FALSE;
- }
+ closedir(dir);
if (dirAction != NULL && depthFirst == TRUE) {
- status = dirAction(fileName, &statbuf, userData);
- if (status == FALSE) {
+ if (dirAction(fileName, &statbuf, userData) == FALSE) {
perror_msg("%s", fileName);
return FALSE;
}
}
+ if (status == FALSE)
+ return FALSE;
} else {
if (fileAction == NULL)
return TRUE;
#endif
#ifdef BB_FEATURE_HUMAN_READABLE
-const char *format(unsigned long val, unsigned long hr)
+const char *make_human_readable_str(unsigned long val, unsigned long hr)
{
- static const char strings[] = { '0', 0, 'k', 0, 'M', 0, 'G', 0 };
- static const char fmt[] = "%lu";
- static const char fmt_u[] = "%lu.%lu%s";
-
- static char str[10];
-
- unsigned long frac __attribute__ ((unused)); /* 'may be uninitialized' warning is ok */
- const char *u;
- const char *f;
-
-#if 1
- if(val == 0) { /* This may be omitted to reduce size */
- return strings; /* at the cost of speed. */
- }
-#endif
-
- u = strings;
- f = fmt;
- if (hr) {
- val /= hr;
- } else {
- while ((val >= KILOBYTE) && (*u != 'G')) {
- f = fmt_u;
- u += 2;
- frac = (((val % KILOBYTE) * 10) + (KILOBYTE/2)) / KILOBYTE;
- val /= KILOBYTE;
- if (frac >= 10) { /* We need to round up here. */
- ++val;
- frac = 0;
- }
- }
+ int i=0;
+ static char str[10] = "\0";
+ static const char strings[] = { 'k', 'M', 'G', 'T', 0 };
+ unsigned long divisor = 1;
+
+ if(val == 0)
+ return("0");
+ if(hr)
+ snprintf(str, 9, "%ld", val/hr);
+ else {
+ while(val >= divisor && i <= 4) {
+ divisor=divisor<<10, i++;
+ }
+ divisor=divisor>>10, i--;
+ snprintf(str, 9, "%.1Lf%c", (long double)(val)/divisor, strings[i]);
}
-
- /* If f==fmt then 'frac' and 'u' are ignored and need not be set. */
- snprintf(str, sizeof(str), f, val, frac, u);
-
- return str;
+ return(str);
}
#endif
-#if defined(BB_GREP) || defined(BB_HOSTNAME) || defined(BB_SED) || defined(BB_TAR) || defined(BB_WGET) || defined(BB_XARGS)
+#if defined(BB_GREP) || defined(BB_HOSTNAME) || defined(BB_SED) || defined(BB_TAR) || defined(BB_WGET) || defined(BB_XARGS) || defined(BB_SH)
void chomp(char *s)
{
size_t len = strlen(s);