Fix compilation warnings in recvcmd.c
[apps/madmutt.git] / enter.c
diff --git a/enter.c b/enter.c
index 1f5d6c3..b310ea1 100644 (file)
--- a/enter.c
+++ b/enter.c
 # include "config.h"
 #endif
 
+#include <lib-lib/mem.h>
+
 #include "mutt.h"
+#include "enter.h"
 #include "mutt_menu.h"
 #include "mutt_curses.h"
 #include "keymap.h"
 #include "history.h"
+#include "buffy.h"
 
-#include "lib/mem.h"
 
 #include <string.h>
 
@@ -77,14 +80,14 @@ static size_t width_ceiling (const wchar_t * s, size_t n, int w1)
   return s - s0;
 }
 
-static void my_wcstombs (char *dest, size_t dlen, const wchar_t * src,
+static void my_wcstombs (char *dest, ssize_t dlen, const wchar_t * src,
                          size_t slen)
 {
   mbstate_t st;
   size_t k;
 
   /* First convert directly into the destination buffer */
-  memset (&st, 0, sizeof (st));
+  p_clear(&st, 1);
   for (; slen && dlen >= MB_LEN_MAX; dest += k, dlen -= k, src++, slen--)
     if ((k = wcrtomb (dest, *src, &st)) == (size_t) (-1))
       break;
@@ -117,7 +120,7 @@ static void my_wcstombs (char *dest, size_t dlen, const wchar_t * src,
   }
 }
 
-size_t my_mbstowcs (wchar_t ** pwbuf, size_t * pwbuflen, size_t i, char *buf)
+size_t my_mbstowcs (wchar_t ** pwbuf, size_t * pwbuflen, size_t i, const char *buf)
 {
   wchar_t wc;
   mbstate_t st;
@@ -126,12 +129,12 @@ size_t my_mbstowcs (wchar_t ** pwbuf, size_t * pwbuflen, size_t i, char *buf)
   size_t wbuflen;
 
   wbuf = *pwbuf, wbuflen = *pwbuflen;
-  memset (&st, 0, sizeof (st));
+  p_clear(&st, 1);
   for (; (k = mbrtowc (&wc, buf, MB_LEN_MAX, &st)) &&
        k != (size_t) (-1) && k != (size_t) (-2); buf += k) {
     if (i >= wbuflen) {
       wbuflen = i + 20;
-      safe_realloc (&wbuf, wbuflen * sizeof (*wbuf));
+      p_realloc(&wbuf, wbuflen);
     }
     wbuf[i++] = wc;
   }
@@ -143,28 +146,28 @@ size_t my_mbstowcs (wchar_t ** pwbuf, size_t * pwbuflen, size_t i, char *buf)
  * Replace part of the wchar_t buffer, from FROM to CURPOS, by BUF.
  */
 
-static void replace_part (ENTER_STATE * state, size_t from, char *buf)
+static void replace_part (ENTER_STATE *state, size_t from, const char *buf)
 {
   /* Save the suffix */
   size_t savelen = state->lastchar - state->curpos;
-  wchar_t *savebuf = safe_calloc (savelen, sizeof (wchar_t));
+  wchar_t *savebuf = p_new(wchar_t, savelen);
 
   memcpy (savebuf, state->wbuf + state->curpos, savelen * sizeof (wchar_t));
 
   /* Convert to wide characters */
-  state->curpos = my_mbstowcs (&state->wbuf, &state->wbuflen, from, buf);
+  state->curpos = my_mbstowcs(&state->wbuf, &state->wbuflen, from, buf);
 
   /* Make space for suffix */
   if (state->curpos + savelen > state->wbuflen) {
     state->wbuflen = state->curpos + savelen;
-    safe_realloc (&state->wbuf, state->wbuflen * sizeof (wchar_t));
+    p_realloc(&state->wbuf, state->wbuflen);
   }
 
   /* Restore suffix */
   memcpy (state->wbuf + state->curpos, savebuf, savelen * sizeof (wchar_t));
   state->lastchar = state->curpos + savelen;
 
-  FREE (&savebuf);
+  p_delete(&savebuf);
 }
 
 /*
@@ -202,7 +205,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
 
   int rv = 0;
 
-  memset (&mbstate, 0, sizeof (mbstate));
+  p_clear(&mbstate, 1);
 
   if (state->wbuf) {
     /* Coming back after return 1 */
@@ -267,19 +270,19 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
 
     if (ch != OP_NULL) {
       first = 0;
-      if (ch != OP_EDITOR_COMPLETE)
+      if (ch != OP_EDITOR_COMPLETE && ch != OP_EDITOR_COMPLETE_QUERY)
         state->tabs = 0;
       redraw = M_REDRAW_LINE;
       switch (ch) {
       case OP_EDITOR_HISTORY_UP:
         state->curpos = state->lastchar;
-        replace_part (state, 0, mutt_history_prev (hclass));
+        replace_part(state, 0, mutt_history_prev(hclass));
         redraw = M_REDRAW_INIT;
         break;
 
       case OP_EDITOR_HISTORY_DOWN:
         state->curpos = state->lastchar;
-        replace_part (state, 0, mutt_history_next (hclass));
+        replace_part(state, 0, mutt_history_next(hclass));
         redraw = M_REDRAW_INIT;
         break;
 
@@ -439,7 +442,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
         if (flags & M_EFILE) {
           first = 1;            /* clear input if user types a real key later */
           my_wcstombs (buf, buflen, state->wbuf, state->curpos);
-          mutt_buffy (buf, buflen);
+          buffy_next (buf, buflen);
           state->curpos = state->lastchar =
             my_mbstowcs (&state->wbuf, &state->wbuflen, 0, buf);
           break;
@@ -449,6 +452,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
         /* fall through to completion routine (M_FILE) */
 
       case OP_EDITOR_COMPLETE:
+      case OP_EDITOR_COMPLETE_QUERY:
         state->tabs++;
         if (flags & M_CMD) {
           for (i = state->curpos; i && state->wbuf[i - 1] != ' '; i--);
@@ -466,14 +470,14 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
           }
           if (!mutt_complete (buf, buflen)) {
             templen = state->lastchar - i;
-            safe_realloc (&tempbuf, templen * sizeof (wchar_t));
+            p_realloc(&tempbuf, templen);
           }
           else
             BEEP ();
 
           replace_part (state, i, buf);
         }
-        else if (flags & M_ALIAS) {
+        else if (flags & M_ALIAS && ch == OP_EDITOR_COMPLETE) {
           /* invoke the alias-menu to get more addresses */
           for (i = state->curpos; i && state->wbuf[i - 1] != ',' &&
                state->wbuf[i - 1] != ':'; i--);
@@ -486,10 +490,20 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
             goto bye;
           }
           break;
-        }
-        else if (flags & M_COMMAND) {
+        } else if (flags & M_ALIAS && ch == OP_EDITOR_COMPLETE_QUERY) {
+          /* invoke the query-menu to get more addresses */
+          if ((i = state->curpos)) {
+            for (; i && state->wbuf[i - 1] != ','; i--);
+            for (; i < state->curpos && state->wbuf[i] == ' '; i++);
+          }
+          my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i);
+          mutt_query_complete (buf, buflen);
+          replace_part (state, i, buf);
+          rv = 1;
+          goto bye;
+        } else if (flags & M_COMMAND) {
           my_wcstombs (buf, buflen, state->wbuf, state->curpos);
-          i = safe_strlen (buf);
+          i = m_strlen(buf);
           if (i && buf[i - 1] == '=' &&
               mutt_var_value_complete (buf, buflen, i))
             state->tabs = 0;
@@ -524,7 +538,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
 
           if (!mutt_complete (buf, buflen)) {
             templen = state->lastchar;
-            safe_realloc (&tempbuf, templen * sizeof (wchar_t));
+            p_realloc(&tempbuf, templen);
             memcpy (tempbuf, state->wbuf, templen * sizeof (wchar_t));
           }
           else
@@ -535,24 +549,6 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
           goto self_insert;
         break;
 
-      case OP_EDITOR_COMPLETE_QUERY:
-        if (flags & M_ALIAS) {
-          /* invoke the query-menu to get more addresses */
-          if ((i = state->curpos)) {
-            for (; i && state->wbuf[i - 1] != ','; i--);
-            for (; i < state->curpos && state->wbuf[i] == ' '; i++);
-          }
-
-          my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i);
-          mutt_query_complete (buf, buflen);
-          replace_part (state, i, buf);
-
-          rv = 1;
-          goto bye;
-        }
-        else
-          goto self_insert;
-
       case OP_EDITOR_QUOTE_CHAR:
         {
           event_t event;
@@ -620,7 +616,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
         if (k == (size_t) (-2))
           continue;
         else if (k && k != 1) {
-          memset (&mbstate, 0, sizeof (mbstate));
+          p_clear(&mbstate, 1);
           continue;
         }
       }
@@ -641,9 +637,9 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
           char **tfiles;
 
           *numfiles = 1;
-          tfiles = safe_calloc (*numfiles, sizeof (char *));
+          tfiles = p_new(char *, *numfiles);
           mutt_expand_path (buf, buflen);
-          tfiles[0] = safe_strdup (buf);
+          tfiles[0] = m_strdup(buf);
           *files = tfiles;
         }
         rv = 0;
@@ -652,7 +648,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
       else if (wc && (wc < ' ' || IsWPrint (wc))) {     /* why? */
         if (state->lastchar >= state->wbuflen) {
           state->wbuflen = state->lastchar + 20;
-          safe_realloc (&state->wbuf, state->wbuflen * sizeof (wchar_t));
+          p_realloc(&state->wbuf, state->wbuflen);
         }
         memmove (state->wbuf + state->curpos + 1, state->wbuf + state->curpos,
                  (state->lastchar - state->curpos) * sizeof (wchar_t));
@@ -668,7 +664,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
 
 bye:
 
-  FREE (&tempbuf);
+  p_delete(&tempbuf);
   return rv;
 }
 
@@ -677,8 +673,8 @@ void mutt_free_enter_state (ENTER_STATE ** esp)
   if (!esp)
     return;
 
-  FREE (&(*esp)->wbuf);
-  FREE (esp);
+  p_delete(&(*esp)->wbuf);
+  p_delete(esp);
 }
 
 /*