Files
zssh-mirror/tilde_expansion.c
Michael Tatton eac646d7d9 INIT
2019-11-28 19:14:20 +01:00

63 lines
1.4 KiB
C

/*
** tilde_expansion.c
**
** Made by (Matthieu Lucotte)
** Login <gounter@users.sourceforge.net>
**
** Started on Sun Oct 7 01:04:37 2001 Matthieu Lucotte
** Last update Sun Oct 7 01:25:03 2001 Matthieu Lucotte
*/
#include "zssh.h"
char *pc_get_tilde_expansion(pattern)
char *pattern;
{
char *str;
struct passwd *pass;
if (!*pattern)
{
if ((str = getenv("HOME")))
return (str);
else
return (getpwuid(getuid())->pw_dir);
}
pass = getpwnam(pattern);
if (!pass)
return (0);
return (pass->pw_dir);
}
int pc_tilde_expansion(str)
char **str;
{
int i;
int j;
char *pattern;
char *tmp;
for (i = 0; (*str)[i]; )
if ((j = pc_escape_multi(*str, &i, ESC_COMMON)) < 0)
return (-1);
else
if (!j)
{
if ((*str)[i] == '~')
{
for (j = 1; isalnum((*str)[i + j]); )
j++;
pattern = str_n_dup(*str + i++ + 1,j - 1);
if ((tmp = pc_get_tilde_expansion(pattern)))
{
str_sub_repl(str, --i, j, tmp);
i += strlen(tmp);
}
free(pattern);
}
else
i++;
}
return (0);
}