You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* LINTLIBRARY */
#include <stdio.h>
#include "util.h"
#ifdef BSD
#include <pwd.h>
#endif
char * util_tilde_expand(char const *fname) { #ifdef BSD
struct passwd *userRecord; char username[256], *filename; register int i, j;
filename = ALLOC(char, strlen(fname) + 256);
/* Clear the return string */ i = 0; filename[0] = '\0';
/* Tilde? */ if (fname[0] == '~') { j = 0; i = 1; while ((fname[i] != '\0') && (fname[i] != '/')) { username[j++] = fname[i++]; } username[j] = '\0';
if (username[0] == '\0') { /* ~/ resolves to home directory of current user */ if ((userRecord = getpwuid(getuid())) != 0) { (void) strcat(filename, userRecord->pw_dir); } else { i = 0; } } else { /* ~user/ resolves to home directory of 'user' */ if ((userRecord = getpwnam(username)) != 0) { (void) strcat(filename, userRecord->pw_dir); } else { i = 0; } } }
/* Concantenate remaining portion of file name */ (void) strcat(filename, fname + i); return filename; #else
return strsav(fname); #endif
}
|