Recognizes the first command entered

This commit is contained in:
Pierre Pronchery 2007-09-09 16:12:28 +00:00
parent dceb83a246
commit 510b3517ec

View File

@ -32,16 +32,19 @@ typedef int Prefs;
/* find */ /* find */
static int _find_error(char const * message, int ret); static int _find_error(char const * message, int ret);
static int _find_do(Prefs * prefs, char const * pathname); static int _find_do(Prefs * prefs, int filec, char * filev[], int cmdc,
char * cmdv[]);
static int _find(Prefs * prefs, int argc, char * argv[]) static int _find(Prefs * prefs, int argc, char * argv[])
{ {
int ret = 0;
int i; int i;
int filec;
for(i = 0; i < argc; i++) for(i = 0; i < argc; i++)
ret |= _find_do(prefs, argv[i]); if(argv[i][0] == '-' || argv[i][0] == '!' || argv[i][0] == '(')
return ret; break;
filec = i;
return _find_do(prefs, filec, argv, argc - filec, &argv[filec]);
} }
static int _find_error(char const * message, int ret) static int _find_error(char const * message, int ret)
@ -54,16 +57,23 @@ static int _find_error(char const * message, int ret)
/* find_do */ /* find_do */
static int _do_dir(Prefs * prefs, char const * pathname); static int _do_dir(Prefs * prefs, char const * pathname);
static int _find_do(Prefs * prefs, char const * pathname) static int _find_do(Prefs * prefs, int filec, char * filev[], int cmdc,
char * cmdv[])
{ {
int ret = 0;
int i;
struct stat st; struct stat st;
if(lstat(pathname, &st) != 0) /* XXX TOCTOU */ for(i = 0; i < filec; i++)
return _find_error(pathname, 1); {
if(lstat(filev[i], &st) != 0) /* XXX TOCTOU */
ret |= _find_error(filev[i], 1);
if(S_ISDIR(st.st_mode)) if(S_ISDIR(st.st_mode))
return _do_dir(prefs, pathname); ret |= _do_dir(prefs, filev[i]);
printf("%s\n", pathname); else
return 0; printf("%s\n", filev[i]);
}
return ret;
} }
static int _do_dir(Prefs * prefs, char const * pathname) static int _do_dir(Prefs * prefs, char const * pathname)
@ -93,7 +103,7 @@ static int _do_dir(Prefs * prefs, char const * pathname)
break; break;
path = p; path = p;
strcpy(&path[len - 1], de->d_name); strcpy(&path[len - 1], de->d_name);
ret |= _find_do(prefs, path); ret |= _find_do(prefs, 1, &path, 0, NULL);
} }
free(path); free(path);
if(de != NULL) if(de != NULL)