16d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn/* 26d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * Copyright (C) 2016 The Android Open Source Project 36d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * 46d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * Licensed under the Apache License, Version 2.0 (the "License"); 56d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * you may not use this file except in compliance with the License. 66d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * You may obtain a copy of the License at 76d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * 86d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * http://www.apache.org/licenses/LICENSE-2.0 96d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * 106d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * Unless required by applicable law or agreed to in writing, software 116d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * distributed under the License is distributed on an "AS IS" BASIS, 126d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * See the License for the specific language governing permissions and 146d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * limitations under the License. 156d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn */ 166d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn 17facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#ifndef _LIBLOG_PORTABILITY_H__ 18facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#define _LIBLOG_PORTABILITY_H__ 196d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn 206d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#include <sys/cdefs.h> 21facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#include <unistd.h> 22facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn 23facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn/* Helpful private sys/cdefs.h like definitions */ 246d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn 256d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn/* Declare this library function hidden and internal */ 266d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#if defined(_WIN32) 276d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#define LIBLOG_HIDDEN 286d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#else 296d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#define LIBLOG_HIDDEN __attribute__((visibility("hidden"))) 306d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#endif 316d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn 326d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn/* Declare this library function visible and external */ 336d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#if defined(_WIN32) 346d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#define LIBLOG_ABI_PUBLIC 356d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#else 366d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#define LIBLOG_ABI_PUBLIC __attribute__((visibility("default"))) 376d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#endif 386d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn 396d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn/* Declare this library function visible but private */ 406d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#define LIBLOG_ABI_PRIVATE LIBLOG_ABI_PUBLIC 416d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn 426d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn/* 436d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * Declare this library function as reimplementation. 446d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn * Prevent circular dependencies, but allow _real_ library to hijack 456d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn */ 466d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#if defined(_WIN32) 476d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#define LIBLOG_WEAK static /* Accept that it is totally private */ 486d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#else 492ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define LIBLOG_WEAK __attribute__((weak, visibility("default"))) 506d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#endif 516d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn 52facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn/* possible missing definitions in sys/cdefs.h */ 53facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn 54facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn/* DECLS */ 55facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#ifndef __BEGIN_DECLS 56facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#if defined(__cplusplus) 572ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define __BEGIN_DECLS extern "C" { 582ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define __END_DECLS } 59facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#else 60facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#define __BEGIN_DECLS 61facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#define __END_DECLS 62facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#endif 63facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#endif 64facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn 656d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn/* Unused argument. For C code only, remove symbol name for C++ */ 666d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#ifndef __unused 672ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define __unused __attribute__((__unused__)) 686d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn#endif 696d753faaf8694792433eb78c5c3572efd74a3d54Mark Salyzyn 70facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn/* possible missing definitions in unistd.h */ 71facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn 72facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#ifndef TEMP_FAILURE_RETRY 73facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn/* Used to retry syscalls that can return EINTR. */ 742ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define TEMP_FAILURE_RETRY(exp) \ 752ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn ({ \ 76facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn __typeof__(exp) _rc; \ 77facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn do { \ 782ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn _rc = (exp); \ 79facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn } while (_rc == -1 && errno == EINTR); \ 802ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn _rc; \ 812ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn }) 82facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#endif 83facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn 84facf94c74a2cc44f294c4789d36d5c7281c7bc3fMark Salyzyn#endif /* _LIBLOG_PORTABILITY_H__ */ 85