sysdeps.h revision d5fcafaf41f8ec90986c813f75ec78402096af2d
1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * you may not use this file except in compliance with the License. 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * You may obtain a copy of the License at 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * See the License for the specific language governing permissions and 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * limitations under the License. 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* this file contains system-dependent definitions used by ADB 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * they're related to threads, sockets and file descriptors 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef _ADB_SYSDEPS_H 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define _ADB_SYSDEPS_H 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef __CYGWIN__ 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project# undef _WIN32 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef _WIN32 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <windows.h> 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <winsock2.h> 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <ws2tcpip.h> 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <process.h> 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <fcntl.h> 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <io.h> 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/stat.h> 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <errno.h> 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <ctype.h> 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define OS_PATH_SEPARATOR '\\' 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define OS_PATH_SEPARATOR_STR "\\" 41d5fcafaf41f8ec90986c813f75ec78402096af2dBenoit Goby#define ENV_PATH_SEPARATOR_STR ";" 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef CRITICAL_SECTION adb_mutex_t; 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ADB_MUTEX_DEFINE(x) adb_mutex_t x 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* declare all mutexes */ 48408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall/* For win32, adb_sysdeps_init() will do the mutex runtime initialization. */ 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ADB_MUTEX(x) extern adb_mutex_t x; 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "mutex_list.h" 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern void adb_sysdeps_init(void); 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_mutex_lock( adb_mutex_t* lock ) 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project EnterCriticalSection( lock ); 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_mutex_unlock( adb_mutex_t* lock ) 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project LeaveCriticalSection( lock ); 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct { unsigned tid; } adb_thread_t; 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void* (*adb_thread_func_t)(void* arg); 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void (*win_thread_func_t)(void* arg); 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_thread_create( adb_thread_t *thread, adb_thread_func_t func, void* arg) 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 72f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner thread->tid = _beginthread( (win_thread_func_t)func, 0, arg ); 73f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner if (thread->tid == (unsigned)-1L) { 74f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return -1; 75f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner } 76f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return 0; 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void close_on_exec(int fd) 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 81f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner /* nothing really */ 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern void disable_tcp_nagle(int fd); 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define lstat stat /* no symlinks on Win32 */ 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define S_ISLNK(m) 0 /* no symlinks on Win32 */ 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_unlink(const char* path) 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int rc = unlink(path); 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (rc == -1 && errno == EACCES) { 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* unlink returns EACCES when the file is read-only, so we first */ 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* try to make it writable, then unlink again... */ 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rc = chmod(path, _S_IREAD|_S_IWRITE ); 98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (rc == 0) 99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rc = unlink(path); 100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return rc; 102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef unlink 104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unlink ___xxx_unlink 105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_mkdir(const char* path, int mode) 107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 1080e7c4274c687446dbe30a814278d7a6b99da8c4eJP Abgrall return _mkdir(path); 109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef mkdir 111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define mkdir ___xxx_mkdir 112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_open(const char* path, int options); 114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_creat(const char* path, int mode); 115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_read(int fd, void* buf, int len); 116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_write(int fd, const void* buf, int len); 117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_lseek(int fd, int pos, int where); 1188cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwoodextern int adb_shutdown(int fd); 119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_close(int fd); 120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_close(int fd) 122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return close(fd); 124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef close 126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define close ____xxx_close 127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_read(int fd, void* buf, size_t len) 129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return read(fd, buf, len); 131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef read 133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define read ___xxx_read 134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_write(int fd, const void* buf, size_t len) 136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return write(fd, buf, len); 138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef write 140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define write ___xxx_write 141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 142dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_open_mode(const char* path, int options, int mode) 143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 144f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return adb_open(path, options); 145dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 146dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 147dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_open(const char* path, int options,...) 148dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 149dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ((options & O_CREAT) == 0) 150dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 151dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return open(path, options); 152dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 153dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else 154dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 155dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int mode; 156dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_list args; 157dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_start( args, options ); 158dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project mode = va_arg( args, int ); 159dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_end( args ); 160dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return open(path, options, mode); 161dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 162dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 163dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define open ___xxx_unix_open 164dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 165dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 166dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* normally provided by <cutils/misc.h> */ 167dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern void* load_file(const char* pathname, unsigned* psize); 168dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 169dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* normally provided by <cutils/sockets.h> */ 170dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int socket_loopback_client(int port, int type); 171dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int socket_network_client(const char *host, int port, int type); 172dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int socket_loopback_server(int port, int type); 173dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int socket_inaddr_any_server(int port, int type); 174dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 175414ff7d98ac8d7610a26206335954ad15f43f3acDavid 'Digit' Turner/* normally provided by "fdevent.h" */ 176dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 177dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_READ 0x0001 178dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_WRITE 0x0002 179dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_ERROR 0x0004 180dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_DONT_CLOSE 0x0080 181dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 182dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct fdevent fdevent; 183dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 184dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void (*fd_func)(int fd, unsigned events, void *userdata); 185dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 186dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectfdevent *fdevent_create(int fd, fd_func func, void *arg); 187dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_destroy(fdevent *fde); 188dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_install(fdevent *fde, int fd, fd_func func, void *arg); 189dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_remove(fdevent *item); 190dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_set(fdevent *fde, unsigned events); 191dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_add(fdevent *fde, unsigned events); 192dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_del(fdevent *fde, unsigned events); 193dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_loop(); 194dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 195dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct fdevent { 196dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fdevent *next; 197dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fdevent *prev; 198dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 199dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd; 200408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall int force_eof; 201408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall 202dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned short state; 203dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned short events; 204dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 205dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fd_func func; 206dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project void *arg; 207dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 208dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 209dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_sleep_ms( int mseconds ) 210dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 211f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner Sleep( mseconds ); 212dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 213dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 214dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_socket_accept(int serverfd, struct sockaddr* addr, socklen_t *addrlen); 215dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 216dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef accept 217dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define accept ___xxx_accept 218dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 219dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_socket_setbufsize( int fd, int bufsize ) 220dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 221dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int opt = bufsize; 222dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (const char*)&opt, sizeof(opt)); 223dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 224dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 225dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_socketpair( int sv[2] ); 226dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 227dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ char* adb_dirstart( const char* path ) 228dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 229dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char* p = strchr(path, '/'); 230dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char* p2 = strchr(path, '\\'); 231dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 232dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ( !p ) 233dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project p = p2; 234dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else if ( p2 && p2 > p ) 235dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project p = p2; 236dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 237dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return p; 238dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 239dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 240dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ char* adb_dirstop( const char* path ) 241dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 242dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char* p = strrchr(path, '/'); 243dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char* p2 = strrchr(path, '\\'); 244dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 245dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ( !p ) 246dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project p = p2; 247dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else if ( p2 && p2 > p ) 248dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project p = p2; 249dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 250dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return p; 251dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 252dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 253dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_is_absolute_host_path( const char* path ) 254dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 255dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return isalpha(path[0]) && path[1] == ':' && path[2] == '\\'; 256dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 257dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 2581b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Andersonextern char* adb_strtok_r(char *str, const char *delim, char **saveptr); 2591b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Anderson 260dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#else /* !_WIN32 a.k.a. Unix */ 261dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 262414ff7d98ac8d7610a26206335954ad15f43f3acDavid 'Digit' Turner#include "fdevent.h" 263dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/sockets.h> 264dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/properties.h> 265dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/misc.h> 266dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <signal.h> 267dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/wait.h> 268dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/stat.h> 269dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <fcntl.h> 270dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 271dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <pthread.h> 272dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <unistd.h> 273dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <fcntl.h> 274dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdarg.h> 275dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <netinet/in.h> 276dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <netinet/tcp.h> 277dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <string.h> 278dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 279dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define OS_PATH_SEPARATOR '/' 280dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define OS_PATH_SEPARATOR_STR "/" 281d5fcafaf41f8ec90986c813f75ec78402096af2dBenoit Goby#define ENV_PATH_SEPARATOR_STR ":" 282dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 283dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef pthread_mutex_t adb_mutex_t; 284408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall 285dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ADB_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER 286dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_mutex_init pthread_mutex_init 287dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_mutex_lock pthread_mutex_lock 288dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_mutex_unlock pthread_mutex_unlock 289dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_mutex_destroy pthread_mutex_destroy 290dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 291408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall#define ADB_MUTEX_DEFINE(m) adb_mutex_t m = PTHREAD_MUTEX_INITIALIZER 292dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 293dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_t pthread_cond_t 294dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_init pthread_cond_init 295dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_wait pthread_cond_wait 296dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_broadcast pthread_cond_broadcast 297dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_signal pthread_cond_signal 298dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_destroy pthread_cond_destroy 299dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 300408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall/* declare all mutexes */ 301408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall#define ADB_MUTEX(x) extern adb_mutex_t x; 302408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall#include "mutex_list.h" 303408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall 304dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void close_on_exec(int fd) 305dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 306f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner fcntl( fd, F_SETFD, FD_CLOEXEC ); 307dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 308dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 309dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_open(const char* path, int options,...) 310dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 311dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ((options & O_CREAT) == 0) 312dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 313dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return open(path, options); 314dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 315dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else 316dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 317dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int mode; 318dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_list args; 319dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_start( args, options ); 320dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project mode = va_arg( args, int ); 321dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_end( args ); 322dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return open(path, options, mode); 323dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 324dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 325dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 326dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_open_mode( const char* pathname, int options, int mode ) 327dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 328f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return open( pathname, options, mode ); 329dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 330dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 331dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 332dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_open( const char* pathname, int options ) 333dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 334dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd = open( pathname, options ); 335dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (fd < 0) 336dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return -1; 337dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close_on_exec( fd ); 338dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return fd; 339dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 340dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef open 341dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define open ___xxx_open 342dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 3438cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwoodstatic __inline__ int adb_shutdown(int fd) 3448cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood{ 3458cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood return shutdown(fd, SHUT_RDWR); 3468cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood} 3478cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood#undef shutdown 3488cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood#define shutdown ____xxx_shutdown 3498cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood 350dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_close(int fd) 351dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 352dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return close(fd); 353dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 354dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef close 355dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define close ____xxx_close 356dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 357dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 358dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_read(int fd, void* buf, size_t len) 359dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 360dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return read(fd, buf, len); 361dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 362dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 363dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef read 364dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define read ___xxx_read 365dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 366dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_write(int fd, const void* buf, size_t len) 367dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 368dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return write(fd, buf, len); 369dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 370dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef write 371dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define write ___xxx_write 372dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 373dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_lseek(int fd, int pos, int where) 374dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 375dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return lseek(fd, pos, where); 376dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 377dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef lseek 378dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define lseek ___xxx_lseek 379dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 380dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_unlink(const char* path) 381dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 382dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return unlink(path); 383dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 384dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef unlink 385dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unlink ___xxx_unlink 386dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 387dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_creat(const char* path, int mode) 388dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 389dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd = creat(path, mode); 390dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 391f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner if ( fd < 0 ) 392f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return -1; 393dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 394dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close_on_exec(fd); 395f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return fd; 396dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 397dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef creat 398dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define creat ___xxx_creat 399dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 400dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_socket_accept(int serverfd, struct sockaddr* addr, socklen_t *addrlen) 401dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 40295ef82866c7a922bf588027aa38c58a45eb84d9cBenoit Goby int fd; 40395ef82866c7a922bf588027aa38c58a45eb84d9cBenoit Goby 40495ef82866c7a922bf588027aa38c58a45eb84d9cBenoit Goby fd = accept(serverfd, addr, addrlen); 40595ef82866c7a922bf588027aa38c58a45eb84d9cBenoit Goby if (fd >= 0) 40695ef82866c7a922bf588027aa38c58a45eb84d9cBenoit Goby close_on_exec(fd); 40795ef82866c7a922bf588027aa38c58a45eb84d9cBenoit Goby 40895ef82866c7a922bf588027aa38c58a45eb84d9cBenoit Goby return fd; 409dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 410dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 411dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef accept 412dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define accept ___xxx_accept 413dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 414dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unix_read adb_read 415dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unix_write adb_write 416dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unix_close adb_close 417dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 418dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef pthread_t adb_thread_t; 419dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 420dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void* (*adb_thread_func_t)( void* arg ); 421dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 422dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_thread_create( adb_thread_t *pthread, adb_thread_func_t start, void* arg ) 423dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 424dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pthread_attr_t attr; 425dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 426dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pthread_attr_init (&attr); 427dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); 428dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 429dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return pthread_create( pthread, &attr, start, arg ); 430dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 431dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 432dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_socket_setbufsize( int fd, int bufsize ) 433dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 434dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int opt = bufsize; 435dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt)); 436dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 437dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 438dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void disable_tcp_nagle(int fd) 439dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 440dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int on = 1; 441dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project setsockopt( fd, IPPROTO_TCP, TCP_NODELAY, (void*)&on, sizeof(on) ); 442dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 443dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 444dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 445dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_socketpair( int d, int type, int protocol, int sv[2] ) 446dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 447dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return socketpair( d, type, protocol, sv ); 448dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 449dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 450dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_socketpair( int sv[2] ) 451dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 452dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int rc; 453dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 454dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rc = unix_socketpair( AF_UNIX, SOCK_STREAM, 0, sv ); 455dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (rc < 0) 456dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return -1; 457dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 458dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close_on_exec( sv[0] ); 459dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close_on_exec( sv[1] ); 460dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 461dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 462dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 463dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef socketpair 464dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define socketpair ___xxx_socketpair 465dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 466dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_sleep_ms( int mseconds ) 467dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 468f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner usleep( mseconds*1000 ); 469dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 470dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 471dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_mkdir(const char* path, int mode) 472dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 473f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return mkdir(path, mode); 474dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 475dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef mkdir 476dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define mkdir ___xxx_mkdir 477dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 478dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_sysdeps_init(void) 479dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 480dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 481dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 482dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ char* adb_dirstart(const char* path) 483dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 484dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return strchr(path, '/'); 485dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 486dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 487dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ char* adb_dirstop(const char* path) 488dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 489dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return strrchr(path, '/'); 490dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 491dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 492dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_is_absolute_host_path( const char* path ) 493dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 494dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return path[0] == '/'; 495dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 496dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 4971b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Andersonstatic __inline__ char* adb_strtok_r(char *str, const char *delim, char **saveptr) 4981b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Anderson{ 4991b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Anderson return strtok_r(str, delim, saveptr); 5001b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Anderson} 5011b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Anderson#undef strtok_r 5021b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Anderson#define strtok_r ___xxx_strtok_r 5031b7a7e81195ff06a7482f81cb92b094bb3481cb1Scott Anderson 504dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif /* !_WIN32 */ 505dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 506dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif /* _ADB_SYSDEPS_H */ 507