--- glib-2.28.1/glib/gstrfuncs.c	2011-02-16 10:55:33.000000000 +0800
+++ aglib-2.28.1/glib/gstrfuncs.c	2011-03-21 16:33:18.000000000 +0800
@@ -442,8 +442,12 @@ g_ascii_strtod (const gchar *nptr,
 
   fail_pos = NULL;
 
+#ifdef __ANDROID__
+  decimal_point = ".";
+#else
   locale_data = localeconv ();
   decimal_point = locale_data->decimal_point;
+#endif
   decimal_point_len = strlen (decimal_point);
 
   g_assert (decimal_point_len != 0);
@@ -656,8 +660,12 @@ g_ascii_formatd (gchar       *buffer,
 
   _g_snprintf (buffer, buf_len, format, d);
 
+#ifdef __ANDROID__
+  decimal_point = ".";
+#else
   locale_data = localeconv ();
   decimal_point = locale_data->decimal_point;
+#endif
   decimal_point_len = strlen (decimal_point);
 
   g_assert (decimal_point_len != 0);
--- glib-2.28.1/glib/gutils.c	2011-02-11 23:23:13.000000000 +0800
+++ aglib-2.28.1/glib/gutils.c	2011-03-21 17:08:09.000000000 +0800
@@ -29,6 +29,9 @@
  */
 
 #include "config.h"
+#ifdef __ANDROID__
+#undef HAVE_PWD_H
+#endif
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
--- glib-2.28.1/gio/libasyncns/asyncns.c	2010-04-13 21:33:16.000000000 +0800
+++ aglib-2.28.1/gio/libasyncns/asyncns.c	2011-03-21 17:11:43.000000000 +0800
@@ -18,6 +18,30 @@
   <http://www.gnu.org/licenses/>.
 ***/
 
+#ifdef __ANDROID__
+typedef struct {
+	unsigned	id :16;		/*%< query identification number */
+			/* 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 */
+			/* 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;
+#endif
+
+
 #ifdef HAVE_CONFIG_H
 #include "g-asyncns.h"
 #endif
@@ -57,6 +81,10 @@
 #include <inttypes.h>
 #endif
 
+#ifdef __ANDROID__
+#undef HAVE_SYS_PRCTL_H
+#endif
+
 #ifdef HAVE_SYS_PRCTL_H
 #include <sys/prctl.h>
 #endif
--- glib-2.28.1/gio/gresolver.c	2011-02-11 23:23:11.000000000 +0800
+++ aglib-2.28.1/gio/gresolver.c	2011-03-21 16:42:18.000000000 +0800
@@ -20,6 +20,61 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#ifdef __ANDROID__
+/*%
+ * Inline versions of get/put short/long.  Pointer is advanced.
+ */
+#define NS_INT32SZ	4	/*%< #/bytes of data in a u_int32_t */
+#define NS_INT16SZ	2	/*%< #/bytes of data in a u_int16_t */
+#define NS_GET16(s, cp) do { \
+	register const u_char *t_cp = (const u_char *)(cp); \
+	(s) = ((u_int16_t)t_cp[0] << 8) \
+	    | ((u_int16_t)t_cp[1]) \
+	    ; \
+	(cp) += NS_INT16SZ; \
+} while (0)
+#define NS_GET32(l, cp) do { \
+	register const u_char *t_cp = (const u_char *)(cp); \
+	(l) = ((u_int32_t)t_cp[0] << 24) \
+	    | ((u_int32_t)t_cp[1] << 16) \
+	    | ((u_int32_t)t_cp[2] << 8) \
+	    | ((u_int32_t)t_cp[3]) \
+	    ; \
+	(cp) += NS_INT32SZ; \
+} while (0)
+
+
+#define	GETSHORT		NS_GET16
+#define	GETLONG			NS_GET32
+
+#define ns_c_in 	1	/*%< Internet. */
+#define ns_t_srv 	33	/*%< Internet. */
+#define C_IN		ns_c_in
+#define	T_SRV		ns_t_srv
+
+typedef struct {
+	unsigned	id :16;		/*%< query identification number */
+			/* 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 */
+			/* 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;
+#endif
+
+
 #include "config.h"
 #include <glib.h>
 #include "glibintl.h"
--- glib-2.28.1/gio/gthreadedresolver.c	2011-02-11 23:23:12.000000000 +0800
+++ aglib-2.28.1/gio/gthreadedresolver.c	2011-03-21 16:44:29.000000000 +0800
@@ -20,6 +20,60 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#ifdef __ANDROID__
+/*%
+ * Inline versions of get/put short/long.  Pointer is advanced.
+ */
+#define NS_INT32SZ	4	/*%< #/bytes of data in a u_int32_t */
+#define NS_INT16SZ	2	/*%< #/bytes of data in a u_int16_t */
+#define NS_GET16(s, cp) do { \
+	register const u_char *t_cp = (const u_char *)(cp); \
+	(s) = ((u_int16_t)t_cp[0] << 8) \
+	    | ((u_int16_t)t_cp[1]) \
+	    ; \
+	(cp) += NS_INT16SZ; \
+} while (0)
+#define NS_GET32(l, cp) do { \
+	register const u_char *t_cp = (const u_char *)(cp); \
+	(l) = ((u_int32_t)t_cp[0] << 24) \
+	    | ((u_int32_t)t_cp[1] << 16) \
+	    | ((u_int32_t)t_cp[2] << 8) \
+	    | ((u_int32_t)t_cp[3]) \
+	    ; \
+	(cp) += NS_INT32SZ; \
+} while (0)
+
+
+#define	GETSHORT		NS_GET16
+#define	GETLONG			NS_GET32
+
+#define ns_c_in 	1	/*%< Internet. */
+#define ns_t_srv 	33	/*%< Internet. */
+#define C_IN		ns_c_in
+#define	T_SRV		ns_t_srv
+
+	typedef struct {
+	    unsigned	id :16;		/*%< query identification number */
+	    /* 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 */
+	    /* 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;
+#endif
+
 #include "config.h"
 #include <glib.h>
 #include "glibintl.h"
--- glib-2.28.1/gio/gunixresolver.c	2011-02-11 23:23:12.000000000 +0800
+++ aglib-2.28.1/gio/gunixresolver.c	2011-03-21 16:45:01.000000000 +0800
@@ -20,6 +20,62 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#ifdef __ANDROID__
+/*%
+ * Inline versions of get/put short/long.  Pointer is advanced.
+ */
+#define NS_INT32SZ	4	/*%< #/bytes of data in a u_int32_t */
+#define NS_INT16SZ	2	/*%< #/bytes of data in a u_int16_t */
+#define NS_GET16(s, cp) do { \
+	register const u_char *t_cp = (const u_char *)(cp); \
+	(s) = ((u_int16_t)t_cp[0] << 8) \
+	    | ((u_int16_t)t_cp[1]) \
+	    ; \
+	(cp) += NS_INT16SZ; \
+} while (0)
+#define NS_GET32(l, cp) do { \
+	register const u_char *t_cp = (const u_char *)(cp); \
+	(l) = ((u_int32_t)t_cp[0] << 24) \
+	    | ((u_int32_t)t_cp[1] << 16) \
+	    | ((u_int32_t)t_cp[2] << 8) \
+	    | ((u_int32_t)t_cp[3]) \
+	    ; \
+	(cp) += NS_INT32SZ; \
+} while (0)
+
+
+#define	GETSHORT		NS_GET16
+#define	GETLONG			NS_GET32
+
+#define ns_c_in 	1	/*%< Internet. */
+#define ns_t_srv 	33	/*%< Internet. */
+#define C_IN		ns_c_in
+#define	T_SRV		ns_t_srv
+
+	typedef struct {
+	    unsigned	id :16;		/*%< query identification number */
+	    /* 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 */
+	    /* 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;
+#endif
+
+
+
 #include "config.h"
 #include <glib.h>
 #include "glibintl.h"
--- glib-2.28.1/gio/glocalfileinfo.c	2011-02-11 23:23:11.000000000 +0800
+++ aglib-2.28.1/gio/glocalfileinfo.c	2011-03-21 16:55:10.000000000 +0800
@@ -1096,7 +1096,11 @@ 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);
 
+#ifdef __ANDROID__
+      gecos = NULL;
+#else
       gecos = pwbufp->pw_gecos;
+#endif
 
       if (gecos)
 	{
--- glib-2.28.1/gio/ginetaddress.c	2011-02-11 23:23:11.000000000 +0800
+++ aglib-2.28.1/gio/ginetaddress.c	2011-03-21 16:55:45.000000000 +0800
@@ -20,6 +20,27 @@
  * Authors: Christian Kellner <address@hidden>
  *          Samuel Cormier-Iijima <address@hidden>
  */
+#ifdef __ANDROID__
+#define IN6_IS_ADDR_MC_NODELOCAL(a) \
+	(IN6_IS_ADDR_MULTICAST(a)					      \
+	 && ((((__const uint8_t *) (a))[1] & 0xf) == 0x1))
+
+#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
+	(IN6_IS_ADDR_MULTICAST(a)					      \
+	 && ((((__const uint8_t *) (a))[1] & 0xf) == 0x2))
+
+#define IN6_IS_ADDR_MC_SITELOCAL(a) \
+	(IN6_IS_ADDR_MULTICAST(a)					      \
+	 && ((((__const uint8_t *) (a))[1] & 0xf) == 0x5))
+
+#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
+	(IN6_IS_ADDR_MULTICAST(a)					      \
+	 && ((((__const uint8_t *) (a))[1] & 0xf) == 0x8))
+
+#define IN6_IS_ADDR_MC_GLOBAL(a) \
+	(IN6_IS_ADDR_MULTICAST(a)					      \
+	 && ((((__const uint8_t *) (a))[1] & 0xf) == 0xe))
+#endif
 
 #include <config.h>
 
