int open_cb(eio_req *req) { eio_test(); printf("open_cb = %d\n", EIO_RESULT(req)); last_fd = EIO_RESULT(req); return 0; }
int stat_cb (eio_req *req) { struct stat *buf = EIO_STAT_BUF (req); if (req->type == EIO_FSTAT) printf ("fstat_cb = %d\n", EIO_RESULT (req)); else printf ("stat_cb(%s) = %d\n", EIO_PATH (req), EIO_RESULT (req)); if (!EIO_RESULT (req)) printf ("stat size %d perm 0%o\n", buf->st_size, buf->st_mode & 0777); return 0; }
int readdir_cb(eio_req *req) { eio_test(); char *buf = (char *)EIO_BUF(req); printf("readdir_cb = %d\n", EIO_RESULT(req)); if(EIO_RESULT(req) < 0) { return 0; } while(EIO_RESULT(req)--) { printf("readdir = <%s>\n", buf); buf += strlen(buf) + 1; } return 0; }
int res_cb (eio_req *req) { printf ("res_cb(%d|%s) = %d\n", req->type, req->data ? req->data : "?", EIO_RESULT (req)); if (req->result < 0) abort (); return 0; }
int read_cb(eio_req *req) { eio_test(); unsigned char *buf = (unsigned char *)EIO_BUF(req); printf("read_cb = %d (%02x%02x%02x%02x %02x%02x%02x%02x)\n", EIO_RESULT(req), buf [0], buf [1], buf [2], buf [3], buf [4], buf [5], buf [6], buf [7]); return 0; }
static int sendfile_open_cb (eio_req *req) { callback_data_t *data = (callback_data_t *) req->data; data->fd = EIO_RESULT (req); if (data->flags & SEND_LENGTH) eio_fstat (data->fd, 0, sendfile_stat_cb, data); else eio_sendfile (data->socket, data->fd, 0, data->length, 0, sendfile_complete_cb, data); return 0; }
int readdir_cb (eio_req *req) { if (EIO_RESULT (req) < 0) return 0; struct eio_dirent *ents = (struct eio_dirent *)req->ptr1; if ( ents->type != EIO_DT_DIR ) { struct stat leaf_st ; lstat(req->data, &leaf_st); if (!later_than(now, leaf_st.st_ctimespec)) { return 0; } } char *names = (char *)req->ptr2; if ( freelist ) { freelist = realloc(freelist, (req->result + freelist_len) * sizeof(char*)); } else { freelist = calloc(req->result, sizeof(char*)); } int i; for (i = 0; i < req->result; ++i) { struct eio_dirent *ent = ents + i; char *name = names + ent->nameofs; freelist[freelist_len + i] = 0; snprintf(pwd, MAXPATHLEN, "%s/%s", (char*)req->data, name); struct stat st; lstat(pwd, &st); if ( ent->type == EIO_DT_DIR) { eio_readdir_r(pwd, EIO_READDIR_DENTS|EIO_READDIR_DIRS_FIRST, 0, readdir_cb, freelist_len + i); } if (later_than(now, st.st_ctimespec)) { printf ("ls -l %s/%s\n", (char*)req->data, name); } } freelist_len += req->result; return 0; }