mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	Fix compilation on Android with the bionic C library
This commit is contained in:
		@@ -1094,6 +1094,7 @@ lookup_uid_data (uid_t uid)
 | 
			
		||||
      if (pwbufp->pw_name != NULL && pwbufp->pw_name[0] != 0)
 | 
			
		||||
	data->user_name = convert_pwd_string_to_utf8 (pwbufp->pw_name);
 | 
			
		||||
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
      gecos = pwbufp->pw_gecos;
 | 
			
		||||
 | 
			
		||||
      if (gecos)
 | 
			
		||||
@@ -1103,6 +1104,7 @@ lookup_uid_data (uid_t uid)
 | 
			
		||||
	    *comma = 0;
 | 
			
		||||
	  data->real_name = convert_pwd_string_to_utf8 (gecos);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Default fallbacks */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										137
									
								
								gio/gresolver.c
									
									
									
									
									
								
							
							
						
						
									
										137
									
								
								gio/gresolver.c
									
									
									
									
									
								
							@@ -258,7 +258,9 @@ g_resolver_maybe_reload (GResolver *resolver)
 | 
			
		||||
      if (st.st_mtime != resolver->priv->resolv_conf_timestamp)
 | 
			
		||||
        {
 | 
			
		||||
          resolver->priv->resolv_conf_timestamp = st.st_mtime;
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
          res_init ();
 | 
			
		||||
#endif
 | 
			
		||||
          g_signal_emit (resolver, signals[RELOAD], 0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -970,6 +972,141 @@ _g_resolver_name_from_nameinfo (GInetAddress  *address,
 | 
			
		||||
 | 
			
		||||
#if defined(G_OS_UNIX)
 | 
			
		||||
 | 
			
		||||
#ifdef __BIONIC__
 | 
			
		||||
/* Copy from bionic/libc/private/arpa_nameser_compat.h
 | 
			
		||||
 * and bionic/libc/private/arpa_nameser.h */
 | 
			
		||||
typedef struct {
 | 
			
		||||
	unsigned	id :16;		/* query identification number */
 | 
			
		||||
#if BYTE_ORDER == BIG_ENDIAN
 | 
			
		||||
			/* fields in third byte */
 | 
			
		||||
	unsigned	qr: 1;		/* response flag */
 | 
			
		||||
	unsigned	opcode: 4;	/* purpose of message */
 | 
			
		||||
	unsigned	aa: 1;		/* authoritive answer */
 | 
			
		||||
	unsigned	tc: 1;		/* truncated message */
 | 
			
		||||
	unsigned	rd: 1;		/* recursion desired */
 | 
			
		||||
			/* fields in fourth byte */
 | 
			
		||||
	unsigned	ra: 1;		/* recursion available */
 | 
			
		||||
	unsigned	unused :1;	/* unused bits (MBZ as of 4.9.3a3) */
 | 
			
		||||
	unsigned	ad: 1;		/* authentic data from named */
 | 
			
		||||
	unsigned	cd: 1;		/* checking disabled by resolver */
 | 
			
		||||
	unsigned	rcode :4;	/* response code */
 | 
			
		||||
#endif
 | 
			
		||||
#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
 | 
			
		||||
			/* fields in third byte */
 | 
			
		||||
	unsigned	rd :1;		/* recursion desired */
 | 
			
		||||
	unsigned	tc :1;		/* truncated message */
 | 
			
		||||
	unsigned	aa :1;		/* authoritive answer */
 | 
			
		||||
	unsigned	opcode :4;	/* purpose of message */
 | 
			
		||||
	unsigned	qr :1;		/* response flag */
 | 
			
		||||
			/* fields in fourth byte */
 | 
			
		||||
	unsigned	rcode :4;	/* response code */
 | 
			
		||||
	unsigned	cd: 1;		/* checking disabled by resolver */
 | 
			
		||||
	unsigned	ad: 1;		/* authentic data from named */
 | 
			
		||||
	unsigned	unused :1;	/* unused bits (MBZ as of 4.9.3a3) */
 | 
			
		||||
	unsigned	ra :1;		/* recursion available */
 | 
			
		||||
#endif
 | 
			
		||||
			/* remaining bytes */
 | 
			
		||||
	unsigned	qdcount :16;	/* number of question entries */
 | 
			
		||||
	unsigned	ancount :16;	/* number of answer entries */
 | 
			
		||||
	unsigned	nscount :16;	/* number of authority entries */
 | 
			
		||||
	unsigned	arcount :16;	/* number of resource entries */
 | 
			
		||||
} HEADER;
 | 
			
		||||
 | 
			
		||||
#define NS_INT32SZ	4	/* #/bytes of data in a uint32_t */
 | 
			
		||||
#define NS_INT16SZ	2	/* #/bytes of data in a uint16_t */
 | 
			
		||||
 | 
			
		||||
#define NS_GET16(s, cp) do { \
 | 
			
		||||
	const u_char *t_cp = (const u_char *)(cp); \
 | 
			
		||||
	(s) = ((uint16_t)t_cp[0] << 8) \
 | 
			
		||||
	    | ((uint16_t)t_cp[1]) \
 | 
			
		||||
	    ; \
 | 
			
		||||
	(cp) += NS_INT16SZ; \
 | 
			
		||||
} while (/*CONSTCOND*/0)
 | 
			
		||||
 | 
			
		||||
#define NS_GET32(l, cp) do { \
 | 
			
		||||
	const u_char *t_cp = (const u_char *)(cp); \
 | 
			
		||||
	(l) = ((uint32_t)t_cp[0] << 24) \
 | 
			
		||||
	    | ((uint32_t)t_cp[1] << 16) \
 | 
			
		||||
	    | ((uint32_t)t_cp[2] << 8) \
 | 
			
		||||
	    | ((uint32_t)t_cp[3]) \
 | 
			
		||||
	    ; \
 | 
			
		||||
	(cp) += NS_INT32SZ; \
 | 
			
		||||
} while (/*CONSTCOND*/0)
 | 
			
		||||
 | 
			
		||||
#define	GETSHORT		NS_GET16
 | 
			
		||||
#define	GETLONG			NS_GET32
 | 
			
		||||
 | 
			
		||||
#define C_IN 1
 | 
			
		||||
 | 
			
		||||
/* From bionic/libc/private/resolv_private.h */
 | 
			
		||||
int dn_expand(const u_char *, const u_char *, const u_char *, char *, int);
 | 
			
		||||
#define dn_skipname __dn_skipname
 | 
			
		||||
int dn_skipname(const u_char *, const u_char *);
 | 
			
		||||
 | 
			
		||||
/* From bionic/libc/private/arpa_nameser_compat.h */
 | 
			
		||||
#define T_MX		ns_t_mx
 | 
			
		||||
#define T_TXT		ns_t_txt
 | 
			
		||||
#define T_SOA		ns_t_soa
 | 
			
		||||
#define T_NS		ns_t_ns
 | 
			
		||||
 | 
			
		||||
/* From bionic/libc/private/arpa_nameser.h */
 | 
			
		||||
typedef enum __ns_type {
 | 
			
		||||
	ns_t_invalid = 0,	/* Cookie. */
 | 
			
		||||
	ns_t_a = 1,		/* Host address. */
 | 
			
		||||
	ns_t_ns = 2,		/* Authoritative server. */
 | 
			
		||||
	ns_t_md = 3,		/* Mail destination. */
 | 
			
		||||
	ns_t_mf = 4,		/* Mail forwarder. */
 | 
			
		||||
	ns_t_cname = 5,		/* Canonical name. */
 | 
			
		||||
	ns_t_soa = 6,		/* Start of authority zone. */
 | 
			
		||||
	ns_t_mb = 7,		/* Mailbox domain name. */
 | 
			
		||||
	ns_t_mg = 8,		/* Mail group member. */
 | 
			
		||||
	ns_t_mr = 9,		/* Mail rename name. */
 | 
			
		||||
	ns_t_null = 10,		/* Null resource record. */
 | 
			
		||||
	ns_t_wks = 11,		/* Well known service. */
 | 
			
		||||
	ns_t_ptr = 12,		/* Domain name pointer. */
 | 
			
		||||
	ns_t_hinfo = 13,	/* Host information. */
 | 
			
		||||
	ns_t_minfo = 14,	/* Mailbox information. */
 | 
			
		||||
	ns_t_mx = 15,		/* Mail routing information. */
 | 
			
		||||
	ns_t_txt = 16,		/* Text strings. */
 | 
			
		||||
	ns_t_rp = 17,		/* Responsible person. */
 | 
			
		||||
	ns_t_afsdb = 18,	/* AFS cell database. */
 | 
			
		||||
	ns_t_x25 = 19,		/* X_25 calling address. */
 | 
			
		||||
	ns_t_isdn = 20,		/* ISDN calling address. */
 | 
			
		||||
	ns_t_rt = 21,		/* Router. */
 | 
			
		||||
	ns_t_nsap = 22,		/* NSAP address. */
 | 
			
		||||
	ns_t_nsap_ptr = 23,	/* Reverse NSAP lookup (deprecated). */
 | 
			
		||||
	ns_t_sig = 24,		/* Security signature. */
 | 
			
		||||
	ns_t_key = 25,		/* Security key. */
 | 
			
		||||
	ns_t_px = 26,		/* X.400 mail mapping. */
 | 
			
		||||
	ns_t_gpos = 27,		/* Geographical position (withdrawn). */
 | 
			
		||||
	ns_t_aaaa = 28,		/* Ip6 Address. */
 | 
			
		||||
	ns_t_loc = 29,		/* Location Information. */
 | 
			
		||||
	ns_t_nxt = 30,		/* Next domain (security). */
 | 
			
		||||
	ns_t_eid = 31,		/* Endpoint identifier. */
 | 
			
		||||
	ns_t_nimloc = 32,	/* Nimrod Locator. */
 | 
			
		||||
	ns_t_srv = 33,		/* Server Selection. */
 | 
			
		||||
	ns_t_atma = 34,		/* ATM Address */
 | 
			
		||||
	ns_t_naptr = 35,	/* Naming Authority PoinTeR */
 | 
			
		||||
	ns_t_kx = 36,		/* Key Exchange */
 | 
			
		||||
	ns_t_cert = 37,		/* Certification record */
 | 
			
		||||
	ns_t_a6 = 38,		/* IPv6 address (deprecates AAAA) */
 | 
			
		||||
	ns_t_dname = 39,	/* Non-terminal DNAME (for IPv6) */
 | 
			
		||||
	ns_t_sink = 40,		/* Kitchen sink (experimentatl) */
 | 
			
		||||
	ns_t_opt = 41,		/* EDNS0 option (meta-RR) */
 | 
			
		||||
	ns_t_apl = 42,		/* Address prefix list (RFC 3123) */
 | 
			
		||||
	ns_t_tkey = 249,	/* Transaction key */
 | 
			
		||||
	ns_t_tsig = 250,	/* Transaction signature. */
 | 
			
		||||
	ns_t_ixfr = 251,	/* Incremental zone transfer. */
 | 
			
		||||
	ns_t_axfr = 252,	/* Transfer zone of authority. */
 | 
			
		||||
	ns_t_mailb = 253,	/* Transfer mailbox records. */
 | 
			
		||||
	ns_t_maila = 254,	/* Transfer mail agent records. */
 | 
			
		||||
	ns_t_any = 255,		/* Wildcard match. */
 | 
			
		||||
	ns_t_zxfr = 256,	/* BIND-specific, nonstandard. */
 | 
			
		||||
	ns_t_max = 65536
 | 
			
		||||
} ns_type;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
parse_short (guchar  **p,
 | 
			
		||||
             guchar   *end,
 | 
			
		||||
 
 | 
			
		||||
@@ -202,6 +202,13 @@ free_records (GList *records)
 | 
			
		||||
  g_list_free_full (records, (GDestroyNotify) g_variant_unref);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(G_OS_UNIX)
 | 
			
		||||
#ifdef __BIONIC__
 | 
			
		||||
#define C_IN 1
 | 
			
		||||
int res_query(const char *, int, int, u_char *, int);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
do_lookup_records (GTask         *task,
 | 
			
		||||
                   gpointer       source_object,
 | 
			
		||||
 
 | 
			
		||||
@@ -40,8 +40,12 @@
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (GTlsConsoleInteraction, g_tls_console_interaction, G_TYPE_TLS_INTERACTION);
 | 
			
		||||
 | 
			
		||||
#ifdef G_OS_WIN32
 | 
			
		||||
#if defined(G_OS_WIN32) || defined(__BIONIC__)
 | 
			
		||||
/* win32 doesn't have getpass() */
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#ifndef BUFSIZ
 | 
			
		||||
#define BUFSIZ 8192
 | 
			
		||||
#endif
 | 
			
		||||
static gchar *
 | 
			
		||||
getpass (const gchar *prompt)
 | 
			
		||||
{
 | 
			
		||||
@@ -53,7 +57,11 @@ getpass (const gchar *prompt)
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < BUFSIZ - 1; ++i)
 | 
			
		||||
    {
 | 
			
		||||
#ifdef __BIONIC__
 | 
			
		||||
      buf[i] = getc (stdin);
 | 
			
		||||
#else
 | 
			
		||||
      buf[i] = _getch ();
 | 
			
		||||
#endif
 | 
			
		||||
      if (buf[i] == '\r')
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,9 @@
 | 
			
		||||
 | 
			
		||||
#include <glib/gtypes.h>
 | 
			
		||||
 | 
			
		||||
#ifdef  __GNUC__
 | 
			
		||||
#if defined(__BIONIC__) && defined (GLIB_HAVE_ALLOCA_H)
 | 
			
		||||
# include <alloca.h>
 | 
			
		||||
#elif defined(__GNUC__)
 | 
			
		||||
/* GCC does the right thing */
 | 
			
		||||
# undef alloca
 | 
			
		||||
# define alloca(size)   __builtin_alloca (size)
 | 
			
		||||
 
 | 
			
		||||
@@ -703,7 +703,9 @@ g_ascii_strtod (const gchar *nptr,
 | 
			
		||||
 | 
			
		||||
  gchar *fail_pos;
 | 
			
		||||
  gdouble val;
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
  struct lconv *locale_data;
 | 
			
		||||
#endif
 | 
			
		||||
  const char *decimal_point;
 | 
			
		||||
  int decimal_point_len;
 | 
			
		||||
  const char *p, *decimal_point_pos;
 | 
			
		||||
@@ -714,9 +716,14 @@ g_ascii_strtod (const gchar *nptr,
 | 
			
		||||
 | 
			
		||||
  fail_pos = NULL;
 | 
			
		||||
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
  locale_data = localeconv ();
 | 
			
		||||
  decimal_point = locale_data->decimal_point;
 | 
			
		||||
  decimal_point_len = strlen (decimal_point);
 | 
			
		||||
#else
 | 
			
		||||
  decimal_point = ".";
 | 
			
		||||
  decimal_point_len = 1;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  g_assert (decimal_point_len != 0);
 | 
			
		||||
 | 
			
		||||
@@ -907,7 +914,9 @@ g_ascii_formatd (gchar       *buffer,
 | 
			
		||||
 | 
			
		||||
  return buffer;
 | 
			
		||||
#else
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
  struct lconv *locale_data;
 | 
			
		||||
#endif
 | 
			
		||||
  const char *decimal_point;
 | 
			
		||||
  int decimal_point_len;
 | 
			
		||||
  gchar *p;
 | 
			
		||||
@@ -938,9 +947,14 @@ g_ascii_formatd (gchar       *buffer,
 | 
			
		||||
 | 
			
		||||
  _g_snprintf (buffer, buf_len, format, d);
 | 
			
		||||
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
  locale_data = localeconv ();
 | 
			
		||||
  decimal_point = locale_data->decimal_point;
 | 
			
		||||
  decimal_point_len = strlen (decimal_point);
 | 
			
		||||
#else
 | 
			
		||||
  decimal_point = ".";
 | 
			
		||||
  decimal_point_len = 1;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  g_assert (decimal_point_len != 0);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -830,14 +830,19 @@ g_get_any_init_do (void)
 | 
			
		||||
    
 | 
			
		||||
    if (!pw)
 | 
			
		||||
      {
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
	setpwent ();
 | 
			
		||||
#endif
 | 
			
		||||
	pw = getpwuid (getuid ());
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
	endpwent ();
 | 
			
		||||
#endif
 | 
			
		||||
      }
 | 
			
		||||
    if (pw)
 | 
			
		||||
      {
 | 
			
		||||
	g_user_name = g_strdup (pw->pw_name);
 | 
			
		||||
 | 
			
		||||
#ifndef __BIONIC__
 | 
			
		||||
	if (pw->pw_gecos && *pw->pw_gecos != '\0') 
 | 
			
		||||
	  {
 | 
			
		||||
	    gchar **gecos_fields;
 | 
			
		||||
@@ -851,6 +856,7 @@ g_get_any_init_do (void)
 | 
			
		||||
	    g_strfreev (gecos_fields);
 | 
			
		||||
	    g_strfreev (name_parts);
 | 
			
		||||
	  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!g_home_dir)
 | 
			
		||||
	  g_home_dir = g_strdup (pw->pw_dir);
 | 
			
		||||
 
 | 
			
		||||
@@ -113,7 +113,11 @@ _g_module_self (void)
 | 
			
		||||
   * are required on some systems.
 | 
			
		||||
   */
 | 
			
		||||
  
 | 
			
		||||
#ifdef __BIONIC__
 | 
			
		||||
  handle = RTLD_DEFAULT;
 | 
			
		||||
#else
 | 
			
		||||
  handle = dlopen (NULL, RTLD_GLOBAL | RTLD_LAZY);
 | 
			
		||||
#endif
 | 
			
		||||
  if (!handle)
 | 
			
		||||
    g_module_set_error (fetch_dlerror (TRUE));
 | 
			
		||||
  
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user