X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Futils.c;h=83634f433420090fd524d5dc0ea6ac368dc53ab7;hb=8b93008567ad48a8c79d57da3ea27e91d7173472;hp=d084db6c82e98aed3e1e880fea0ccc2f66ed4d1b;hpb=96cf7d1f9a98dfbb68c8cfd47f3b774da7306b8b;p=doldaconnect.git diff --git a/daemon/utils.c b/daemon/utils.c index d084db6..83634f4 100644 --- a/daemon/utils.c +++ b/daemon/utils.c @@ -126,6 +126,19 @@ wchar_t *swprintf2(wchar_t *format, ...) return(buf); } +int havecharset(char *charset) +{ + iconv_t cd; + + if((cd = iconv_open("wchar_t", charset)) == (iconv_t)-1) + return(0); + iconv_close(cd); + if((cd = iconv_open(charset, "wchar_t")) == (iconv_t)-1) + return(0); + iconv_close(cd); + return(1); +} + wchar_t *icmbstowcs(char *mbs, char *charset) { int ret; @@ -707,15 +720,20 @@ char *getetcpath(char *binpath) return(etcpath); } -char *findfile(char *gname, char *uname, char *homedir) +char *findfile(char *gname, char *uname, char *homedir, int filldef) { char *path, *binpath, *etcpath, *p; + struct passwd *pw; - if((homedir != NULL) && ((path = sprintf2("%s/.%s", homedir, uname)) != NULL)) - { - if(!access(path, F_OK)) - return(path); - free(path); + if(uname != NULL) { + if((homedir == NULL) && ((pw = getpwuid(getuid())) != NULL)) + homedir = pw->pw_dir; + if((homedir != NULL) && ((path = sprintf2("%s/.%s", homedir, uname)) != NULL)) + { + if(!access(path, F_OK)) + return(path); + free(path); + } } if(gname != NULL) { @@ -743,7 +761,13 @@ char *findfile(char *gname, char *uname, char *homedir) free(etcpath); } } - return(NULL); + if(filldef) { + if(uname && homedir) + return("%s/.%s", homedir, uname); + return("/etc/%s", gname); + } else { + return(NULL); + } } struct wcspair *newwcspair(wchar_t *key, wchar_t *val, struct wcspair **list)