@@ -1747,6 +1747,34 @@ typedef struct
17471747 size_t snapshot_buffer_write_offset ;
17481748} snapshot_globals_t ;
17491749
1750+ /**
1751+ * Write data into the specified buffer.
1752+ *
1753+ * Note:
1754+ * Offset is in-out and is incremented if the write operation completes successfully.
1755+ *
1756+ * @return true, if write was successful, i.e. offset + data_size doesn't exceed buffer size,
1757+ * false - otherwise.
1758+ */
1759+ static inline bool __attr_always_inline___
1760+ snapshot_write_to_buffer_by_offset (uint8_t * buffer_p , /**< buffer */
1761+ size_t buffer_size , /**< size of buffer */
1762+ size_t * in_out_buffer_offset_p , /**< [in,out] offset to write to
1763+ * incremented with data_size */
1764+ const void * data_p , /**< data */
1765+ size_t data_size ) /**< size of the writable data */
1766+ {
1767+ if (* in_out_buffer_offset_p + data_size > buffer_size )
1768+ {
1769+ return false;
1770+ }
1771+
1772+ memcpy (buffer_p + * in_out_buffer_offset_p , data_p , data_size );
1773+ * in_out_buffer_offset_p += data_size ;
1774+
1775+ return true;
1776+ } /* snapshot_write_to_buffer_by_offset */
1777+
17501778/**
17511779 * Snapshot callback for byte codes.
17521780 *
@@ -1798,11 +1826,11 @@ snapshot_add_compiled_code (ecma_compiled_code_t *compiled_code_p, /**< compiled
17981826
17991827 pattern_size = buffer_size ;
18001828
1801- if (!jrt_write_to_buffer_by_offset (snapshot_buffer_p ,
1802- snapshot_buffer_size ,
1803- & globals_p -> snapshot_buffer_write_offset ,
1804- buffer_p ,
1805- buffer_size ))
1829+ if (!snapshot_write_to_buffer_by_offset (snapshot_buffer_p ,
1830+ snapshot_buffer_size ,
1831+ & globals_p -> snapshot_buffer_write_offset ,
1832+ buffer_p ,
1833+ buffer_size ))
18061834 {
18071835 globals_p -> snapshot_error_occured = true;
18081836 }
@@ -1826,11 +1854,11 @@ snapshot_add_compiled_code (ecma_compiled_code_t *compiled_code_p, /**< compiled
18261854 return start_offset ;
18271855 }
18281856
1829- if (!jrt_write_to_buffer_by_offset (snapshot_buffer_p ,
1830- snapshot_buffer_size ,
1831- & globals_p -> snapshot_buffer_write_offset ,
1832- compiled_code_p ,
1833- ((size_t ) compiled_code_p -> size ) << JMEM_ALIGNMENT_LOG ))
1857+ if (!snapshot_write_to_buffer_by_offset (snapshot_buffer_p ,
1858+ snapshot_buffer_size ,
1859+ & globals_p -> snapshot_buffer_write_offset ,
1860+ compiled_code_p ,
1861+ ((size_t ) compiled_code_p -> size ) << JMEM_ALIGNMENT_LOG ))
18341862 {
18351863 globals_p -> snapshot_error_occured = true;
18361864 return 0 ;
@@ -2049,11 +2077,11 @@ jerry_parse_and_save_snapshot (const jerry_char_t *source_p, /**< script source
20492077
20502078 size_t header_offset = 0 ;
20512079
2052- jrt_write_to_buffer_by_offset (buffer_p ,
2053- buffer_size ,
2054- & header_offset ,
2055- & header ,
2056- sizeof (header ));
2080+ snapshot_write_to_buffer_by_offset (buffer_p ,
2081+ buffer_size ,
2082+ & header_offset ,
2083+ & header ,
2084+ sizeof (header ));
20572085
20582086 if (lit_map_p != NULL )
20592087 {
0 commit comments