1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef PORTABILITY_H_included
18#define PORTABILITY_H_included
19
20#include <byteswap.h>
21#include <sys/sendfile.h>
22#include <sys/statvfs.h>
23
24#include <netdb.h>
25#if defined(__BIONIC__)
26extern "C" int android_getaddrinfofornet(const char*, const char*, const struct addrinfo*, unsigned, unsigned, struct addrinfo**);
27#else
28static inline int android_getaddrinfofornet(const char* hostname, const char* servname,
29    const struct addrinfo* hints, unsigned /*netid*/, unsigned /*mark*/, struct addrinfo** res) {
30  return getaddrinfo(hostname, servname, hints, res);
31}
32#endif
33
34#if defined(__GLIBC__) && !defined(__LP64__)
35
36#include <unistd.h>
37
38// 32 bit GLIBC hardcodes a "long int" as the return type for
39// TEMP_FAILURE_RETRY so the return value here gets truncated for
40// functions that return 64 bit types.
41#undef TEMP_FAILURE_RETRY
42#define TEMP_FAILURE_RETRY(exp) ({         \
43    __typeof__(exp) _rc;                   \
44    do {                                   \
45        _rc = (exp);                       \
46    } while (_rc == -1 && errno == EINTR); \
47    _rc; })
48
49#endif  // __GLIBC__ && !__LP64__
50
51#endif  // PORTABILITY_H_included
52