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