Subversion Repositories HelenOS

Rev

Rev 3366 | Rev 3809 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3366 Rev 3372
Line 41... Line 41...
41
#include "errors.h"
41
#include "errors.h"
42
#include "exec.h"
42
#include "exec.h"
43
 
43
 
44
extern volatile unsigned int cli_interactive;
44
extern volatile unsigned int cli_interactive;
45
 
45
 
-
 
46
/* Not exposed in input.h */
-
 
47
static void cli_restricted(char *);
-
 
48
static void read_line(char *, int);
-
 
49
 
46
/* More than a macro than anything */
50
/* More than a macro than anything */
47
void cli_restricted(char *cmd)
51
static void cli_restricted(char *cmd)
48
{
52
{
49
    printf("%s is not available in %s mode\n", cmd,
53
    printf("%s is not available in %s mode\n", cmd,
50
        cli_interactive ? "interactive" : "non-interactive");
54
        cli_interactive ? "interactive" : "non-interactive");
51
 
55
 
52
    return;
56
    return;
Line 79... Line 83...
79
    if (NULL == cmd[0]) {
83
    if (NULL == cmd[0]) {
80
        rc = CL_ENOENT;
84
        rc = CL_ENOENT;
81
        goto finit;
85
        goto finit;
82
    }
86
    }
83
 
87
 
84
    /* Check what kind of command argv[0] might be, TODO: move this to
-
 
85
     * a function */
88
    /* Its a builtin command */
86
    if ((i = (is_builtin(cmd[0]))) > -1) {
89
    if ((i = (is_builtin(cmd[0]))) > -1) {
-
 
90
        /* Its not available in this mode, see what try_exec() thinks */
87
        if (builtin_is_restricted(i)) {
91
        if (builtin_is_restricted(i)) {
88
                rc = try_exec(cmd[0], cmd);
92
                rc = try_exec(cmd[0], cmd);
89
                if (rc)
93
                if (rc)
-
 
94
                    /* No external matching it could be found, tell the
-
 
95
                     * user that the command does exist, but is not
-
 
96
                     * available in this mode. */
90
                    cli_restricted(cmd[0]);
97
                    cli_restricted(cmd[0]);
91
                goto finit;
98
                goto finit;
92
        }
99
        }
-
 
100
        /* Its a builtin, its available, run it */
93
        rc = run_builtin(i, cmd, usr);
101
        rc = run_builtin(i, cmd, usr);
94
        goto finit;
102
        goto finit;
-
 
103
    /* We repeat the same dance for modules */
95
    } else if ((i = (is_module(cmd[0]))) > -1) {
104
    } else if ((i = (is_module(cmd[0]))) > -1) {
96
        if (module_is_restricted(i)) {
105
        if (module_is_restricted(i)) {
97
            rc = try_exec(cmd[0], cmd);
106
            rc = try_exec(cmd[0], cmd);
98
            if (rc)
107
            if (rc)
99
                cli_restricted(cmd[0]);
108
                cli_restricted(cmd[0]);
100
            goto finit;
109
            goto finit;
101
        }
110
        }
102
        rc = run_module(i, cmd);
111
        rc = run_module(i, cmd);
103
        goto finit;
112
        goto finit;
104
    } else {
113
    } else {
-
 
114
        /* Its not a module or builtin, restricted or otherwise.
-
 
115
         * See what try_exec() thinks of it and just pass its return
-
 
116
         * value back to the caller */
105
        rc = try_exec(cmd[0], cmd);
117
        rc = try_exec(cmd[0], cmd);
106
        goto finit;
118
        goto finit;
107
    }
119
    }
108
 
120
 
109
finit:
121
finit:
Line 116... Line 128...
116
 
128
 
117
    return rc;
129
    return rc;
118
}
130
}
119
 
131
 
120
/* Borrowed from Jiri Svoboda's 'cli' uspace app */
132
/* Borrowed from Jiri Svoboda's 'cli' uspace app */
121
void read_line(char *buffer, int n)
133
static void read_line(char *buffer, int n)
122
{
134
{
123
    char c;
135
    char c;
124
    int chars;
136
    int chars;
125
 
137
 
126
    chars = 0;
138
    chars = 0;
Line 142... Line 154...
142
    }
154
    }
143
    putchar('\n');
155
    putchar('\n');
144
    buffer[chars] = '\0';
156
    buffer[chars] = '\0';
145
}
157
}
146
 
158
 
-
 
159
/* TODO:
-
 
160
 * Implement something like editline() / readline(), if even
-
 
161
 * just for command history and making arrows work. */
147
void get_input(cliuser_t *usr)
162
void get_input(cliuser_t *usr)
148
{
163
{
149
    char line[INPUT_MAX];
164
    char line[INPUT_MAX];
150
    size_t len = 0;
165
    size_t len = 0;
151
 
166