X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Futils.c;h=d084db6c82e98aed3e1e880fea0ccc2f66ed4d1b;hb=96cf7d1f9a98dfbb68c8cfd47f3b774da7306b8b;hp=8e38459e004f9166aa5033297963e61852828bd1;hpb=65399bc233d5f8910bf589d08b43b933975b462a;p=doldaconnect.git diff --git a/daemon/utils.c b/daemon/utils.c index 8e38459..d084db6 100644 --- a/daemon/utils.c +++ b/daemon/utils.c @@ -190,7 +190,7 @@ wchar_t *icsmbstowcs(char *mbs, char *charset, wchar_t *def) free(buf); if((buf = icmbstowcs(mbs, charset)) == NULL) { - if(*def == '~') + if((def != NULL) && (*def == L'~')) { flog(LOG_WARNING, "icsmbstowcs: could not convert wcs string into charset %s: %s", charset, strerror(errno)); def++; @@ -264,7 +264,7 @@ char *icswcstombs(wchar_t *wcs, char *charset, char *def) free(buf); if((buf = icwcstombs(wcs, charset)) == NULL) { - if(*def == '~') + if((def != NULL) && (*def == '~')) { flog(LOG_WARNING, "icswcstombs: could not convert mbs string from charset %s: %s", charset, strerror(errno)); def++; @@ -745,3 +745,50 @@ char *findfile(char *gname, char *uname, char *homedir) } return(NULL); } + +struct wcspair *newwcspair(wchar_t *key, wchar_t *val, struct wcspair **list) +{ + struct wcspair *pair; + + pair = smalloc(sizeof(*pair)); + memset(pair, 0, sizeof(*pair)); + if(key != NULL) + pair->key = swcsdup(key); + if(val != NULL) + pair->val = swcsdup(val); + if(list == NULL) + { + pair->next = NULL; + } else { + pair->next = *list; + *list = pair; + } + return(pair); +} + +void freewcspair(struct wcspair *pair, struct wcspair **list) +{ + struct wcspair *cur; + + for(cur = *list; cur != NULL; list = &(cur->next), cur = cur->next) + { + if(cur == pair) + { + *list = cur->next; + break; + } + } + free(pair->key); + free(pair->val); + free(pair); +} + +wchar_t *wpfind(struct wcspair *list, wchar_t *key) +{ + for(; list != NULL; list = list->next) + { + if(!wcscmp(list->key, key)) + return(list->val); + } + return(NULL); +}