1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ADB_IO_H 18 #define ADB_IO_H 19 20 #include <sys/types.h> 21 22 #include <string> 23 24 // Sends the protocol "OKAY" message. 25 bool SendOkay(int fd); 26 27 // Sends the protocol "FAIL" message, with the given failure reason. 28 bool SendFail(int fd, const std::string& reason); 29 30 // Writes a protocol-format string; a four hex digit length followed by the string data. 31 bool SendProtocolString(int fd, const std::string& s); 32 33 /* 34 * Reads exactly len bytes from fd into buf. 35 * 36 * Returns false if there is an error or if EOF was reached before len bytes 37 * were read. If EOF was found, errno will be set to 0. 38 * 39 * If this function fails, the contents of buf are undefined. 40 */ 41 bool ReadFdExactly(int fd, void *buf, size_t len); 42 43 /* 44 * Writes exactly len bytes from buf to fd. 45 * 46 * Returns false if there is an error or if the fd was closed before the write 47 * completed. If the other end of the fd (such as in a socket, pipe, or fifo), 48 * is closed, errno will be set to 0. 49 */ 50 bool WriteFdExactly(int fd, const void* buf, size_t len); 51 52 // Same as above, but for strings. 53 bool WriteFdExactly(int fd, const char* s); 54 bool WriteFdExactly(int fd, const std::string& s); 55 56 // Same as above, but formats the string to send. 57 bool WriteFdFmt(int fd, const char* fmt, ...) __attribute__((__format__(__printf__, 2, 3))); 58 59 #endif /* ADB_IO_H */ 60