Diff for /embedaddon/readline/tilde.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2014/07/30 08:16:45 version 1.1.1.2, 2021/03/17 01:01:01
Line 1 Line 1
 /* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */  /* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */
   
/* Copyright (C) 1988-2009 Free Software Foundation, Inc./* Copyright (C) 1988-2020 Free Software Foundation, Inc.
   
    This file is part of the GNU Readline Library (Readline), a library     This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.     for reading lines of text with interactive input and history editing.
Line 57  static void *xmalloc (), *xrealloc (); Line 57  static void *xmalloc (), *xrealloc ();
   
 #if !defined (HAVE_GETPW_DECLS)  #if !defined (HAVE_GETPW_DECLS)
 #  if defined (HAVE_GETPWUID)  #  if defined (HAVE_GETPWUID)
extern struct passwd *getpwuid PARAMS((uid_t));extern struct passwd *getpwuid (uid_t);
 #  endif  #  endif
 #  if defined (HAVE_GETPWNAM)  #  if defined (HAVE_GETPWNAM)
extern struct passwd *getpwnam PARAMS((const char *));extern struct passwd *getpwnam (const char *);
 #  endif  #  endif
 #endif /* !HAVE_GETPW_DECLS */  #endif /* !HAVE_GETPW_DECLS */
   
Line 79  extern struct passwd *getpwnam PARAMS((const char *)); Line 79  extern struct passwd *getpwnam PARAMS((const char *));
 /* If being compiled as part of bash, these will be satisfied from  /* If being compiled as part of bash, these will be satisfied from
    variables.o.  If being compiled as part of readline, they will     variables.o.  If being compiled as part of readline, they will
    be satisfied from shell.o. */     be satisfied from shell.o. */
extern char *sh_get_home_dir PARAMS((void));extern char *sh_get_home_dir (void);
extern char *sh_get_env_value PARAMS((const char *));extern char *sh_get_env_value (const char *);
   
 /* The default value of tilde_additional_prefixes.  This is set to  /* The default value of tilde_additional_prefixes.  This is set to
    whitespace preceding a tilde so that simple programs which do not     whitespace preceding a tilde so that simple programs which do not
Line 116  char **tilde_additional_prefixes = (char **)default_pr Line 116  char **tilde_additional_prefixes = (char **)default_pr
    `:' and `=~'. */     `:' and `=~'. */
 char **tilde_additional_suffixes = (char **)default_suffixes;  char **tilde_additional_suffixes = (char **)default_suffixes;
   
static int tilde_find_prefix PARAMS((const char *, int *));static int tilde_find_prefix (const char *, int *);
static int tilde_find_suffix PARAMS((const char *));static int tilde_find_suffix (const char *);
static char *isolate_tilde_prefix PARAMS((const char *, int *));static char *isolate_tilde_prefix (const char *, int *);
static char *glue_prefix_and_suffix PARAMS((char *, const char *, int));static char *glue_prefix_and_suffix (char *, const char *, int);
   
 /* Find the start of a tilde expansion in STRING, and return the index of  /* 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     the tilde which starts the expansion.  Place the length of the text
    which identified this tilde starter in LEN, excluding the tilde itself. */     which identified this tilde starter in LEN, excluding the tilde itself. */
 static int  static int
