]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - readline/tilde.c
import of readline-4.3
[thirdparty/binutils-gdb.git] / readline / tilde.c
index 777b6559223798df6b1c1a5073d5f5f495614afa..154f7f8108d075569576990c9ee5c23be93b2950 100644 (file)
 #include "tilde.h"
 
 #if defined (TEST) || defined (STATIC_MALLOC)
-static char *xmalloc (), *xrealloc ();
+static void *xmalloc (), *xrealloc ();
 #else
-#  if defined __STDC__
-extern char *xmalloc (int);
-extern char *xrealloc (void *, int);
-#  else
-extern char *xmalloc (), *xrealloc ();
-#  endif /* !__STDC__ */
+#  include "xmalloc.h"
 #endif /* TEST || STATIC_MALLOC */
 
 #if !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwuid (), *getpwnam ();
+extern struct passwd *getpwuid PARAMS((uid_t));
+extern struct passwd *getpwnam PARAMS((const char *));
 #endif /* !HAVE_GETPW_DECLS */
 
 #if !defined (savestring)
-#  ifndef strcpy
-extern char *strcpy ();
-#  endif
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
+#define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x))
 #endif /* !savestring */
 
 #if !defined (NULL)
@@ -80,49 +73,54 @@ extern char *strcpy ();
 /* If being compiled as part of bash, these will be satisfied from
    variables.o.  If being compiled as part of readline, they will
    be satisfied from shell.o. */
-extern char *get_home_dir __P((void));
-extern char *get_env_value __P((char *));
+extern char *sh_get_home_dir PARAMS((void));
+extern char *sh_get_env_value PARAMS((const char *));
 
 /* The default value of tilde_additional_prefixes.  This is set to
    whitespace preceding a tilde so that simple programs which do not
    perform any word separation get desired behaviour. */
-static char *default_prefixes[] =
-  { " ~", "\t~", (char *)NULL };
+static const char *default_prefixes[] =
+  { " ~", "\t~", (const char *)NULL };
 
 /* The default value of tilde_additional_suffixes.  This is set to
    whitespace or newline so that simple programs which do not
    perform any word separation get desired behaviour. */
-static char *default_suffixes[] =
-  { " ", "\n", (char *)NULL };
+static const char *default_suffixes[] =
+  { " ", "\n", (const char *)NULL };
 
 /* If non-null, this contains the address of a function that the application
    wants called before trying the standard tilde expansions.  The function
    is called with the text sans tilde, and returns a malloc()'ed string
    which is the expansion, or a NULL pointer if the expansion fails. */
-CPFunction *tilde_expansion_preexpansion_hook = (CPFunction *)NULL;
+tilde_hook_func_t *tilde_expansion_preexpansion_hook = (tilde_hook_func_t *)NULL;
 
 /* If non-null, this contains the address of a function to call if the
    standard meaning for expanding a tilde fails.  The function is called
    with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
    which is the expansion, or a NULL pointer if there is no expansion. */
-CPFunction *tilde_expansion_failure_hook = (CPFunction *)NULL;
+tilde_hook_func_t *tilde_expansion_failure_hook = (tilde_hook_func_t *)NULL;
 
 /* When non-null, this is a NULL terminated array of strings which
    are duplicates for a tilde prefix.  Bash uses this to expand
    `=~' and `:~'. */
-char **tilde_additional_prefixes = default_prefixes;
+char **tilde_additional_prefixes = (char **)default_prefixes;
 
 /* When non-null, this is a NULL terminated array of strings which match
    the end of a username, instead of just "/".  Bash sets this to
    `:' and `=~'. */
-char **tilde_additional_suffixes = default_suffixes;
+char **tilde_additional_suffixes = (char **)default_suffixes;
+
+static int tilde_find_prefix PARAMS((const char *, int *));
+static int tilde_find_suffix PARAMS((const char *));
+static char *isolate_tilde_prefix PARAMS((const char *, int *));
+static char *glue_prefix_and_suffix PARAMS((char *, const char *, int));
 
 /* Find the start of a tilde expansion in STRING, and return the index of
    the tilde which starts the expansion.  Place the length of the text
    which identified this tilde starter in LEN, excluding the tilde itself. */
 static int
 tilde_find_prefix (string, len)
