char *__PHYSFS_platformGetUserName(void) { char *retval = getUserNameByUID(); if (retval == NULL) retval = __PHYSFS_platformCopyEnvironmentVariable("USER"); return(retval); } /* __PHYSFS_platformGetUserName */
char *__PHYSFS_platformGetUserDir(void) { char *retval = __PHYSFS_platformCopyEnvironmentVariable("HOME"); if (retval == NULL) retval = getUserDirByUID(); return(retval); } /* __PHYSFS_platformGetUserDir */
char *__PHYSFS_platformCalcBaseDir(const char *argv0) { char *retval = NULL; char *envr = NULL; /* fast path: default behaviour can handle this. */ if ( (argv0 != NULL) && (strchr(argv0, '/') != NULL) ) return(NULL); /* higher level will parse out real path from argv0. */ /* * Try to avoid using argv0 unless forced to. If there's a Linux-like * /proc filesystem, you can get the full path to the current process from * the /proc/self/exe symlink. */ retval = readSymLink("/proc/self/exe"); if (retval == NULL) { /* older kernels don't have /proc/self ... try PID version... */ const unsigned long long pid = (unsigned long long) getpid(); char path[64]; const int rc = (int) snprintf(path,sizeof(path),"/proc/%llu/exe",pid); if ( (rc > 0) && (rc < sizeof(path)) ) retval = readSymLink(path); } /* if */ if (retval != NULL) /* chop off filename. */ { char *ptr = strrchr(retval, '/'); if (ptr != NULL) *ptr = '\0'; } /* if */ if ((retval == NULL) && (argv0 != NULL)) { /* If there's no dirsep on argv0, then look through $PATH for it. */ envr = __PHYSFS_platformCopyEnvironmentVariable("PATH"); BAIL_IF_MACRO(!envr, NULL, NULL); retval = findBinaryInPath(argv0, envr); allocator.Free(envr); } /* if */ if (retval != NULL) { /* try to shrink buffer... */ char *ptr = (char *) allocator.Realloc(retval, strlen(retval) + 1); if (ptr != NULL) retval = ptr; /* oh well if it failed. */ } /* if */ return(retval); } /* __PHYSFS_platformCalcBaseDir */
char *__PHYSFS_platformGetUserDir(void) { char *retval = __PHYSFS_platformCopyEnvironmentVariable("HOME"); /* if the environment variable was set, make sure it's really a dir. */ if (retval != NULL) { struct stat statbuf; if ((stat(retval, &statbuf) == -1) || (S_ISDIR(statbuf.st_mode) == 0)) { allocator.Free(retval); retval = NULL; } /* if */ } /* if */ if (retval == NULL) retval = getUserDirByUID(); return(retval); } /* __PHYSFS_platformGetUserDir */