source: icGREP/icgrep-devel/cudd-2.5.1/util/texpand.c

Last change on this file was 4597, checked in by nmedfort, 4 years ago

Upload of the CUDD library.

File size: 1.1 KB
Line 
1/* LINTLIBRARY */
2
3#include <stdio.h>
4#include "util.h"
5
6#ifdef BSD
7#include <pwd.h>
8#endif
9
10
11char *
12util_tilde_expand(char const *fname)
13{
14#ifdef BSD
15    struct passwd *userRecord;
16    char username[256], *filename;
17    register int i, j;
18
19    filename = ALLOC(char, strlen(fname) + 256);
20
21    /* Clear the return string */
22    i = 0;
23    filename[0] = '\0';
24
25    /* Tilde? */
26    if (fname[0] == '~') {
27        j = 0;
28        i = 1;
29        while ((fname[i] != '\0') && (fname[i] != '/')) {
30            username[j++] = fname[i++];
31        }
32        username[j] = '\0';
33
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;
40            }
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;
47            }
48        }
49    }
50
51    /* Concantenate remaining portion of file name */
52    (void) strcat(filename, fname + i);
53    return filename;
54#else
55    return strsav(fname);
56#endif
57}
Note: See TracBrowser for help on using the repository browser.