12 util_tilde_expand(char const *fname
)
15 struct passwd
*userRecord
;
16 char username
[256], *filename
;
19 filename
= ALLOC(char, strlen(fname
) + 256);
21 /* Clear the return string */
26 if (fname
[0] == '~') {
29 while ((fname
[i
] != '\0') && (fname
[i
] != '/')) {
30 username
[j
++] = fname
[i
++];
34 if (username
[0] == '\0') {
35 /* ~/ resolves to home directory of current user */
36 if ((userRecord
= getpwuid(getuid())) != 0) {
37 (void) strcat(filename
, userRecord
->pw_dir
);
42 /* ~user/ resolves to home directory of 'user' */
43 if ((userRecord
= getpwnam(username
)) != 0) {
44 (void) strcat(filename
, userRecord
->pw_dir
);
51 /* Concantenate remaining portion of file name */
52 (void) strcat(filename
, fname
+ i
);