treewide: Introduce support for missing g_memdup2
diff --git a/Makefile.am b/Makefile.am
index ba8e1b9..0159fcb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -704,8 +704,8 @@
 
 sbin_PROGRAMS = src/ofonod
 
-src_ofonod_SOURCES = $(builtin_sources) $(gatchat_sources) \
-			linux/gsmmux.h linux/gpio.h src/ofono.ver \
+src_ofonod_SOURCES = $(builtin_sources) $(gatchat_sources) src/ofono.ver \
+			linux/gsmmux.h linux/gpio.h src/missing.h \
 			src/main.c src/ofono.h src/log.c src/plugin.c \
 			src/modem.c src/common.h src/common.c \
 			src/manager.c src/dbus.c src/util.h src/util.c \
diff --git a/configure.ac b/configure.ac
index 8cbfee6..3e589d8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,7 +63,10 @@
 AC_CHECK_LIB(dl, dlopen, dummy=yes,
 			AC_MSG_ERROR(dynamic linking loader is required))
 
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.68, dummy=yes, [
+PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.68, [
+	AC_DEFINE_UNQUOTED(HAVE_G_MEMDUP2, 1,
+			[Define to 1 if you have the `g_memdup2' function.])
+], [
 	PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.60, dummy=yes,
 				AC_MSG_ERROR(GLib >= 2.60 is required))
 ])
diff --git a/drivers/hsomodem/gprs-context.c b/drivers/hsomodem/gprs-context.c
index 44dc89a..aafcaa0 100644
--- a/drivers/hsomodem/gprs-context.c
+++ b/drivers/hsomodem/gprs-context.c
@@ -37,6 +37,7 @@
 #include "gatresult.h"
 
 #include "hsomodem.h"
+#include "src/missing.h"
 
 #define HSO_DISCONNECTED 0
 #define HSO_CONNECTED 1
diff --git a/drivers/huaweimodem/gprs-context.c b/drivers/huaweimodem/gprs-context.c
index 2a1a828..edc01ba 100644
--- a/drivers/huaweimodem/gprs-context.c
+++ b/drivers/huaweimodem/gprs-context.c
@@ -39,6 +39,7 @@
 #include "gattty.h"
 
 #include "huaweimodem.h"
+#include "src/missing.h"
 
 static const char *none_prefix[] = { NULL };
 static const char *dhcp_prefix[] = { "^DHCP:", NULL };
diff --git a/drivers/iceramodem/gprs-context.c b/drivers/iceramodem/gprs-context.c
index 21b748a..fdc7f84 100644
--- a/drivers/iceramodem/gprs-context.c
+++ b/drivers/iceramodem/gprs-context.c
@@ -40,6 +40,7 @@
 #include "gattty.h"
 
 #include "iceramodem.h"
+#include "src/missing.h"
 
 #define ICERA_DISCONNECTED	0
 #define ICERA_CONNECTED		1
diff --git a/drivers/mbmmodem/gprs-context.c b/drivers/mbmmodem/gprs-context.c
index acfa211..d6c3a3c 100644
--- a/drivers/mbmmodem/gprs-context.c
+++ b/drivers/mbmmodem/gprs-context.c
@@ -38,6 +38,7 @@
 #include "gatresult.h"
 
 #include "mbmmodem.h"
+#include "src/missing.h"
 
 #define MBM_E2NAP_DISCONNECTED 0
 #define MBM_E2NAP_CONNECTED 1
diff --git a/drivers/stemodem/gprs-context.c b/drivers/stemodem/gprs-context.c
index e1b51dc..4348e15 100644
--- a/drivers/stemodem/gprs-context.c
+++ b/drivers/stemodem/gprs-context.c
@@ -49,6 +49,7 @@
 #include "if_caif.h"
 #include "caif_rtnl.h"
 #include "common.h"
+#include "src/missing.h"
 
 #define MAX_DNS 2
 #define IP_ADDR_LEN 20
diff --git a/drivers/swmodem/gprs-context.c b/drivers/swmodem/gprs-context.c
index 6532aa4..b63c895 100644
--- a/drivers/swmodem/gprs-context.c
+++ b/drivers/swmodem/gprs-context.c
@@ -40,6 +40,7 @@
 #include "gattty.h"
 
 #include "swmodem.h"
+#include "src/missing.h"
 
 static const char *none_prefix[] = { NULL };
 
diff --git a/gatchat/gatmux.c b/gatchat/gatmux.c
index 2e4ce9f..95ffeb8 100644
--- a/gatchat/gatmux.c
+++ b/gatchat/gatmux.c
@@ -38,6 +38,7 @@
 #include "ringbuffer.h"
 #include "gatmux.h"
 #include "gsm0710.h"
+#include "src/missing.h"
 
 static const char *cmux_prefix[] = { "+CMUX:", NULL };
 static const char *none_prefix[] = { NULL };
diff --git a/gatchat/ppp_ipcp.c b/gatchat/ppp_ipcp.c
index 4d19e1b..4d4dd37 100644
--- a/gatchat/ppp_ipcp.c
+++ b/gatchat/ppp_ipcp.c
@@ -34,6 +34,7 @@
 #include "gatutil.h"
 #include "gatppp.h"
 #include "ppp.h"
+#include "src/missing.h"
 
 #define IPCP_SUPPORTED_CODES	((1 << PPPCP_CODE_TYPE_CONFIGURE_REQUEST) | \
 				(1 << PPPCP_CODE_TYPE_CONFIGURE_ACK) | \
diff --git a/gatchat/ppp_ipv6cp.c b/gatchat/ppp_ipv6cp.c
index ac2b758..cde4020 100644
--- a/gatchat/ppp_ipv6cp.c
+++ b/gatchat/ppp_ipv6cp.c
@@ -34,6 +34,7 @@
 
 #include "gatppp.h"
 #include "ppp.h"
+#include "missing.h"
 
 #define IPV6CP_SUPPORTED_CODES	((1 << PPPCP_CODE_TYPE_CONFIGURE_REQUEST) | \
 				(1 << PPPCP_CODE_TYPE_CONFIGURE_ACK) | \
diff --git a/src/missing.h b/src/missing.h
new file mode 100644
index 0000000..aa96e27
--- /dev/null
+++ b/src/missing.h
@@ -0,0 +1,24 @@
+/*
+ *
+ *  oFono - Open Source Telephony
+ *
+ *  Copyright (C) 2008-2011  Intel Corporation. All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef HAVE_G_MEMDUP2
+#define g_memdup2(mem, size) g_memdup((mem), (size))
+#endif
diff --git a/src/modem.c b/src/modem.c
index bd4c104..f4f414c 100644
--- a/src/modem.c
+++ b/src/modem.c
@@ -31,8 +31,8 @@
 #include <gdbus.h>
 
 #include "ofono.h"
-
 #include "common.h"
+#include "missing.h"
 
 #define DEFAULT_POWERED_TIMEOUT (20)
 
diff --git a/src/network.c b/src/network.c
index 0d54bb3..bfb8817 100644
--- a/src/network.c
+++ b/src/network.c
@@ -36,6 +36,7 @@
 #include "simutil.h"
 #include "util.h"
 #include "storage.h"
+#include "missing.h"
 
 #define SETTINGS_STORE "netreg"
 #define SETTINGS_GROUP "Settings"
diff --git a/src/sim.c b/src/sim.c
index 4a05ac3..0c4afef 100644
--- a/src/sim.c
+++ b/src/sim.c
@@ -47,6 +47,7 @@
 #include "storage.h"
 #include "simfs.h"
 #include "stkutil.h"
+#include "missing.h"
 
 /*
  * A new session object will be created if a USim/ISim applications are
diff --git a/src/simfs.c b/src/simfs.c
index 8b838b0..3d4f628 100644
--- a/src/simfs.c
+++ b/src/simfs.c
@@ -39,6 +39,7 @@
 #include "simfs.h"
 #include "simutil.h"
 #include "storage.h"
+#include "missing.h"
 
 #define SIM_CACHE_MODE 0600
 #define SIM_CACHE_BASEPATH STORAGEDIR "/%s-%i"
diff --git a/src/simutil.c b/src/simutil.c
index 5d2aa6a..9013460 100644
--- a/src/simutil.c
+++ b/src/simutil.c
@@ -33,6 +33,7 @@
 #include "simutil.h"
 #include "util.h"
 #include "smsutil.h"
+#include "missing.h"
 
 struct sim_eons {
 	struct sim_eons_operator_info *pnn_list;
diff --git a/src/smsutil.c b/src/smsutil.c
index 6911f83..8e57a06 100644
--- a/src/smsutil.c
+++ b/src/smsutil.c
@@ -38,6 +38,7 @@
 #include "util.h"
 #include "storage.h"
 #include "smsutil.h"
+#include "missing.h"
 
 #define uninitialized_var(x) x = x
 
diff --git a/src/voicecall.c b/src/voicecall.c
index 6265e4d..3da258d 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -38,6 +38,7 @@
 #include "simutil.h"
 #include "smsutil.h"
 #include "storage.h"
+#include "missing.h"
 
 #define MAX_VOICE_CALLS 16
 
diff --git a/tools/stktest.c b/tools/stktest.c
index 5863bc5..80d277e 100644
--- a/tools/stktest.c
+++ b/tools/stktest.c
@@ -36,6 +36,7 @@
 #include <gdbus.h>
 #include <gatchat/gatserver.h>
 
+#include "src/missing.h"
 #include "unit/stk-test-data.h"
 
 #define OFONO_SERVICE	"org.ofono"