fixed xargs
This commit is contained in:
parent
7462b0978c
commit
497aaec9fe
1 changed files with 11 additions and 11 deletions
22
src/xargs.c
22
src/xargs.c
|
@ -14,7 +14,7 @@
|
|||
#define ARG_MAX 10000
|
||||
#endif
|
||||
|
||||
static int args_main;
|
||||
static int args;
|
||||
static int args_added;
|
||||
static char *cmd[ARG_MAX + 1];
|
||||
|
||||
|
@ -41,14 +41,14 @@ enum {
|
|||
};
|
||||
|
||||
static void clear_cmd(void) {
|
||||
for (int i = 0; i < args_main; i++) {
|
||||
for (int i = 0; i < args; i++) {
|
||||
if (cmd[i] != NULL) {
|
||||
free(cmd[i]);
|
||||
cmd[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
args_main = 0;
|
||||
args = 0;
|
||||
args_added = 0;
|
||||
}
|
||||
|
||||
|
@ -57,7 +57,7 @@ static int add_arg(const char *str, size_t chars, const char flag) {
|
|||
args_added++;
|
||||
|
||||
int ret = NORMAL;
|
||||
if (args_main >= ARG_MAX)
|
||||
if (args >= ARG_MAX)
|
||||
return ERROR;
|
||||
|
||||
else if (n_flag > 0 && args_added == n_flag && I_flag == NULL)
|
||||
|
@ -67,7 +67,7 @@ static int add_arg(const char *str, size_t chars, const char flag) {
|
|||
ret = STOP;
|
||||
|
||||
if (!flag && I_flag) {
|
||||
for (int i = 0; i < args_main; i++)
|
||||
for (int i = 0; i < args; i++)
|
||||
if (strstr(cmd[i], I_flag)) {
|
||||
char *ptr = NULL;
|
||||
CONTINUE:
|
||||
|
@ -86,8 +86,8 @@ CONTINUE:
|
|||
return STOP;
|
||||
}
|
||||
|
||||
cmd[args_main] = strdup(str);
|
||||
args_main++;
|
||||
cmd[args] = strdup(str);
|
||||
args++;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -200,7 +200,7 @@ static int xargs(void) {
|
|||
|
||||
static int spawn(void) {
|
||||
if (t_flag) {
|
||||
for (int i = 0; i < args_main; i++)
|
||||
for (int i = 0; i < args; i++)
|
||||
fprintf(stderr, "%s ", cmd[i]);
|
||||
|
||||
fputc('\n', stderr);
|
||||
|
@ -306,7 +306,7 @@ int main(int argc, char **argv) {
|
|||
ret = 1;
|
||||
|
||||
/* Check NULL */
|
||||
for (int i = 0; i < args_main; i++) {
|
||||
for (int i = 0; i < args; i++) {
|
||||
if (cmd[i] == NULL) {
|
||||
fprintf(stderr, "xargs: strdup failed\n");
|
||||
clear_cmd();
|
||||
|
@ -317,10 +317,10 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
|
||||
/* Run */
|
||||
if (stdin_stat == NORMAL)
|
||||
if (stdin_stat == NORMAL || stdin_stat == CEOF)
|
||||
ret = spawn();
|
||||
|
||||
else if (stdin_stat == R_FLAG && !r_flag)
|
||||
else if (stdin_stat == R_FLAG && !r_flag && I_flag == NULL)
|
||||
ret = spawn();
|
||||
|
||||
clear_cmd();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue