X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fwrap.c;h=a3d88810df6cf8468a68a872473960e24a36ffc6;hb=7f0f521aa3f6b45259c5dfd5f7f11adcd1a7cac6;hp=49b5c24ee4a7380ba0f01deeb98c6c45c04c37e3;hpb=0a4e239b1562bc859eb37dce7d9d94e75cc5a9a2;p=sbcl.git diff --git a/src/runtime/wrap.c b/src/runtime/wrap.c index 49b5c24..a3d8881 100644 --- a/src/runtime/wrap.c +++ b/src/runtime/wrap.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "runtime.h" #include "sbcl.h" @@ -253,6 +254,33 @@ uid_username(int uid) return 0; } } + +char * +uid_homedir(uid_t uid) +{ + struct passwd *p = getpwuid(uid); + if(p) { + /* Let's be careful about this, shall we? */ + size_t len = strlen(p->pw_dir); + if (p->pw_dir[len-1] == '/') { + return strdup(p->pw_dir); + } else { + char *result = malloc(len + 2); + if (result) { + int nchars = sprintf(result,"%s/",p->pw_dir); + if (nchars == len + 1) { + return result; + } else { + return 0; + } + } else { + return 0; + } + } + } else { + return 0; + } +} /* * functions to get miscellaneous C-level variables