mirror of
https://github.com/zoriya/ash.git
synced 2026-06-02 10:45:07 +00:00
parser and globbing working nicely
This commit is contained in:
+2
-1
@@ -8,6 +8,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "shell.h"
|
||||
#include <wordexp.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -16,7 +17,7 @@ typedef struct parser_map {
|
||||
int (*parser)(char *, char **, env_t *);
|
||||
} parser_map;
|
||||
|
||||
char **parse_input(char *cmd, env_t *env);
|
||||
char **parse_input(char *cmd, env_t *env, wordexp_t *parser);
|
||||
void free_array(char **array);
|
||||
|
||||
int parse_quotes(char *ptr, char **data, env_t *env);
|
||||
|
||||
+3
-5
@@ -16,7 +16,6 @@
|
||||
#include "parser.h"
|
||||
#include "builtin.h"
|
||||
#include <malloc.h>
|
||||
#include <wordexp.h>
|
||||
|
||||
const parser_map parsers[] = {
|
||||
{'\'', &parse_quotes},
|
||||
@@ -98,16 +97,15 @@ int parser_loop(char *cmd, char **buffer, char **ptr, void **pack)
|
||||
return (0);
|
||||
}
|
||||
|
||||
char **parse_input(char *cmd, env_t *e)
|
||||
char **parse_input(char *cmd, env_t *e, wordexp_t *parser)
|
||||
{
|
||||
wordexp_t truc;
|
||||
int ret;
|
||||
|
||||
cmd = process_vars(cmd, e);
|
||||
ret = wordexp(cmd, &truc, WRDE_SHOWERR);
|
||||
ret = wordexp(cmd, parser, WRDE_SHOWERR);
|
||||
if (ret) {
|
||||
perror("Wordexp");
|
||||
return (NULL);
|
||||
}
|
||||
return (truc.we_wordv);
|
||||
return (parser->we_wordv);
|
||||
}
|
||||
+4
-9
@@ -34,16 +34,10 @@ const builtin builtins[] = {
|
||||
|
||||
int prompt_run(char *cmd, redirection *inout[2], env_t *env)
|
||||
{
|
||||
//char **argv = globbing(get_argv(cmd));
|
||||
char **argv;
|
||||
// if (!argv)
|
||||
// return (0);
|
||||
//free(cmd);
|
||||
// cmd = fusion(argv[0], argv);
|
||||
//free(argv);
|
||||
//if (!cmd)
|
||||
// return (-1);
|
||||
argv = parse_input(cmd, env);
|
||||
wordexp_t parser;
|
||||
|
||||
argv = parse_input(cmd, env, &parser);
|
||||
if (!argv)
|
||||
return (0);
|
||||
if (**argv == '!' && argv[0][1] && argv[0][1] != ' ')
|
||||
@@ -53,6 +47,7 @@ int prompt_run(char *cmd, redirection *inout[2], env_t *env)
|
||||
return (run_builtin(&builtins[i], argv, inout, env));
|
||||
run_cmd(argv, inout, env);
|
||||
free_array(argv);
|
||||
// wordfree(&parser);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user