emergency commit
[cl-cudd.git] / distr / util / texpand.c
blobc14defee8c95b6a3584b57b268eb78809da0ea11
1 /* LINTLIBRARY */
3 #include <stdio.h>
4 #include "util.h"
6 #ifdef BSD
7 #include <pwd.h>
8 #endif
11 char *
12 util_tilde_expand(char const *fname)
14 #ifdef BSD
15 struct passwd *userRecord;
16 char username[256], *filename;
17 register int i, j;
19 filename = ALLOC(char, strlen(fname) + 256);
21 /* Clear the return string */
22 i = 0;
23 filename[0] = '\0';
25 /* Tilde? */
26 if (fname[0] == '~') {
27 j = 0;
28 i = 1;
29 while ((fname[i] != '\0') && (fname[i] != '/')) {
30 username[j++] = fname[i++];
32 username[j] = '\0';
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);
38 } else {
39 i = 0;
41 } else {
42 /* ~user/ resolves to home directory of 'user' */
43 if ((userRecord = getpwnam(username)) != 0) {
44 (void) strcat(filename, userRecord->pw_dir);
45 } else {
46 i = 0;
51 /* Concantenate remaining portion of file name */
52 (void) strcat(filename, fname + i);
53 return filename;
54 #else
55 return strsav(fname);
56 #endif