X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Ffs-src%2Fdata-stream-file.c;h=30da41a140fca4ee278dc5cfdd63f7d6f1c8b675;hb=ebe4c684d397992e70455847890cc2fe13d2b79d;hp=1dacf230e5913e58a1d01881f569d81fd49778a1;hpb=4bbea805f414decb600f6335b3645021ada30cd2;p=babeltrace.git diff --git a/src/plugins/ctf/fs-src/data-stream-file.c b/src/plugins/ctf/fs-src/data-stream-file.c index 1dacf230..30da41a1 100644 --- a/src/plugins/ctf/fs-src/data-stream-file.c +++ b/src/plugins/ctf/fs-src/data-stream-file.c @@ -52,15 +52,17 @@ size_t remaining_mmap_bytes(struct ctf_fs_ds_file *ds_file) } static -int ds_file_munmap(struct ctf_fs_ds_file *ds_file) +enum ctf_msg_iter_medium_status ds_file_munmap( + struct ctf_fs_ds_file *ds_file) { - int ret = 0; + enum ctf_msg_iter_medium_status status; bt_self_component *self_comp = ds_file->self_comp; bt_logging_level log_level = ds_file->log_level; BT_ASSERT(ds_file); if (!ds_file->mmap_addr) { + status = CTF_MSG_ITER_MEDIUM_STATUS_OK; goto end; } @@ -70,29 +72,30 @@ int ds_file_munmap(struct ctf_fs_ds_file *ds_file) ds_file->mmap_addr, ds_file->mmap_len, ds_file->file ? ds_file->file->path->str : "NULL", ds_file->file ? ds_file->file->fp : NULL); - ret = -1; + status = CTF_MSG_ITER_MEDIUM_STATUS_ERROR; goto end; } ds_file->mmap_addr = NULL; + status = CTF_MSG_ITER_MEDIUM_STATUS_OK; end: - return ret; + return status; } static enum ctf_msg_iter_medium_status ds_file_mmap_next( struct ctf_fs_ds_file *ds_file) { - enum ctf_msg_iter_medium_status ret = - CTF_MSG_ITER_MEDIUM_STATUS_OK; + enum ctf_msg_iter_medium_status status; bt_self_component *self_comp = ds_file->self_comp; bt_logging_level log_level = ds_file->log_level; /* Unmap old region */ if (ds_file->mmap_addr) { - if (ds_file_munmap(ds_file)) { - goto error; + status = ds_file_munmap(ds_file); + if (status != CTF_MSG_ITER_MEDIUM_STATUS_OK) { + goto end; } /* @@ -107,7 +110,7 @@ enum ctf_msg_iter_medium_status ds_file_mmap_next( ds_file->mmap_len = MIN(ds_file->file->size - ds_file->mmap_offset_in_file, ds_file->mmap_max_len); if (ds_file->mmap_len == 0) { - ret = CTF_MSG_ITER_MEDIUM_STATUS_EOF; + status = CTF_MSG_ITER_MEDIUM_STATUS_EOF; goto end; } /* Map new region */ @@ -120,15 +123,13 @@ enum ctf_msg_iter_medium_status ds_file_mmap_next( ds_file->mmap_len, ds_file->file->path->str, ds_file->file->fp, (intmax_t) ds_file->mmap_offset_in_file, strerror(errno)); - goto error; + status = CTF_MSG_ITER_MEDIUM_STATUS_ERROR; + goto end; } - goto end; -error: - ds_file_munmap(ds_file); - ret = CTF_MSG_ITER_MEDIUM_STATUS_ERROR; + status = CTF_MSG_ITER_MEDIUM_STATUS_OK; end: - return ret; + return status; } static @@ -212,24 +213,16 @@ end: } static -enum ctf_msg_iter_medium_status medop_seek(enum ctf_msg_iter_seek_whence whence, - off_t offset, void *data) +enum ctf_msg_iter_medium_status medop_seek(off_t offset, void *data) { - enum ctf_msg_iter_medium_status ret = - CTF_MSG_ITER_MEDIUM_STATUS_OK; + enum ctf_msg_iter_medium_status status; struct ctf_fs_ds_file *ds_file = data; off_t offset_in_mapping, file_size = ds_file->file->size; bt_self_component *self_comp = ds_file->self_comp; bt_logging_level log_level = ds_file->log_level; - if (whence != CTF_MSG_ITER_SEEK_WHENCE_SET || - offset < 0 || offset > file_size) { - BT_COMP_LOGE("Invalid medium seek request: whence=%d, offset=%jd, " - "file-size=%jd", (int) whence, (intmax_t) offset, - (intmax_t) file_size); - ret = CTF_MSG_ITER_MEDIUM_STATUS_INVAL; - goto end; - } + BT_ASSERT(offset >= 0); + BT_ASSERT(offset < file_size); /* If there is no current mapping, map the right file directly. */ if (!ds_file->mmap_addr) { @@ -242,14 +235,12 @@ enum ctf_msg_iter_medium_status medop_seek(enum ctf_msg_iter_seek_whence whence, */ if (offset < ds_file->mmap_offset_in_file || offset >= ds_file->mmap_offset_in_file + ds_file->mmap_len) { - int unmap_ret; BT_COMP_LOGD("Medium seek request cannot be accomodated by the current " "file mapping: offset=%jd, mmap-offset=%jd, " "mmap-len=%zu", (intmax_t) offset, (intmax_t) ds_file->mmap_offset_in_file, ds_file->mmap_len); - unmap_ret = ds_file_munmap(ds_file); - if (unmap_ret) { - ret = CTF_MSG_ITER_MEDIUM_STATUS_ERROR; + status = ds_file_munmap(ds_file); + if (status != CTF_MSG_ITER_MEDIUM_STATUS_OK) { goto end; } goto map_requested_offset; @@ -264,15 +255,17 @@ map_requested_offset: ds_file->mmap_offset_in_file = offset - offset_in_mapping; ds_file->request_offset_in_mapping = offset_in_mapping; - ret = ds_file_mmap_next(ds_file); - if (ret != CTF_MSG_ITER_MEDIUM_STATUS_OK) { + status = ds_file_mmap_next(ds_file); + if (status != CTF_MSG_ITER_MEDIUM_STATUS_OK) { goto end; } test_end: ds_file->end_reached = (offset == file_size); + + status = CTF_MSG_ITER_MEDIUM_STATUS_OK; end: - return ret; + return status; } BT_HIDDEN