fix(portability): replace POSIX-only string funcs and legacy hostent fields

This commit is contained in:
2026-01-26 15:56:52 -07:00
parent 4ad5df0370
commit 4008d94571
7 changed files with 20 additions and 14 deletions

View File

@@ -2,7 +2,9 @@ PREFIX ?= /usr/local
BUILD_DIR ?= build BUILD_DIR ?= build
MESON ?= meson MESON ?= meson
NINJA ?= ninja NINJA ?= ninja
C_STD ?= c17
MESON_SETUP_ARGS ?= MESON_SETUP_ARGS ?=
MESON_SETUP_ARGS += -Dc_std=$(C_STD)
MESON_COMPILE_ARGS ?= MESON_COMPILE_ARGS ?=
MESON_INSTALL_ARGS ?= MESON_INSTALL_ARGS ?=

View File

@@ -323,8 +323,8 @@ dcc_lookup_proxy (char *host, struct sockaddr_in *addr)
h = gethostbyname (host); h = gethostbyname (host);
if (h != NULL && h->h_length == 4 && h->h_addr_list[0] != NULL) if (h != NULL && h->h_length == 4 && h->h_addr_list[0] != NULL)
{ {
memcpy (&addr->sin_addr, h->h_addr, 4); memcpy (&addr->sin_addr, h->h_addr_list[0], 4);
memcpy (&cache_addr, h->h_addr, 4); memcpy (&cache_addr, h->h_addr_list[0], 4);
cache_host = g_strdup (host); cache_host = g_strdup (host);
/* cppcheck-suppress memleak */ /* cppcheck-suppress memleak */
return TRUE; return TRUE;

View File

@@ -1,3 +1,4 @@
#include <glib.h>
/* X-Chat /* X-Chat
* Copyright (C) 1998 Peter Zelezny. * Copyright (C) 1998 Peter Zelezny.
* *
@@ -24,7 +25,7 @@ void
history_add (struct history *his, char *text) history_add (struct history *his, char *text)
{ {
free (his->lines[his->realpos]); free (his->lines[his->realpos]);
his->lines[his->realpos] = strdup (text); his->lines[his->realpos] = g_strdup(text);
his->realpos++; his->realpos++;
if (his->realpos == HISTORY_SIZE) if (his->realpos == HISTORY_SIZE)
his->realpos = 0; his->realpos = 0;

View File

@@ -1424,9 +1424,9 @@ inbound_foundip (session *sess, char *ip, const message_tags_data *tags_data)
HostAddr = gethostbyname (ip); HostAddr = gethostbyname (ip);
if (HostAddr) if (HostAddr)
{ {
sess->server->dcc_ip = ((struct in_addr *) HostAddr->h_addr)->s_addr; sess->server->dcc_ip = ((struct in_addr *) HostAddr->h_addr_list[0])->s_addr;
EMIT_SIGNAL_TIMESTAMP (XP_TE_FOUNDIP, sess->server->server_session, EMIT_SIGNAL_TIMESTAMP (XP_TE_FOUNDIP, sess->server->server_session,
inet_ntoa (*((struct in_addr *) HostAddr->h_addr)), inet_ntoa (*((struct in_addr *) HostAddr->h_addr_list[0])),
NULL, NULL, NULL, 0, tags_data->timestamp); NULL, NULL, NULL, 0, tags_data->timestamp);
} }
} }

View File

@@ -17,9 +17,12 @@
*/ */
/* ipv4 and ipv6 networking functions with a common interface */ /* ipv4 and ipv6 networking functions with a common interface */
#define _POSIX_C_SOURCE 200112L
#include <netdb.h>
#include "config.h" #include "config.h"
#include <glib.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
@@ -121,11 +124,11 @@ net_resolve (netstore * ns, char *hostname, int port, char **real_host)
ipstring, sizeof (ipstring), NULL, 0, NI_NUMERICHOST); ipstring, sizeof (ipstring), NULL, 0, NI_NUMERICHOST);
if (ns->ip6_hostent->ai_canonname) if (ns->ip6_hostent->ai_canonname)
*real_host = strdup (ns->ip6_hostent->ai_canonname); *real_host = g_strdup(ns->ip6_hostent->ai_canonname);
else else
*real_host = strdup (hostname); *real_host = g_strdup(hostname);
return strdup (ipstring); return g_strdup(ipstring);
} }
/* the only thing making this interface unclean, this shitty sok4, sok6 business */ /* the only thing making this interface unclean, this shitty sok4, sok6 business */

View File

@@ -1353,29 +1353,29 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[],
switch (t) switch (t)
{ {
case WORDL('C','A','P','\0'): case WORDL('C','A','P','\0'):
if (strncasecmp (word[4], "ACK", 3) == 0) if (g_ascii_strncasecmp(word[4], "ACK", 3) == 0)
{ {
inbound_cap_ack (serv, word[1], inbound_cap_ack (serv, word[1],
word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5], word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5],
tags_data); tags_data);
} }
else if (strncasecmp (word[4], "LS", 2) == 0 || strncasecmp (word[4], "NEW", 3) == 0) else if (g_ascii_strncasecmp(word[4], "LS", 2) == 0 || g_ascii_strncasecmp(word[4], "NEW", 3) == 0)
{ {
inbound_cap_ls (serv, word[1], inbound_cap_ls (serv, word[1],
word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5], word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5],
tags_data); tags_data);
} }
else if (strncasecmp (word[4], "NAK", 3) == 0) else if (g_ascii_strncasecmp(word[4], "NAK", 3) == 0)
{ {
inbound_cap_nak (serv, word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5], tags_data); inbound_cap_nak (serv, word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5], tags_data);
} }
else if (strncasecmp (word[4], "LIST", 4) == 0) else if (g_ascii_strncasecmp(word[4], "LIST", 4) == 0)
{ {
inbound_cap_list (serv, word[1], inbound_cap_list (serv, word[1],
word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5], word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5],
tags_data); tags_data);
} }
else if (strncasecmp (word[4], "DEL", 3) == 0) else if (g_ascii_strncasecmp(word[4], "DEL", 3) == 0)
{ {
inbound_cap_del (serv, word[1], inbound_cap_del (serv, word[1],
word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5], word[5][0] == ':' ? word_eol[5] + 1 : word_eol[5],

View File

@@ -1184,7 +1184,7 @@ key_action_page_switch (GtkWidget * wid, GdkEventKey * evt, char *d1,
if (!len) if (!len)
return 1; return 1;
if (strcasecmp(d1, "auto") == 0) if (g_ascii_strcasecmp(d1, "auto") == 0)
{ {
/* Auto switch makes no sense in detached sessions */ /* Auto switch makes no sense in detached sessions */
if (!sess->gui->is_tab) if (!sess->gui->is_tab)