ctf: assert that msg iter and medium seek offset is valid
[babeltrace.git] / src / plugins / ctf / fs-src / data-stream-file.c
index 1dacf230e5913e58a1d01881f569d81fd49778a1..30da41a140fca4ee278dc5cfdd63f7d6f1c8b675 100644 (file)
@@ -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
This page took 0.025441 seconds and 4 git commands to generate.