osi: add compat code for glibc
glibc doesn't declare strlcpy(), strlcat() or gettid(). Add a header
of compatibility routines that only get included when compiling on this.
Change-Id: I889ac7f1d22cf7056757890fcff0403107488d62
diff --git a/bta/hf_client/bta_hf_client_act.c b/bta/hf_client/bta_hf_client_act.c
index 4ea5ba6..4cf99c7 100644
--- a/bta/hf_client/bta_hf_client_act.c
+++ b/bta/hf_client/bta_hf_client_act.c
@@ -32,6 +32,7 @@
#include "bta_sys.h"
#include "utl.h"
#include "bt_utils.h"
+#include "osi/include/compat.h"
#include <string.h>
/*****************************************************************************
diff --git a/bta/hf_client/bta_hf_client_api.c b/bta/hf_client/bta_hf_client_api.c
index b67f140..bb65f3e 100644
--- a/bta/hf_client/bta_hf_client_api.c
+++ b/bta/hf_client/bta_hf_client_api.c
@@ -27,6 +27,7 @@
#include <string.h>
#include "bta_hf_client_api.h"
#include "bta_hf_client_int.h"
+#include "osi/include/compat.h"
/*****************************************************************************
** Constants and data types
diff --git a/btif/src/btif_config.c b/btif/src/btif_config.c
index 3c5e1c4..8679e3c 100644
--- a/btif/src/btif_config.c
+++ b/btif/src/btif_config.c
@@ -29,6 +29,7 @@
#include "btif_config.h"
#include "btif_config_transcode.h"
#include "btif_util.h"
+#include "osi/include/compat.h"
#include "osi/include/config.h"
#include "btcore/include/module.h"
#include "osi/include/osi.h"
diff --git a/btif/src/btif_sock_rfc.c b/btif/src/btif_sock_rfc.c
index b2b1eb1..0ece691 100644
--- a/btif/src/btif_sock_rfc.c
+++ b/btif/src/btif_sock_rfc.c
@@ -42,6 +42,7 @@
#include "btu.h"
#include "gki.h"
#include "hcimsgs.h"
+#include "osi/include/compat.h"
#include "osi/include/list.h"
#include "osi/include/osi.h"
#include "osi/include/log.h"
diff --git a/btif/src/btif_storage.c b/btif/src/btif_storage.c
index c8e5264..56b8f5a 100644
--- a/btif/src/btif_storage.c
+++ b/btif/src/btif_storage.c
@@ -42,6 +42,7 @@
#include "btif_storage.h"
#include "btif_util.h"
#include "btcore/include/bdaddr.h"
+#include "osi/include/compat.h"
#include "osi/include/config.h"
#include "gki.h"
#include "osi/include/osi.h"
diff --git a/main/bte_conf.c b/main/bte_conf.c
index 75738e1..2bf61da 100644
--- a/main/bte_conf.c
+++ b/main/bte_conf.c
@@ -23,6 +23,7 @@
#include <string.h>
#include "bta_api.h"
+#include "osi/include/compat.h"
#include "osi/include/config.h"
#include "osi/include/log.h"
diff --git a/osi/include/compat.h b/osi/include/compat.h
new file mode 100644
index 0000000..02e13e3
--- /dev/null
+++ b/osi/include/compat.h
@@ -0,0 +1,35 @@
+/******************************************************************************
+ *
+ * Copyright 2015 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#pragma once
+
+#include <features.h>
+#include <sys/types.h>
+
+#if __GLIBC__
+
+/* Get thread identification. */
+pid_t gettid(void);
+
+/* Copy src to string dst of size siz. */
+size_t strlcpy(char *dst, const char *src, size_t siz);
+
+/* Appends src to string dst of size siz. */
+size_t strlcat(char *dst, const char *src, size_t siz);
+
+#endif
diff --git a/osi/src/compat.c b/osi/src/compat.c
new file mode 100644
index 0000000..ea26c18
--- /dev/null
+++ b/osi/src/compat.c
@@ -0,0 +1,131 @@
+/******************************************************************************
+ *
+ * Copyright 2015 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+/************************************************************************************
+ *
+ * Filename: compat.c
+ *
+ * Description: Compatibility functions for non-bionic C libraries
+ *
+ *
+ ***********************************************************************************/
+
+#include <features.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include "osi/include/compat.h"
+
+#if __GLIBC__
+pid_t
+gettid(void)
+{
+ return syscall(SYS_gettid);
+}
+#endif
+
+/* These functions from bionic
+ *
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#if __GLIBC__
+/*
+ * Copy src to string dst of size siz. At most siz-1 characters
+ * will be copied. Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
+ */
+size_t
+strlcpy(char *dst, const char *src, size_t siz)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = siz;
+
+ /* Copy as many bytes as will fit */
+ if (n != 0) {
+ while (--n != 0) {
+ if ((*d++ = *s++) == '\0')
+ break;
+ }
+ }
+
+ /* Not enough room in dst, add NUL and traverse rest of src */
+ if (n == 0) {
+ if (siz != 0)
+ *d = '\0'; /* NUL-terminate dst */
+ while (*s++)
+ ;
+ }
+
+ return(s - src - 1); /* count does not include NUL */
+}
+#endif
+
+#if __GLIBC__
+/*
+ * Appends src to string dst of size siz (unlike strncat, siz is the
+ * full size of dst, not space left). At most siz-1 characters
+ * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
+ * Returns strlen(src) + MIN(siz, strlen(initial dst)).
+ * If retval >= siz, truncation occurred.
+ */
+size_t
+strlcat(char *dst, const char *src, size_t siz)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = siz;
+ size_t dlen;
+
+ /* Find the end of dst and adjust bytes left but don't go past end */
+ while (n-- != 0 && *d != '\0')
+ d++;
+ dlen = d - dst;
+ n = siz - dlen;
+
+ if (n == 0)
+ return (dlen + strlen(s));
+
+ while (*s != '\0') {
+ if (n != 1) {
+ *d++ = *s;
+ n--;
+ }
+
+ s++;
+ }
+
+ *d = '\0';
+
+ return (dlen + (s - src)); /* count does not include NUL */
+}
+#endif
diff --git a/osi/src/thread.c b/osi/src/thread.c
index 1380755..524b28d 100644
--- a/osi/src/thread.c
+++ b/osi/src/thread.c
@@ -26,6 +26,7 @@
#include <sys/types.h>
#include "osi/include/allocator.h"
+#include "osi/include/compat.h"
#include "osi/include/fixed_queue.h"
#include "osi/include/log.h"
#include "osi/include/reactor.h"
diff --git a/utils/src/bt_utils.c b/utils/src/bt_utils.c
index 1d1dcdd..53a53de 100644
--- a/utils/src/bt_utils.c
+++ b/utils/src/bt_utils.c
@@ -40,6 +40,7 @@
#include "bt_types.h"
#include "bt_utils.h"
#include "btcore/include/module.h"
+#include "osi/include/compat.h"
#include "osi/include/log.h"
/*******************************************************************************