util: Simplify hostname() as no need to call getaddrinfo()

There is no need to call 'getaddrinfo()' to determine the hostname of
the machine, gethostname() is enough.  This simplify the 'hostname()'
a lot.

Trim a trailing whitespace by the way.
This commit is contained in:
Aaron LI 2018-10-06 22:25:07 +08:00
parent 4e69002432
commit 635b2d6d86
1 changed files with 11 additions and 29 deletions

View File

@ -16,14 +16,15 @@
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <linux/vt.h> #include <linux/vt.h>
char* hostname_backup; static char* hostname_backup = NULL;
void hostname(char** out) void hostname(char** out)
{ {
struct addrinfo hints; if (hostname_backup != NULL)
struct addrinfo* info; {
char* hostname; *out = hostname_backup;
int result; return;
}
int maxlen = sysconf(_SC_HOST_NAME_MAX); int maxlen = sysconf(_SC_HOST_NAME_MAX);
if (maxlen < 0) if (maxlen < 0)
@ -31,38 +32,19 @@ void hostname(char** out)
maxlen = _POSIX_HOST_NAME_MAX; maxlen = _POSIX_HOST_NAME_MAX;
} }
if ((hostname = malloc(maxlen + 1)) == NULL) if ((hostname_backup = malloc(maxlen + 1)) == NULL)
{ {
perror("malloc"); perror("malloc");
exit(1); exit(1);
} }
if (gethostname(hostname, maxlen) < 0) if (gethostname(hostname_backup, maxlen) < 0)
{ {
perror("gethostname"); perror("gethostname");
exit(1); exit(1);
} }
hostname[maxlen] = '\0'; hostname_backup[maxlen] = '\0';
*out = hostname_backup;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_CANONNAME;
result = getaddrinfo(hostname, "http", &hints, &info);
if ((result == 0) && (info != NULL))
{
char* dot = strchr(info->ai_canonname, '.');
*out = strndup(info->ai_canonname, dot - info->ai_canonname);
freeaddrinfo(info);
}
else
{
*out = strdup("");
}
hostname_backup = *out;
free(hostname);
} }
void free_hostname() void free_hostname()
@ -118,7 +100,7 @@ void load(struct desktop* desktop, struct input* login)
char* line = malloc((config.max_login_len * (sizeof (char))) + 1); char* line = malloc((config.max_login_len * (sizeof (char))) + 1);
if (line == NULL) if (line == NULL)
{ {
fclose(file); fclose(file);
return; return;