X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=53caa7f9e504ca8afaab61d96e1cf31f6af46070;hp=57943b64117f9afa5ac99f13599d46254e45f26b;hb=dfb33a9737e62ab872d3937b7690b252d2892fe8;hpb=4b73a0c0612d26d49791f389e92f85d6444c36af diff --git a/src/shared/util.c b/src/shared/util.c index 57943b641..53caa7f9e 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -3837,19 +3837,24 @@ bool hostname_is_valid(const char *s) { char* hostname_cleanup(char *s) { char *p, *d; + bool dot; + + for (p = s, d = s, dot = true; *p; p++) { + if (*p == '.') { + if (dot || p[1] == 0) + continue; + + dot = true; + } else + dot = false; - for (p = s, d = s; *p; p++) - if ((*p >= 'a' && *p <= 'z') || - (*p >= 'A' && *p <= 'Z') || - (*p >= '0' && *p <= '9') || - *p == '-' || - *p == '_' || - *p == '.') + if (hostname_valid_char(*p)) *(d++) = *p; + } *d = 0; - strshorten(s, HOST_NAME_MAX); + return s; } @@ -5259,7 +5264,7 @@ int get_home_dir(char **_h) { errno = 0; p = getpwuid(u); if (!p) - return errno ? -errno : -ESRCH; + return errno > 0 ? -errno : -ESRCH; if (!path_is_absolute(p->pw_dir)) return -EINVAL; @@ -5272,26 +5277,6 @@ int get_home_dir(char **_h) { return 0; } -void fclosep(FILE **f) { - if (*f) - fclose(*f); -} - -void pclosep(FILE **f) { - if (*f) - pclose(*f); -} - -void closep(int *fd) { - if (*fd >= 0) - close_nointr_nofail(*fd); -} - -void closedirp(DIR **d) { - if (*d) - closedir(*d); -} - bool filename_is_safe(const char *p) { if (isempty(p)) @@ -5402,7 +5387,23 @@ bool is_locale_utf8(void) { goto out; } - cached_answer = streq(set, "UTF-8"); + if(streq(set, "UTF-8")) { + cached_answer = true; + goto out; + } + + /* For LC_CTYPE=="C" return true, + * because CTYPE is effectly unset and + * everything defaults to UTF-8 nowadays. */ + + set = setlocale(LC_CTYPE, NULL); + if (!set) { + cached_answer = true; + goto out; + } + + cached_answer = streq(set, "C"); + out: return (bool)cached_answer; }