コード例 #1
0
ファイル: fs.c プロジェクト: 0359xiaodong/fb-adb
static void
xfd_op_1(void* data)
{
    struct xfd_op_ctx* ctx = data;
    ssize_t ret;

    if (ctx->op == XFD_OP_READ) {
        do {
            WITH_IO_SIGNALS_ALLOWED();
            ret = read(ctx->fd, ctx->buf, ctx->size);
        } while (ret == -1 && errno == EINTR);
        if (ret == -1)
            die_errno("read(%d)", ctx->fd);
    } else {
        assert(ctx->op == XFD_OP_WRITE);
        do {
            WITH_IO_SIGNALS_ALLOWED();
            ret = write(ctx->fd, ctx->buf, ctx->size);
        } while (ret == -1 && errno == EINTR);
        if (ret == -1)
            die_errno("write(%d)", ctx->fd);
    }

    ctx->result = ret;
}
コード例 #2
0
ファイル: adbenc.c プロジェクト: Learn-Android-app/fb-adb
size_t
read_all_adb_encoded(int fd, void* buf, size_t sz)
{
    char encbuf[4096];
    unsigned state = 0;
    char* dec = buf;
    char* decend = dec + sz;
    ssize_t ret;
    size_t nr_read = 0;

    while (nr_read < sz) {
        do {
            WITH_IO_SIGNALS_ALLOWED();
            ret = read(fd, encbuf, XMIN(sz - nr_read, sizeof (encbuf)));
        } while (ret == -1 && errno == EINTR);

        if (ret < 0)
            die_errno("read[adbenc]");

        if (ret < 1)
            break;

        const char* in = encbuf;
        const char* inend = encbuf + ret;
        char* cur_dec = dec;
        adb_decode(&state, &dec, decend, &in, inend);
        nr_read += dec - cur_dec;
    }

    return nr_read;
}
コード例 #3
0
ファイル: fs.c プロジェクト: 0359xiaodong/fb-adb
int
xpoll(struct pollfd* fds, nfds_t nfds, int timeout)
{
    WITH_IO_SIGNALS_ALLOWED();
    int pollret;
    do {
        pollret = poll(fds, nfds, timeout);
    } while (pollret == -1 && errno == EINTR);

    return pollret;
}
コード例 #4
0
ファイル: dbg.c プロジェクト: neilalfa/fb-adb
void
dbglock(void)
{
    int saved_errno = errno;
    if (!dbg_enabled_p())
        return;

    if (dbglock_fd == -1)
        return;

    if (dbglock_level++ == 0) {
        WITH_IO_SIGNALS_ALLOWED();
        flock(dbglock_fd, LOCK_EX);
    }

    cleanup_commit(cleanup_allocate(), cleanup_dbglock, 0);
    errno = saved_errno;
}
コード例 #5
0
ファイル: fs.c プロジェクト: 0359xiaodong/fb-adb
void
write_all(int fd, const void* buf, size_t sz)
{
    size_t nr_written = 0;
    int ret;
    const char* pos = buf;

    while (nr_written < sz) {
        do {
            WITH_IO_SIGNALS_ALLOWED();
            ret = write(fd, &pos[nr_written], sz - nr_written);
        } while (ret == -1 && errno == EINTR);

        if (ret < 0)
            die_errno("write(%d)", fd);

        nr_written += ret;
    }
}
コード例 #6
0
ファイル: fs.c プロジェクト: 0359xiaodong/fb-adb
size_t
read_all(int fd, void* buf, size_t sz)
{
    size_t nr_read = 0;
    int ret;
    char* pos = buf;

    while (nr_read < sz) {
        do {
            WITH_IO_SIGNALS_ALLOWED();
            ret = read(fd, &pos[nr_read], sz - nr_read);
        } while (ret == -1 && errno == EINTR);

        if (ret < 0)
            die_errno("read(%d)", fd);

        if (ret < 1)
            break;

        nr_read += ret;
    }

    return nr_read;
}