tilde_find_prefix (string, len)tilde_find_prefix (const char *string, int *len)
     const char *string; 
     int *len; 
 {  {
   register int i, j, string_len;    register int i, j, string_len;
   register char **prefixes;    register char **prefixes;
Line 160  tilde_find_prefix (string, len) Line 158  tilde_find_prefix (string, len)
 /* Find the end of a tilde expansion in STRING, and return the index of  /* Find the end of a tilde expansion in STRING, and return the index of
    the character which ends the tilde definition.  */     the character which ends the tilde definition.  */
 static int  static int
tilde_find_suffix (string)tilde_find_suffix (const char *string)
     const char *string; 
 {  {
   register int i, j, string_len;    register int i, j, string_len;
   register char **suffixes;    register char **suffixes;
Line 189  tilde_find_suffix (string) Line 186  tilde_find_suffix (string)
   
 /* Return a new string which is the result of tilde expanding STRING. */  /* Return a new string which is the result of tilde expanding STRING. */
 char *  char *
tilde_expand (string)tilde_expand (const char *string)
     const char *string; 
 {  {
   char *result;    char *result;
   int result_size, result_index;    int result_size, result_index;
Line 236  tilde_expand (string) Line 232  tilde_expand (string)
       string += end;        string += end;
   
       expansion = tilde_expand_word (tilde_word);        expansion = tilde_expand_word (tilde_word);
       xfree (tilde_word);  
   
         if (expansion == 0)
           expansion = tilde_word;
         else
           xfree (tilde_word);     
   
       len = strlen (expansion);        len = strlen (expansion);
 #ifdef __CYGWIN__  #ifdef __CYGWIN__
       /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when        /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when
Line 263  tilde_expand (string) Line 263  tilde_expand (string)
    non-null, the index of the end of the prefix into FNAME is returned in     non-null, the index of the end of the prefix into FNAME is returned in
    the location it points to. */     the location it points to. */
 static char *  static char *
isolate_tilde_prefix (fname, lenp)isolate_tilde_prefix (const char *fname, int *lenp)
     const char *fname; 
     int *lenp; 
 {  {
   char *ret;    char *ret;
   int i;    int i;
Line 289  isolate_tilde_prefix (fname, lenp) Line 287  isolate_tilde_prefix (fname, lenp)
    function.  Right now, it just calls tilde_find_suffix and allocates new     function.  Right now, it just calls tilde_find_suffix and allocates new
    memory, but it can be expanded to do different things later. */     memory, but it can be expanded to do different things later. */
 char *  char *
tilde_find_word (fname, flags, lenp)tilde_find_word (const char *fname, int flags, int *lenp)
     const char *fname; 
     int flags, *lenp; 
 {  {
   int x;    int x;
   char *r;    char *r;
Line 319  tilde_find_word (fname, flags, lenp) Line 315  tilde_find_word (fname, flags, lenp)
 /* Return a string that is PREFIX concatenated with SUFFIX starting at  /* Return a string that is PREFIX concatenated with SUFFIX starting at
    SUFFIND. */     SUFFIND. */
 static char *  static char *
glue_prefix_and_suffix (prefix, suffix, suffind)glue_prefix_and_suffix (char *prefix, const char *suffix, int suffind)
     char *prefix; 
     const char *suffix; 
     int suffind; 
 {  {
   char *ret;    char *ret;
   int plen, slen;    int plen, slen;
Line 340  glue_prefix_and_suffix (prefix, suffix, suffind) Line 333  glue_prefix_and_suffix (prefix, suffix, suffind)
    tilde.  If there is no expansion, call tilde_expansion_failure_hook.     tilde.  If there is no expansion, call tilde_expansion_failure_hook.
    This always returns a newly-allocated string, never static storage. */     This always returns a newly-allocated string, never static storage. */
 char *  char *
tilde_expand_word (filename)tilde_expand_word (const char *filename)
     const char *filename; 
 {  {
   char *dirname, *expansion, *username;    char *dirname, *expansion, *username;
   int user_len;    int user_len;
Line 360  tilde_expand_word (filename) Line 352  tilde_expand_word (filename)
     {      {
       /* Prefix $HOME to the rest of the string. */        /* Prefix $HOME to the rest of the string. */
       expansion = sh_get_env_value ("HOME");        expansion = sh_get_env_value ("HOME");
   #if defined (_WIN32)
         if (expansion == 0)
           expansion = sh_get_env_value ("APPDATA");
   #endif
   
       /* If there is no HOME variable, look up the directory in        /* If there is no HOME variable, look up the directory in
          the password database. */           the password database. */
Line 426  tilde_expand_word (filename) Line 422  tilde_expand_word (filename)
 #undef NULL  #undef NULL
 #include <stdio.h>  #include <stdio.h>
   
main (argc, argv)main (int argc, char **argv)
     int argc; 
     char **argv; 
 {  {
   char *result, line[512];    char *result, line[512];
   int done = 0;    int done = 0;
Line 456  main (argc, argv) Line 450  main (argc, argv)
   exit (0);    exit (0);
 }  }
   
static void memory_error_and_abort ();static void memory_error_and_abort (void);
   
 static void *  static void *
xmalloc (bytes)xmalloc (size_t bytes)
     size_t bytes; 
 {  {
   void *temp = (char *)malloc (bytes);    void *temp = (char *)malloc (bytes);
   
Line 470  xmalloc (bytes) Line 463  xmalloc (bytes)
 }  }
   
 static void *  static void *
xrealloc (pointer, bytes)xrealloc (void *pointer, int bytes)
     void *pointer; 
     int bytes; 
 {  {
   void *temp;    void *temp;
   
Line 488  xrealloc (pointer, bytes) Line 479  xrealloc (pointer, bytes)
 }  }
   
 static void  static void
memory_error_and_abort ()memory_error_and_abort (void)
 {  {
   fprintf (stderr, "readline: out of virtual memory\n");    fprintf (stderr, "readline: out of virtual memory\n");
   abort ();    abort ();

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>