00001
00002
00003
00004
00005
00006
00007
00008 #include "util.h"
00009
00010 #if HAVE_PWD_H
00011 # include <pwd.h>
00012 #endif
00013
00014
00015 char *
00016 util_tilde_expand(char const *fname)
00017 {
00018 #if HAVE_PWD_H
00019 struct passwd *userRecord;
00020 char username[256], *filename, *dir;
00021 register int i, j;
00022
00023 filename = ALLOC(char, strlen(fname) + 256);
00024
00025
00026 i = 0;
00027 filename[0] = '\0';
00028
00029
00030 if (fname[0] == '~') {
00031 j = 0;
00032 i = 1;
00033 while ((fname[i] != '\0') && (fname[i] != '/')) {
00034 username[j++] = fname[i++];
00035 }
00036 username[j] = '\0';
00037 dir = (char *)0;
00038 if (username[0] == '\0') {
00039
00040 userRecord = getpwuid(getuid());
00041 if (userRecord) dir = userRecord->pw_dir;
00042 } else {
00043
00044 if (!strcmp(username,"octtools"))
00045 dir = getenv("OCTTOOLS");
00046
00047 if (!dir) {
00048 userRecord = getpwnam(username);
00049 if (userRecord) dir = userRecord->pw_dir;
00050 }
00051 }
00052 if (dir) (void) strcat(filename, dir);
00053 else i = 0;
00054 }
00055
00056
00057 (void) strcat(filename, fname + i);
00058 return filename;
00059 #else
00060 return util_strsav(fname);
00061 #endif
00062 }