ctf: assert that request_sz in medium ops request_bytes is greater than 0
[babeltrace.git] / src / plugins / ctf / fs-src / data-stream-file.c
index 1dacf230e5913e58a1d01881f569d81fd49778a1..c4edcd32553104718c39d8c72fa05e8430450a8e 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
@@ -142,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,
@@ -173,9 +172,12 @@ 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_in_mapping;
+
        ds_file->request_offset_in_mapping += *buffer_sz;
        goto end;
 
@@ -212,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) {
@@ -242,14 +236,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 +256,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.029646 seconds and 4 git commands to generate.