src.ctf.fs: remove ctf_msg_iter_seek_whence parameter to medium ops seek
[babeltrace.git] / src / plugins / ctf / fs-src / data-stream-file.c
index 1fd9e4257f5ca59f94bf7867eb9893c409689f36..9d9726fdc62840f7c5bd091c18d461b34e9f0bff 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
@@ -150,7 +153,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;
@@ -173,8 +176,8 @@ enum ctf_msg_iter_medium_status medop_request_bytes(
 
        *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,22 +213,18 @@ 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;
+       if (offset < 0 || offset > file_size) {
+               BT_COMP_LOGE("Invalid medium seek request: offset=%jd, file-size=%jd",
+                       (intmax_t) offset, (intmax_t) file_size);
+               status = CTF_MSG_ITER_MEDIUM_STATUS_INVAL;
                goto end;
        }
 
@@ -238,21 +237,19 @@ 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;
+               ds_file->request_offset_in_mapping = offset - ds_file->mmap_offset_in_file;
                goto test_end;
        }
 
@@ -260,17 +257,19 @@ 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
This page took 0.027669 seconds and 4 git commands to generate.