118092ddc866425598abf4521d9ed4eda9573fdaaKenny Root/* 218092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * Copyright (C) 2010 The Android Open Source Project 318092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * 418092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 518092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * you may not use this file except in compliance with the License. 618092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * You may obtain a copy of the License at 718092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * 818092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * http://www.apache.org/licenses/LICENSE-2.0 918092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * 1018092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * Unless required by applicable law or agreed to in writing, software 1118092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1218092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * See the License for the specific language governing permissions and 1418092ddc866425598abf4521d9ed4eda9573fdaaKenny Root * limitations under the License. 1518092ddc866425598abf4521d9ed4eda9573fdaaKenny Root */ 1618092ddc866425598abf4521d9ed4eda9573fdaaKenny Root 1718092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#ifndef __LIB_UTILS_COMPAT_H 1818092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#define __LIB_UTILS_COMPAT_H 1918092ddc866425598abf4521d9ed4eda9573fdaaKenny Root 2018092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#include <unistd.h> 2118092ddc866425598abf4521d9ed4eda9573fdaaKenny Root 2218092ddc866425598abf4521d9ed4eda9573fdaaKenny Root/* Compatibility definitions for non-Linux (i.e., BSD-based) hosts. */ 2318092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#ifndef HAVE_OFF64_T 2418092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#if _FILE_OFFSET_BITS < 64 2518092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#error "_FILE_OFFSET_BITS < 64; large files are not supported on this platform" 2618092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#endif /* _FILE_OFFSET_BITS < 64 */ 2718092ddc866425598abf4521d9ed4eda9573fdaaKenny Root 2818092ddc866425598abf4521d9ed4eda9573fdaaKenny Roottypedef off_t off64_t; 2918092ddc866425598abf4521d9ed4eda9573fdaaKenny Root 3018092ddc866425598abf4521d9ed4eda9573fdaaKenny Rootstatic inline off64_t lseek64(int fd, off64_t offset, int whence) { 3118092ddc866425598abf4521d9ed4eda9573fdaaKenny Root return lseek(fd, offset, whence); 3218092ddc866425598abf4521d9ed4eda9573fdaaKenny Root} 3318092ddc866425598abf4521d9ed4eda9573fdaaKenny Root 3418092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#ifdef HAVE_PREAD 3518092ddc866425598abf4521d9ed4eda9573fdaaKenny Rootstatic inline ssize_t pread64(int fd, void* buf, size_t nbytes, off64_t offset) { 3618092ddc866425598abf4521d9ed4eda9573fdaaKenny Root return pread(fd, buf, nbytes, offset); 3718092ddc866425598abf4521d9ed4eda9573fdaaKenny Root} 3818092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#endif 3918092ddc866425598abf4521d9ed4eda9573fdaaKenny Root 4018092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#endif /* !HAVE_OFF64_T */ 4118092ddc866425598abf4521d9ed4eda9573fdaaKenny Root 42d611117f246213ee4bb183a3015c1fd79593074bKenny Root#if HAVE_PRINTF_ZD 43d611117f246213ee4bb183a3015c1fd79593074bKenny Root# define ZD "%zd" 44d611117f246213ee4bb183a3015c1fd79593074bKenny Root# define ZD_TYPE ssize_t 45d611117f246213ee4bb183a3015c1fd79593074bKenny Root#else 46d611117f246213ee4bb183a3015c1fd79593074bKenny Root# define ZD "%ld" 47d611117f246213ee4bb183a3015c1fd79593074bKenny Root# define ZD_TYPE long 48d611117f246213ee4bb183a3015c1fd79593074bKenny Root#endif 49d611117f246213ee4bb183a3015c1fd79593074bKenny Root 50d611117f246213ee4bb183a3015c1fd79593074bKenny Root/* 51d611117f246213ee4bb183a3015c1fd79593074bKenny Root * TEMP_FAILURE_RETRY is defined by some, but not all, versions of 52d611117f246213ee4bb183a3015c1fd79593074bKenny Root * <unistd.h>. (Alas, it is not as standard as we'd hoped!) So, if it's 53d611117f246213ee4bb183a3015c1fd79593074bKenny Root * not already defined, then define it here. 54d611117f246213ee4bb183a3015c1fd79593074bKenny Root */ 55d611117f246213ee4bb183a3015c1fd79593074bKenny Root#ifndef TEMP_FAILURE_RETRY 56d611117f246213ee4bb183a3015c1fd79593074bKenny Root/* Used to retry syscalls that can return EINTR. */ 57d611117f246213ee4bb183a3015c1fd79593074bKenny Root#define TEMP_FAILURE_RETRY(exp) ({ \ 58d611117f246213ee4bb183a3015c1fd79593074bKenny Root typeof (exp) _rc; \ 59d611117f246213ee4bb183a3015c1fd79593074bKenny Root do { \ 60d611117f246213ee4bb183a3015c1fd79593074bKenny Root _rc = (exp); \ 61d611117f246213ee4bb183a3015c1fd79593074bKenny Root } while (_rc == -1 && errno == EINTR); \ 62d611117f246213ee4bb183a3015c1fd79593074bKenny Root _rc; }) 63d611117f246213ee4bb183a3015c1fd79593074bKenny Root#endif 64d611117f246213ee4bb183a3015c1fd79593074bKenny Root 6518092ddc866425598abf4521d9ed4eda9573fdaaKenny Root#endif /* __LIB_UTILS_COMPAT_H */ 66