}
if (lttng_copy_from_user_check_nofault(writer->write_pos, ubuf, length)) {
- /*
- * After a successful strlen user, a page fault on copy is handled by
- * considering the string as empty, returning a success.
- */
+ ret = -1;
goto end;
}
writer->write_pos += length;
goto end;
}
- /*
- * Handle empty string and strlen user page fault as empty string.
- */
- if (length == 1)
- return lttng_msgpack_write_str(writer, "");
-
if (length <= MSGPACK_FIXSTR_MAX_LENGTH)
ret = lttng_msgpack_encode_user_fixstr(writer, ustr, length);
else
return ret;
}
+int lttng_msgpack_save_writer_pos(struct lttng_msgpack_writer *writer, uint8_t **pos)
+{
+ *pos = writer->write_pos;
+ return 0;
+}
+
+int lttng_msgpack_restore_writer_pos(struct lttng_msgpack_writer *writer, uint8_t *pos)
+{
+ writer->write_pos = pos;
+ return 0;
+}
+
void lttng_msgpack_writer_init(struct lttng_msgpack_writer *writer,
uint8_t *buffer, size_t size)
{