bb_get_[chomped]line_from_file wasn't descriptive enough.
[oweals/busybox.git] / shell / cmdedit.c
index d0e6422502ab23c98f0d293e013ee9cd7d970960..3f44ea0135cd7d3db8e842e9b6e9d55b1d7e83fe 100644 (file)
@@ -31,6 +31,7 @@
  */
 
 
+#include "busybox.h"
 #include <stdio.h>
 #include <errno.h>
 #include <unistd.h>
@@ -41,9 +42,7 @@
 #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
@@ -217,7 +211,7 @@ static void cmdedit_set_out_char(int next_char)
                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++;
@@ -248,13 +242,13 @@ static void goto_new_line(void)
 }
 
 
-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');
 }
@@ -272,7 +266,6 @@ static void input_backward(int num)
                if (num < 4)
                        while (num-- > 0)
                                putchar('\b');
-
                else
                        printf("\033[%dD", num);
        } else {
@@ -312,7 +305,7 @@ static void parse_prompt(const char *prmt_ptr)
        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];
@@ -345,7 +338,7 @@ static void parse_prompt(const char *prmt_ptr)
                          case 'h':
                                pbuf = hostname_buf;
                                if (pbuf == 0) {
-                                       pbuf = xcalloc(256, 1);
+                                       pbuf = xzalloc(256);
                                        if (gethostname(pbuf, 255) < 0) {
                                                strcpy(pbuf, "?");
                                        } else {
@@ -371,7 +364,7 @@ static void parse_prompt(const char *prmt_ptr)
                                        pbuf = buf2;
                                        *pbuf = '~';
                                        strcpy(pbuf+1, pwd_buf+l);
-                                       }
+                               }
                                break;
 #endif
                          case 'W':
@@ -547,8 +540,8 @@ static void cmdedit_init(void)
                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
 
@@ -635,7 +628,7 @@ static void username_tab_completion(char *ud, char *with_shash_flg)
                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), '/');
                        }
                }
 
@@ -685,7 +678,7 @@ static int path_parse(char ***p, int flags)
        *p = xmalloc(npth * sizeof(char *));
 
        tmp = pth;
-       (*p)[0] = bb_xstrdup(tmp);
+       (*p)[0] = xstrdup(tmp);
        npth = 1;                       /* count words is + 1 count ':' */
 
        for (;;) {
@@ -713,7 +706,7 @@ static char *add_quote_for_spec_chars(char *found, int add)
                s[l++] = *found++;
        }
        if(add)
-           s[l++] = (char)add;
+               s[l++] = (char)add;
        s[l] = 0;
        return s;
 }
@@ -996,7 +989,7 @@ static void showfiles(void)
        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;
        }
@@ -1022,8 +1015,8 @@ static void showfiles(void)
                        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];
@@ -1082,30 +1075,32 @@ static void input_tab(int *lastWasTab)
                        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? */
@@ -1115,7 +1110,7 @@ static void input_tab(int *lastWasTab)
                        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) {
@@ -1176,7 +1171,7 @@ static void get_previous_history(void)
 {
        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--;
 }
@@ -1210,7 +1205,7 @@ void load_history ( const char *fromfile )
        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)
@@ -1624,61 +1619,61 @@ prepare_to_die:
                        /* 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:
@@ -1857,7 +1852,7 @@ rewrite_line:
                        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)
@@ -1892,7 +1887,7 @@ rewrite_line:
 
 #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>