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