-     char *string;
+     const char *string;
      int *len;
 {
   register int i, j, string_len;
@@ -157,7 +155,7 @@ tilde_find_prefix (string, len)
    the character which ends the tilde definition.  */
 static int
 tilde_find_suffix (string)
-     char *string;
+     const char *string;
 {
   register int i, j, string_len;
   register char **suffixes;
@@ -186,16 +184,16 @@ tilde_find_suffix (string)
 /* Return a new string which is the result of tilde expanding STRING. */
 char *
 tilde_expand (string)
-     char *string;
+     const char *string;
 {
   char *result;
   int result_size, result_index;
 
   result_index = result_size = 0;
   if (result = strchr (string, '~'))
-    result = xmalloc (result_size = (strlen (string) + 16));
+    result = (char *)xmalloc (result_size = (strlen (string) + 16));
   else
-    result = xmalloc (result_size = (strlen (string) + 1));
+    result = (char *)xmalloc (result_size = (strlen (string) + 1));
 
   /* Scan through STRING expanding tildes as we come to them. */
   while (1)
@@ -209,7 +207,7 @@ tilde_expand (string)
 
       /* Copy the skipped text into the result. */
       if ((result_index + start + 1) > result_size)
-       result = xrealloc (result, 1 + (result_size += (start + 20)));
+       result = (char *)xrealloc (result, 1 + (result_size += (start + 20)));
 
       strncpy (result + result_index, string, start);
       result_index += start;
@@ -226,7 +224,7 @@ tilde_expand (string)
        break;
 
       /* Expand the entire tilde word, and copy it into RESULT. */
-      tilde_word = xmalloc (1 + end);
+      tilde_word = (char *)xmalloc (1 + end);
       strncpy (tilde_word, string, end);
       tilde_word[end] = '\0';
       string += end;
@@ -235,14 +233,14 @@ tilde_expand (string)
       free (tilde_word);
 
       len = strlen (expansion);
-#ifdef __CYGWIN32__
+#ifdef __CYGWIN__
       /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when
-         $HOME for `user' is /.  On cygwin, // denotes a network drive. */
+        $HOME for `user' is /.  On cygwin, // denotes a network drive. */
       if (len > 1 || *expansion != '/' || *string != '/')
 #endif
        {
          if ((result_index + len + 1) > result_size)
-           result = xrealloc (result, 1 + (result_size += (len + 20)));
+           result = (char *)xrealloc (result, 1 + (result_size += (len + 20)));
 
          strcpy (result + result_index, expansion);
          result_index += len;
@@ -260,13 +258,13 @@ tilde_expand (string)
    the location it points to. */
 static char *
 isolate_tilde_prefix (fname, lenp)
-     char *fname;
+     const char *fname;
      int *lenp;
 {
   char *ret;
   int i;
 
-  ret = xmalloc (strlen (fname));
+  ret = (char *)xmalloc (strlen (fname));
 #if defined (__MSDOS__)
   for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++)
 #else
@@ -283,7 +281,8 @@ isolate_tilde_prefix (fname, lenp)
    SUFFIND. */
 static char *
 glue_prefix_and_suffix (prefix, suffix, suffind)
-     char *prefix, *suffix;
+     char *prefix;
+     const char *suffix;
      int suffind;
 {
   char *ret;
@@ -291,7 +290,7 @@ glue_prefix_and_suffix (prefix, suffix, suffind)
 
   plen = (prefix && *prefix) ? strlen (prefix) : 0;
   slen = strlen (suffix + suffind);
-  ret = xmalloc (plen + slen + 1);
+  ret = (char *)xmalloc (plen + slen + 1);
   if (plen)
     strcpy (ret, prefix);
   strcpy (ret + plen, suffix + suffind);
@@ -303,7 +302,7 @@ glue_prefix_and_suffix (prefix, suffix, suffind)
    This always returns a newly-allocated string, never static storage. */
 char *
 tilde_expand_word (filename)
-     char *filename;
+     const char *filename;
 {
   char *dirname, *expansion, *username;
   int user_len;
@@ -321,12 +320,12 @@ tilde_expand_word (filename)
   if (filename[1] == '\0' || filename[1] == '/')
     {
       /* Prefix $HOME to the rest of the string. */
-      expansion = get_env_value ("HOME");
+      expansion = sh_get_env_value ("HOME");
 
       /* If there is no HOME variable, look up the directory in
         the password database. */
       if (expansion == 0)
-       expansion = get_home_dir ();
+       expansion = sh_get_home_dir ();
 
       return (glue_prefix_and_suffix (expansion, filename, 1));
     }
@@ -415,28 +414,28 @@ main (argc, argv)
 
 static void memory_error_and_abort ();
 
-static char *
+static void *
 xmalloc (bytes)
-     int bytes;
+     size_t bytes;
 {
-  char *temp = (char *)malloc (bytes);
+  void *temp = (char *)malloc (bytes);
 
   if (!temp)
     memory_error_and_abort ();
   return (temp);
 }
 
-static char *
+static void *
 xrealloc (pointer, bytes)
-     char *pointer;
+     void *pointer;
      int bytes;
 {
-  char *temp;
+  void *temp;
 
   if (!pointer)
-    temp = (char *)malloc (bytes);
+    temp = malloc (bytes);
   else
-    temp = (char *)realloc (pointer, bytes);
+    temp = realloc (pointer, bytes);
 
   if (!temp)
     memory_error_and_abort ();