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