Rev 3346 | Rev 3377 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3346 | Rev 3366 | ||
|---|---|---|---|
| Line 40... | Line 40... | ||
| 40 | #include "cmds/cmds.h" |
40 | #include "cmds/cmds.h" |
| 41 | 41 | ||
| 42 | /* See scli.h */ |
42 | /* See scli.h */ |
| 43 | static cliuser_t usr; |
43 | static cliuser_t usr; |
| 44 | 44 | ||
| 45 | /* Modified by the 'quit' module, which is compiled before this */ |
- | |
| 46 | extern unsigned int cli_quit; |
- | |
| 47 | - | ||
| 48 | /* Globals that are modified during start-up that modules/builtins should |
45 | /* Globals that are modified during start-up that modules/builtins |
| 49 | * be aware of. */ |
46 | * should be aware of. */ |
| - | 47 | volatile unsigned int cli_quit = 0; |
|
| 50 | volatile unsigned int cli_interactive = 1; |
48 | volatile unsigned int cli_interactive = 1; |
| 51 | volatile unsigned int cli_verbocity = 1; |
49 | volatile unsigned int cli_verbocity = 1; |
| 52 | 50 | ||
| 53 | /* The official name of this program |
51 | /* The official name of this program |
| 54 | * (change to your liking in configure.ac and re-run autoconf) */ |
52 | * (change to your liking in configure.ac and re-run autoconf) */ |
| 55 | const char *progname = PACKAGE_NAME; |
53 | const char *progname = PACKAGE_NAME; |
| 56 | 54 | ||
| - | 55 | /* These are not exposed, even to builtins */ |
|
| - | 56 | static int cli_init(cliuser_t *usr); |
|
| - | 57 | static void cli_finit(cliuser_t *usr); |
|
| - | 58 | ||
| 57 | /* (re)allocates memory to store the current working directory, gets |
59 | /* (re)allocates memory to store the current working directory, gets |
| 58 | * and updates the current working directory, formats the prompt string */ |
60 | * and updates the current working directory, formats the prompt |
| - | 61 | * string */ |
|
| 59 | unsigned int cli_set_prompt(cliuser_t *usr) |
62 | unsigned int cli_set_prompt(cliuser_t *usr) |
| 60 | { |
63 | { |
| 61 | usr->prompt = (char *) realloc(usr->prompt, PATH_MAX); |
64 | usr->prompt = (char *) realloc(usr->prompt, PATH_MAX); |
| 62 | if (NULL == usr->prompt) { |
65 | if (NULL == usr->prompt) { |
| 63 | cli_error(CL_ENOMEM, "Can not allocate prompt"); |
66 | cli_error(CL_ENOMEM, "Can not allocate prompt"); |
| Line 75... | Line 78... | ||
| 75 | usr->cwd = getcwd(usr->cwd, PATH_MAX - 1); |
78 | usr->cwd = getcwd(usr->cwd, PATH_MAX - 1); |
| 76 | 79 | ||
| 77 | if (NULL == usr->cwd) |
80 | if (NULL == usr->cwd) |
| 78 | snprintf(usr->cwd, PATH_MAX, "(unknown)"); |
81 | snprintf(usr->cwd, PATH_MAX, "(unknown)"); |
| 79 | 82 | ||
| 80 | snprintf(usr->prompt, |
83 | if (1 < cli_psprintf(&usr->prompt, "%s # ", usr->cwd)) { |
| 81 | PATH_MAX, |
84 | cli_error(cli_errno, "Failed to set prompt"); |
| 82 | "%s # ", |
85 | return 1; |
| 83 | usr->cwd); |
86 | } |
| 84 | 87 | ||
| 85 | return 0; |
88 | return 0; |
| 86 | } |
89 | } |
| 87 | 90 | ||
| - | 91 | /* Constructor */ |
|
| 88 | int cli_init(cliuser_t *usr) |
92 | static int cli_init(cliuser_t *usr) |
| 89 | { |
93 | { |
| 90 | usr->line = (char *) NULL; |
94 | usr->line = (char *) NULL; |
| 91 | usr->name = "root"; |
95 | usr->name = "root"; |
| 92 | usr->home = "/"; |
96 | usr->home = "/"; |
| 93 | usr->cwd = (char *) NULL; |
97 | usr->cwd = (char *) NULL; |
| Line 96... | Line 100... | ||
| 96 | usr->lasterr = 0; |
100 | usr->lasterr = 0; |
| 97 | return (int) cli_set_prompt(usr); |
101 | return (int) cli_set_prompt(usr); |
| 98 | } |
102 | } |
| 99 | 103 | ||
| 100 | /* Destructor */ |
104 | /* Destructor */ |
| 101 | void cli_finit(cliuser_t *usr) |
105 | static void cli_finit(cliuser_t *usr) |
| 102 | { |
106 | { |
| 103 | if (NULL != usr->line) |
107 | if (NULL != usr->line) |
| 104 | free(usr->line); |
108 | free(usr->line); |
| 105 | if (NULL != usr->prompt) |
109 | if (NULL != usr->prompt) |
| 106 | free(usr->prompt); |
110 | free(usr->prompt); |