src.ctf.fs: remove ctf_fs_ds_file::end_reached field
[babeltrace.git] / src / plugins / ctf / fs-src / data-stream-file.c
index b8091f660755c6524715fc92c71ed45a09a31ac5..078e8b5fccd10d10568ddf83c19e975dbced54cc 100644 (file)
 static inline
 size_t remaining_mmap_bytes(struct ctf_fs_ds_file *ds_file)
 {
-       BT_ASSERT_DBG(ds_file->mmap_len >= ds_file->request_offset);
-       return ds_file->mmap_len - ds_file->request_offset;
+       BT_ASSERT_DBG(ds_file->mmap_len >= ds_file->request_offset_in_mapping);
+       return ds_file->mmap_len - ds_file->request_offset_in_mapping;
 }
 
 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;
 
-       if (!ds_file || !ds_file->mmap_addr) {
+       BT_ASSERT(ds_file);
+
+       if (!ds_file->mmap_addr) {
+               status = CTF_MSG_ITER_MEDIUM_STATUS_OK;
                goto end;
        }
 
@@ -68,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;
                }
 
                /*
@@ -98,35 +103,33 @@ enum ctf_msg_iter_medium_status ds_file_mmap_next(
                 * last mapping where it may not be possible (since the file's
                 * size itself may not be a page multiple).
                 */
-               ds_file->mmap_offset += ds_file->mmap_len;
-               ds_file->request_offset = 0;
+               ds_file->mmap_offset_in_file += ds_file->mmap_len;
+               ds_file->request_offset_in_mapping = 0;
        }
 
-       ds_file->mmap_len = MIN(ds_file->file->size - ds_file->mmap_offset,
+       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 */
        BT_ASSERT(ds_file->mmap_len);
        ds_file->mmap_addr = bt_mmap((void *) 0, ds_file->mmap_len,
                        PROT_READ, MAP_PRIVATE, fileno(ds_file->file->fp),
-                       ds_file->mmap_offset, ds_file->log_level);
+                       ds_file->mmap_offset_in_file, ds_file->log_level);
        if (ds_file->mmap_addr == MAP_FAILED) {
                BT_COMP_LOGE("Cannot memory-map address (size %zu) of file \"%s\" (%p) at offset %jd: %s",
                                ds_file->mmap_len, ds_file->file->path->str,
-                               ds_file->file->fp, (intmax_t) ds_file->mmap_offset,
+                               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
@@ -140,9 +143,7 @@ enum ctf_msg_iter_medium_status medop_request_bytes(
        bt_self_component *self_comp = ds_file->self_comp;
        bt_logging_level log_level = ds_file->log_level;
 
-       if (request_sz == 0) {
-               goto end;
-       }
+       BT_ASSERT(request_sz > 0);
 
        /*
         * Check if we have at least one memory-mapped byte left. If we don't,
@@ -150,7 +151,7 @@ enum ctf_msg_iter_medium_status medop_request_bytes(
         */
        if (remaining_mmap_bytes(ds_file) == 0) {
                /* Are we at the end of the file? */
-               if (ds_file->mmap_offset >= ds_file->file->size) {
+               if (ds_file->mmap_offset_in_file >= ds_file->file->size) {
                        BT_COMP_LOGD("Reached end of file \"%s\" (%p)",
                                ds_file->file->path->str, ds_file->file->fp);
                        status = CTF_MSG_ITER_MEDIUM_STATUS_EOF;
@@ -171,10 +172,13 @@ enum ctf_msg_iter_medium_status medop_request_bytes(
                }
        }
 
+       BT_ASSERT(remaining_mmap_bytes(ds_file) > 0);
        *buffer_sz = MIN(remaining_mmap_bytes(ds_file), request_sz);
+
        BT_ASSERT(ds_file->mmap_addr);
-       *buffer_addr = ((uint8_t *) ds_file->mmap_addr) + ds_file->request_offset;
-       ds_file->request_offset += *buffer_sz;
+       *buffer_addr = ((uint8_t *) ds_file->mmap_addr) + ds_file->request_offset_in_mapping;
+
+       ds_file->request_offset_in_mapping += *buffer_sz;
        goto end;
 
 error:
@@ -210,24 +214,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) {
@@ -238,39 +234,37 @@ enum ctf_msg_iter_medium_status medop_seek(enum ctf_msg_iter_seek_whence whence,
         * Determine whether or not the destination is contained within the
         * current mapping.
         */
-       if (offset < ds_file->mmap_offset ||
-                       offset >= ds_file->mmap_offset + ds_file->mmap_len) {
-               int unmap_ret;
+       if (offset < ds_file->mmap_offset_in_file ||
+                       offset >= ds_file->mmap_offset_in_file + ds_file->mmap_len) {
                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,
+                               "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;
        } else {
-               ds_file->request_offset = offset - ds_file->mmap_offset;
-               goto test_end;
+               ds_file->request_offset_in_mapping = offset - ds_file->mmap_offset_in_file;
+               status = CTF_MSG_ITER_MEDIUM_STATUS_OK;
+               goto end;
        }
 
 map_requested_offset:
        offset_in_mapping = offset %
                bt_mmap_get_offset_align_size(ds_file->log_level);
 
-       ds_file->mmap_offset = offset - offset_in_mapping;
-       ds_file->request_offset = offset_in_mapping;
-       ret = ds_file_mmap_next(ds_file);
-       if (ret != CTF_MSG_ITER_MEDIUM_STATUS_OK) {
+       ds_file->mmap_offset_in_file = offset - offset_in_mapping;
+       ds_file->request_offset_in_mapping = offset_in_mapping;
+       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
@@ -796,39 +790,6 @@ void ctf_fs_ds_file_destroy(struct ctf_fs_ds_file *ds_file)
        g_free(ds_file);
 }
 
-BT_HIDDEN
-bt_component_class_message_iterator_next_method_status ctf_fs_ds_file_next(
-               struct ctf_msg_iter *msg_iter,
-               const bt_message **msg)
-{
-       enum ctf_msg_iter_status msg_iter_status;
-       bt_component_class_message_iterator_next_method_status status;
-
-       msg_iter_status = ctf_msg_iter_get_next_message(msg_iter, msg);
-
-       switch (msg_iter_status) {
-       case CTF_MSG_ITER_STATUS_EOF:
-               status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_END;
-               break;
-       case CTF_MSG_ITER_STATUS_OK:
-               status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
-               break;
-       case CTF_MSG_ITER_STATUS_AGAIN:
-               /*
-                * Should not make it this far as this is
-                * medium-specific; there is nothing for the user to do
-                * and it should have been handled upstream.
-                */
-               bt_common_abort();
-       case CTF_MSG_ITER_STATUS_INVAL:
-       case CTF_MSG_ITER_STATUS_ERROR:
-       default:
-               status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
-               break;
-       }
-       return status;
-}
-
 BT_HIDDEN
 void ctf_fs_ds_index_destroy(struct ctf_fs_ds_index *index)
 {
This page took 0.026853 seconds and 4 git commands to generate.