*/
+#include "busybox.h"
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <limits.h>
-#include "busybox.h"
-
-#include "../shell/cmdedit.h"
+#include "cmdedit.h"
#ifdef CONFIG_LOCALE_SUPPORT
#define CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR
#endif
-#ifdef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR
-#include "pwd_.h"
-#endif /* advanced FEATURES */
-
-
/* Maximum length of the linked list for the command line history */
#ifndef CONFIG_FEATURE_COMMAND_HISTORY
#define MAX_HISTORY 15
printf("\033[7m%c\033[0m", c);
} else
#endif
- putchar(c);
+ if (initial_settings.c_lflag & ECHO) putchar(c);
if (++cmdedit_x >= cmdedit_termw) {
/* terminal is scrolled down */
cmdedit_y++;
}
-static inline void out1str(const char *s)
+static void out1str(const char *s)
{
if ( s )
fputs(s, stdout);
}
-static inline void beep(void)
+static void beep(void)
{
putchar('\007');
}
if (num < 4)
while (num-- > 0)
putchar('\b');
-
else
printf("\033[%dD", num);
} else {
int prmt_len = 0;
size_t cur_prmt_len = 0;
char flg_not_length = '[';
- char *prmt_mem_ptr = xcalloc(1, 1);
+ char *prmt_mem_ptr = xzalloc(1);
char *pwd_buf = xgetcwd(0);
char buf2[PATH_MAX + 1];
char buf[2];
case 'h':
pbuf = hostname_buf;
if (pbuf == 0) {
- pbuf = xcalloc(256, 1);
+ pbuf = xzalloc(256);
if (gethostname(pbuf, 255) < 0) {
strcpy(pbuf, "?");
} else {
pbuf = buf2;
*pbuf = '~';
strcpy(pbuf+1, pwd_buf+l);
- }
+ }
break;
#endif
case 'W':
my_euid = geteuid();
entry = getpwuid(my_euid);
if (entry) {
- user_buf = bb_xstrdup(entry->pw_name);
- home_pwd_buf = bb_xstrdup(entry->pw_dir);
+ user_buf = xstrdup(entry->pw_name);
+ home_pwd_buf = xstrdup(entry->pw_dir);
}
#endif
while ((entry = getpwent()) != NULL) {
/* Null usernames should result in all users as possible completions. */
if ( /*!userlen || */ !strncmp(ud, entry->pw_name, userlen)) {
- add_match(bb_xasprintf("~%s", entry->pw_name), '/');
+ add_match(xasprintf("~%s", entry->pw_name), '/');
}
}
*p = xmalloc(npth * sizeof(char *));
tmp = pth;
- (*p)[0] = bb_xstrdup(tmp);
+ (*p)[0] = xstrdup(tmp);
npth = 1; /* count words is + 1 count ':' */
for (;;) {
s[l++] = *found++;
}
if(add)
- s[l++] = (char)add;
+ s[l++] = (char)add;
s[l] = 0;
return s;
}
for (row = 0; row < nrows; row++) {
l = strlen(matches[row]);
if(add_char_to_match[row])
- l++;
+ l++;
if (column_width < l)
column_width = l;
}
printf("%s%s", matches[n], str_add_chr);
l = strlen(matches[n]);
while(l < acol) {
- putchar(' ');
- l++;
+ putchar(' ');
+ l++;
}
}
str_add_chr[0] = add_char_to_match[n];
int i, j, n, srt;
/* bubble */
n = num_matches;
- for(i=0; i<(n-1); i++)
- for(j=i+1; j<n; j++)
- if(matches[i]!=NULL && matches[j]!=NULL) {
- srt = strcmp(matches[i], matches[j]);
- if(srt == 0) {
- free(matches[j]);
- matches[j]=0;
- } else if(srt > 0) {
- tmp1 = matches[i];
- matches[i] = matches[j];
- matches[j] = tmp1;
- srt = add_char_to_match[i];
- add_char_to_match[i] = add_char_to_match[j];
- add_char_to_match[j] = srt;
- }
+ for(i=0; i<(n-1); i++) {
+ for(j=i+1; j<n; j++) {
+ if(matches[i]!=NULL && matches[j]!=NULL) {
+ srt = strcmp(matches[i], matches[j]);
+ if(srt == 0) {
+ free(matches[j]);
+ matches[j]=0;
+ } else if(srt > 0) {
+ tmp1 = matches[i];
+ matches[i] = matches[j];
+ matches[j] = tmp1;
+ srt = add_char_to_match[i];
+ add_char_to_match[i] = add_char_to_match[j];
+ add_char_to_match[j] = srt;
+ }
+ }
}
+ }
j = n;
n = 0;
for(i=0; i<j; i++)
- if(matches[i]) {
- matches[n]=matches[i];
- add_char_to_match[n]=add_char_to_match[i];
- n++;
- }
+ if(matches[i]) {
+ matches[n]=matches[i];
+ add_char_to_match[n]=add_char_to_match[i];
+ n++;
+ }
num_matches = n;
}
/* Did we find exactly one match? */
if (!matches)
return; /* not found */
/* find minimal match */
- tmp1 = bb_xstrdup(matches[0]);
+ tmp1 = xstrdup(matches[0]);
for (tmp = tmp1; *tmp; tmp++)
for (len_found = 1; len_found < num_matches; len_found++)
if (matches[len_found][(tmp - tmp1)] != *tmp) {
{
if(command_ps[0] != 0 || history[cur_history] == 0) {
free(history[cur_history]);
- history[cur_history] = bb_xstrdup(command_ps);
+ history[cur_history] = xstrdup(command_ps);
}
cur_history--;
}
if (( fp = fopen ( fromfile, "r" ))) {
for ( hi = 0; hi < MAX_HISTORY; ) {
- char * hl = bb_get_chomped_line_from_file(fp);
+ char * hl = xmalloc_getline(fp);
int l;
if(!hl)
/* fall through */
case 'd'|vbit:
{
- int nc, sc;
- sc = cursor;
- prevc = ic;
- if (safe_read(0, &c, 1) < 1)
- goto prepare_to_die;
- if (c == (prevc & 0xff)) {
- /* "cc", "dd" */
- input_backward(cursor);
- goto clear_to_eol;
- break;
- }
- switch(c) {
- case 'w':
- case 'W':
- case 'e':
- case 'E':
- switch (c) {
- case 'w': /* "dw", "cw" */
- vi_word_motion(command, vi_cmdmode);
- break;
- case 'W': /* 'dW', 'cW' */
- vi_Word_motion(command, vi_cmdmode);
- break;
- case 'e': /* 'de', 'ce' */
- vi_end_motion(command);
- input_forward();
- break;
- case 'E': /* 'dE', 'cE' */
- vi_End_motion(command);
- input_forward();
- break;
- }
- nc = cursor;
- input_backward(cursor - sc);
- while (nc-- > cursor)
- input_delete(1);
- break;
- case 'b': /* "db", "cb" */
- case 'B': /* implemented as B */
- if (c == 'b')
- vi_back_motion(command);
- else
- vi_Back_motion(command);
- while (sc-- > cursor)
- input_delete(1);
- break;
- case ' ': /* "d ", "c " */
- input_delete(1);
- break;
- case '$': /* "d$", "c$" */
- clear_to_eol:
- while (cursor < len)
- input_delete(1);
- break;
- }
+ int nc, sc;
+ sc = cursor;
+ prevc = ic;
+ if (safe_read(0, &c, 1) < 1)
+ goto prepare_to_die;
+ if (c == (prevc & 0xff)) {
+ /* "cc", "dd" */
+ input_backward(cursor);
+ goto clear_to_eol;
+ break;
+ }
+ switch(c) {
+ case 'w':
+ case 'W':
+ case 'e':
+ case 'E':
+ switch (c) {
+ case 'w': /* "dw", "cw" */
+ vi_word_motion(command, vi_cmdmode);
+ break;
+ case 'W': /* 'dW', 'cW' */
+ vi_Word_motion(command, vi_cmdmode);
+ break;
+ case 'e': /* 'de', 'ce' */
+ vi_end_motion(command);
+ input_forward();
+ break;
+ case 'E': /* 'dE', 'cE' */
+ vi_End_motion(command);
+ input_forward();
+ break;
+ }
+ nc = cursor;
+ input_backward(cursor - sc);
+ while (nc-- > cursor)
+ input_delete(1);
+ break;
+ case 'b': /* "db", "cb" */
+ case 'B': /* implemented as B */
+ if (c == 'b')
+ vi_back_motion(command);
+ else
+ vi_Back_motion(command);
+ while (sc-- > cursor)
+ input_delete(1);
+ break;
+ case ' ': /* "d ", "c " */
+ input_delete(1);
+ break;
+ case '$': /* "d$", "c$" */
+ clear_to_eol:
+ while (cursor < len)
+ input_delete(1);
+ break;
+ }
}
break;
case 'p'|vbit:
for(i = 0; i < (MAX_HISTORY-1); i++)
history[i] = history[i+1];
}
- history[i++] = bb_xstrdup(command);
+ history[i++] = xstrdup(command);
cur_history = i;
n_history = i;
#if defined(CONFIG_FEATURE_SH_FANCY_PROMPT)
#ifdef TEST
-const char *bb_applet_name = "debug stuff usage";
+const char *applet_name = "debug stuff usage";
#ifdef CONFIG_FEATURE_NONPRINTABLE_INVERSE_PUT
#include <locale.h>