find: cater for libc w/o FNM_CASEFOLD
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
7948ecb505
commit
b24ef035bd
@ -330,7 +330,11 @@
|
|||||||
#include <fnmatch.h>
|
#include <fnmatch.h>
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#if ENABLE_FEATURE_FIND_REGEX
|
#if ENABLE_FEATURE_FIND_REGEX
|
||||||
#include "xregex.h"
|
# include "xregex.h"
|
||||||
|
#endif
|
||||||
|
/* GNUism: */
|
||||||
|
#ifndef FNM_CASEFOLD
|
||||||
|
# define FNM_CASEFOLD 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This is a NOEXEC applet. Be very careful! */
|
/* This is a NOEXEC applet. Be very careful! */
|
||||||
@ -474,6 +478,22 @@ static int exec_actions(action ***appp, const char *fileName, const struct stat
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if !FNM_CASEFOLD
|
||||||
|
static char *strcpy_upcase(char *dst, const char *src)
|
||||||
|
{
|
||||||
|
char *d = dst;
|
||||||
|
while (1) {
|
||||||
|
unsigned char ch = *src++;
|
||||||
|
if (ch >= 'a' && ch <= 'z')
|
||||||
|
ch -= ('a' - 'A');
|
||||||
|
*d++ = ch;
|
||||||
|
if (ch == '\0')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ACTF(name)
|
ACTF(name)
|
||||||
{
|
{
|
||||||
const char *tmp = bb_basename(fileName);
|
const char *tmp = bb_basename(fileName);
|
||||||
@ -489,13 +509,25 @@ ACTF(name)
|
|||||||
* but somewhere between 4.1.20 and 4.4.0 GNU find stopped using it.
|
* but somewhere between 4.1.20 and 4.4.0 GNU find stopped using it.
|
||||||
* find -name '*foo' should match .foo too:
|
* find -name '*foo' should match .foo too:
|
||||||
*/
|
*/
|
||||||
|
#if FNM_CASEFOLD
|
||||||
return fnmatch(ap->pattern, tmp, (ap->iname ? FNM_CASEFOLD : 0)) == 0;
|
return fnmatch(ap->pattern, tmp, (ap->iname ? FNM_CASEFOLD : 0)) == 0;
|
||||||
|
#else
|
||||||
|
if (ap->iname)
|
||||||
|
tmp = strcpy_upcase(alloca(strlen(tmp) + 1), tmp);
|
||||||
|
return fnmatch(ap->pattern, tmp, 0) == 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_FEATURE_FIND_PATH
|
#if ENABLE_FEATURE_FIND_PATH
|
||||||
ACTF(path)
|
ACTF(path)
|
||||||
{
|
{
|
||||||
|
# if FNM_CASEFOLD
|
||||||
return fnmatch(ap->pattern, fileName, (ap->ipath ? FNM_CASEFOLD : 0)) == 0;
|
return fnmatch(ap->pattern, fileName, (ap->ipath ? FNM_CASEFOLD : 0)) == 0;
|
||||||
|
# else
|
||||||
|
if (ap->ipath)
|
||||||
|
fileName = strcpy_upcase(alloca(strlen(fileName) + 1), fileName);
|
||||||
|
return fnmatch(ap->pattern, fileName, 0) == 0;
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if ENABLE_FEATURE_FIND_REGEX
|
#if ENABLE_FEATURE_FIND_REGEX
|
||||||
|
@ -13,7 +13,6 @@ INSERT
|
|||||||
lib-y += appletlib.o
|
lib-y += appletlib.o
|
||||||
lib-y += ask_confirmation.o
|
lib-y += ask_confirmation.o
|
||||||
lib-y += bb_askpass.o
|
lib-y += bb_askpass.o
|
||||||
lib-y += bb_basename.o
|
|
||||||
lib-y += bb_bswap_64.o
|
lib-y += bb_bswap_64.o
|
||||||
lib-y += bb_do_delay.o
|
lib-y += bb_do_delay.o
|
||||||
lib-y += bb_pwd.o
|
lib-y += bb_pwd.o
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
/* vi: set sw=4 ts=4: */
|
|
||||||
/*
|
|
||||||
* Utility routines.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Denys Vlasenko
|
|
||||||
*
|
|
||||||
* Licensed under GPLv2, see file LICENSE in this source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "libbb.h"
|
|
||||||
|
|
||||||
const char* FAST_FUNC bb_basename(const char *name)
|
|
||||||
{
|
|
||||||
const char *cp = strrchr(name, '/');
|
|
||||||
if (cp)
|
|
||||||
return cp + 1;
|
|
||||||
return name;
|
|
||||||
}
|
|
@ -6,8 +6,16 @@
|
|||||||
*
|
*
|
||||||
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
|
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
|
const char* FAST_FUNC bb_basename(const char *name)
|
||||||
|
{
|
||||||
|
const char *cp = strrchr(name, '/');
|
||||||
|
if (cp)
|
||||||
|
return cp + 1;
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "/" -> "/"
|
* "/" -> "/"
|
||||||
* "abc" -> "abc"
|
* "abc" -> "abc"
|
||||||
|
Loading…
Reference in New Issue
Block a user