sysdeps.h revision 8cf0d59f61ae0b8554ecf3fe051850508b761b79
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 "\\" 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef CRITICAL_SECTION adb_mutex_t; 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ADB_MUTEX_DEFINE(x) adb_mutex_t x 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* declare all mutexes */ 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ADB_MUTEX(x) extern adb_mutex_t x; 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "mutex_list.h" 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern void adb_sysdeps_init(void); 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_mutex_lock( adb_mutex_t* lock ) 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project EnterCriticalSection( lock ); 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_mutex_unlock( adb_mutex_t* lock ) 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project LeaveCriticalSection( lock ); 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct { unsigned tid; } adb_thread_t; 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void* (*adb_thread_func_t)(void* arg); 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void (*win_thread_func_t)(void* arg); 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_thread_create( adb_thread_t *thread, adb_thread_func_t func, void* arg) 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 70f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner thread->tid = _beginthread( (win_thread_func_t)func, 0, arg ); 71f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner if (thread->tid == (unsigned)-1L) { 72f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return -1; 73f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner } 74f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return 0; 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void close_on_exec(int fd) 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 79f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner /* nothing really */ 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern void disable_tcp_nagle(int fd); 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define lstat stat /* no symlinks on Win32 */ 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define S_ISLNK(m) 0 /* no symlinks on Win32 */ 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_unlink(const char* path) 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int rc = unlink(path); 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (rc == -1 && errno == EACCES) { 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* unlink returns EACCES when the file is read-only, so we first */ 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* try to make it writable, then unlink again... */ 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rc = chmod(path, _S_IREAD|_S_IWRITE ); 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (rc == 0) 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rc = unlink(path); 98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return rc; 100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef unlink 102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unlink ___xxx_unlink 103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_mkdir(const char* path, int mode) 105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return _mkdir(path); 107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef mkdir 109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define mkdir ___xxx_mkdir 110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_open(const char* path, int options); 112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_creat(const char* path, int mode); 113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_read(int fd, void* buf, int len); 114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_write(int fd, const void* buf, int len); 115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_lseek(int fd, int pos, int where); 1168cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwoodextern int adb_shutdown(int fd); 117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_close(int fd); 118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_close(int fd) 120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return close(fd); 122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef close 124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define close ____xxx_close 125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_read(int fd, void* buf, size_t len) 127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return read(fd, buf, len); 129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef read 131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define read ___xxx_read 132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_write(int fd, const void* buf, size_t len) 134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return write(fd, buf, len); 136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef write 138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define write ___xxx_write 139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_open_mode(const char* path, int options, int mode) 141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 142f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return adb_open(path, options); 143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 144dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 145dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_open(const char* path, int options,...) 146dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 147dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ((options & O_CREAT) == 0) 148dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 149dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return open(path, options); 150dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 151dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else 152dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 153dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int mode; 154dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_list args; 155dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_start( args, options ); 156dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project mode = va_arg( args, int ); 157dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_end( args ); 158dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return open(path, options, mode); 159dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 160dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 161dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define open ___xxx_unix_open 162dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 163dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 164dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* normally provided by <cutils/misc.h> */ 165dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern void* load_file(const char* pathname, unsigned* psize); 166dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 167dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* normally provided by <cutils/sockets.h> */ 168dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int socket_loopback_client(int port, int type); 169dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int socket_network_client(const char *host, int port, int type); 170dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int socket_loopback_server(int port, int type); 171dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int socket_inaddr_any_server(int port, int type); 172dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 173414ff7d98ac8d7610a26206335954ad15f43f3acDavid 'Digit' Turner/* normally provided by "fdevent.h" */ 174dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 175dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_READ 0x0001 176dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_WRITE 0x0002 177dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_ERROR 0x0004 178dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_DONT_CLOSE 0x0080 179dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 180dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct fdevent fdevent; 181dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 182dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void (*fd_func)(int fd, unsigned events, void *userdata); 183dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 184dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectfdevent *fdevent_create(int fd, fd_func func, void *arg); 185dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_destroy(fdevent *fde); 186dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_install(fdevent *fde, int fd, fd_func func, void *arg); 187dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_remove(fdevent *item); 188dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_set(fdevent *fde, unsigned events); 189dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_add(fdevent *fde, unsigned events); 190dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_del(fdevent *fde, unsigned events); 191dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_loop(); 192dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 193dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct fdevent { 194dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fdevent *next; 195dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fdevent *prev; 196dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 197dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd; 198dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned short state; 199dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned short events; 200dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 201dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fd_func func; 202dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project void *arg; 203dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 204dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 205dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_sleep_ms( int mseconds ) 206dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 207f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner Sleep( mseconds ); 208dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 209dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 210dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_socket_accept(int serverfd, struct sockaddr* addr, socklen_t *addrlen); 211dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 212dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef accept 213dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define accept ___xxx_accept 214dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 215dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_socket_setbufsize( int fd, int bufsize ) 216dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 217dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int opt = bufsize; 218dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (const char*)&opt, sizeof(opt)); 219dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 220dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 221dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int adb_socketpair( int sv[2] ); 222dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 223dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ char* adb_dirstart( const char* path ) 224dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 225dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char* p = strchr(path, '/'); 226dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char* p2 = strchr(path, '\\'); 227dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 228dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ( !p ) 229dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project p = p2; 230dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else if ( p2 && p2 > p ) 231dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project p = p2; 232dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 233dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return p; 234dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 235dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 236dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ char* adb_dirstop( const char* path ) 237dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 238dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char* p = strrchr(path, '/'); 239dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char* p2 = strrchr(path, '\\'); 240dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 241dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ( !p ) 242dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project p = p2; 243dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else if ( p2 && p2 > p ) 244dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project p = p2; 245dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 246dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return p; 247dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 248dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 249dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_is_absolute_host_path( const char* path ) 250dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 251dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return isalpha(path[0]) && path[1] == ':' && path[2] == '\\'; 252dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 253dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 254dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#else /* !_WIN32 a.k.a. Unix */ 255dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 256414ff7d98ac8d7610a26206335954ad15f43f3acDavid 'Digit' Turner#include "fdevent.h" 257dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/sockets.h> 258dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/properties.h> 259dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/misc.h> 260dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <signal.h> 261dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/wait.h> 262dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/stat.h> 263dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <fcntl.h> 264dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 265dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <pthread.h> 266dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <unistd.h> 267dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <fcntl.h> 268dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdarg.h> 269dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <netinet/in.h> 270dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <netinet/tcp.h> 271dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <string.h> 272dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 273dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define OS_PATH_SEPARATOR '/' 274dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define OS_PATH_SEPARATOR_STR "/" 275dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 276dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef pthread_mutex_t adb_mutex_t; 277dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ADB_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER 278dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_mutex_init pthread_mutex_init 279dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_mutex_lock pthread_mutex_lock 280dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_mutex_unlock pthread_mutex_unlock 281dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_mutex_destroy pthread_mutex_destroy 282dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 283dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ADB_MUTEX_DEFINE(m) static adb_mutex_t m = PTHREAD_MUTEX_INITIALIZER 284dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 285dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_t pthread_cond_t 286dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_init pthread_cond_init 287dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_wait pthread_cond_wait 288dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_broadcast pthread_cond_broadcast 289dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_signal pthread_cond_signal 290dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define adb_cond_destroy pthread_cond_destroy 291dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 292dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void close_on_exec(int fd) 293dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 294f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner fcntl( fd, F_SETFD, FD_CLOEXEC ); 295dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 296dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 297dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_open(const char* path, int options,...) 298dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 299dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ((options & O_CREAT) == 0) 300dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 301dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return open(path, options); 302dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 303dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project else 304dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 305dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int mode; 306dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_list args; 307dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_start( args, options ); 308dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project mode = va_arg( args, int ); 309dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project va_end( args ); 310dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return open(path, options, mode); 311dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 312dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 313dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 314dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_open_mode( const char* pathname, int options, int mode ) 315dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 316f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return open( pathname, options, mode ); 317dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 318dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 319dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 320dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_open( const char* pathname, int options ) 321dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 322dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd = open( pathname, options ); 323dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (fd < 0) 324dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return -1; 325dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close_on_exec( fd ); 326dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return fd; 327dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 328dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef open 329dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define open ___xxx_open 330dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 3318cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwoodstatic __inline__ int adb_shutdown(int fd) 3328cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood{ 3338cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood return shutdown(fd, SHUT_RDWR); 3348cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood} 3358cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood#undef shutdown 3368cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood#define shutdown ____xxx_shutdown 3378cf0d59f61ae0b8554ecf3fe051850508b761b79Mike Lockwood 338dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_close(int fd) 339dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 340dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return close(fd); 341dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 342dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef close 343dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define close ____xxx_close 344dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 345dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 346dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_read(int fd, void* buf, size_t len) 347dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 348dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return read(fd, buf, len); 349dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 350dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 351dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef read 352dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define read ___xxx_read 353dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 354dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_write(int fd, const void* buf, size_t len) 355dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 356dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return write(fd, buf, len); 357dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 358dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef write 359dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define write ___xxx_write 360dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 361dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_lseek(int fd, int pos, int where) 362dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 363dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return lseek(fd, pos, where); 364dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 365dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef lseek 366dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define lseek ___xxx_lseek 367dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 368dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_unlink(const char* path) 369dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 370dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return unlink(path); 371dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 372dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef unlink 373dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unlink ___xxx_unlink 374dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 375dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_creat(const char* path, int mode) 376dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 377dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd = creat(path, mode); 378dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 379f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner if ( fd < 0 ) 380f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return -1; 381dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 382dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close_on_exec(fd); 383f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return fd; 384dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 385dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef creat 386dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define creat ___xxx_creat 387dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 388dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_socket_accept(int serverfd, struct sockaddr* addr, socklen_t *addrlen) 389dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 390dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return accept( serverfd, addr, addrlen ); 391dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 392dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 393dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef accept 394dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define accept ___xxx_accept 395dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 396dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unix_read adb_read 397dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unix_write adb_write 398dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define unix_close adb_close 399dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 400dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef pthread_t adb_thread_t; 401dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 402dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void* (*adb_thread_func_t)( void* arg ); 403dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 404dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_thread_create( adb_thread_t *pthread, adb_thread_func_t start, void* arg ) 405dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 406dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pthread_attr_t attr; 407dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 408dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pthread_attr_init (&attr); 409dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); 410dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 411dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return pthread_create( pthread, &attr, start, arg ); 412dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 413dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 414dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_socket_setbufsize( int fd, int bufsize ) 415dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 416dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int opt = bufsize; 417dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt)); 418dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 419dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 420dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void disable_tcp_nagle(int fd) 421dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 422dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int on = 1; 423dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project setsockopt( fd, IPPROTO_TCP, TCP_NODELAY, (void*)&on, sizeof(on) ); 424dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 425dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 426dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 427dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int unix_socketpair( int d, int type, int protocol, int sv[2] ) 428dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 429dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return socketpair( d, type, protocol, sv ); 430dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 431dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 432dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_socketpair( int sv[2] ) 433dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 434dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int rc; 435dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 436dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rc = unix_socketpair( AF_UNIX, SOCK_STREAM, 0, sv ); 437dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (rc < 0) 438dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return -1; 439dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 440dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close_on_exec( sv[0] ); 441dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close_on_exec( sv[1] ); 442dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 443dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 444dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 445dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef socketpair 446dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define socketpair ___xxx_socketpair 447dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 448dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_sleep_ms( int mseconds ) 449dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 450f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner usleep( mseconds*1000 ); 451dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 452dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 453dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_mkdir(const char* path, int mode) 454dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 455f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner return mkdir(path, mode); 456dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 457dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#undef mkdir 458dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define mkdir ___xxx_mkdir 459dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 460dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ void adb_sysdeps_init(void) 461dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 462dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 463dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 464dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ char* adb_dirstart(const char* path) 465dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 466dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return strchr(path, '/'); 467dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 468dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 469dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ char* adb_dirstop(const char* path) 470dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 471dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return strrchr(path, '/'); 472dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 473dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 474dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic __inline__ int adb_is_absolute_host_path( const char* path ) 475dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 476dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return path[0] == '/'; 477dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 478dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 479dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif /* !_WIN32 */ 480dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 481dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif /* _ADB_SYSDEPS_H */ 482