Message ID | 20211111150321.85979-2-tz.stoyanov@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 522d7f09fdebfc0e78b3d868af29f38b9f90a04d |
Headers | show |
Series | Refactor APIs for creating output handler | expand |
On Thu, 11 Nov 2021 17:03:12 +0200 "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com> wrote: > +/** > + * tracecmd_output_allocate - allocate new output handler to a trace file > + * @handle: file descriptor to an empty file, it can be -1 if the handler > + * will not write to a file Nit, but technically, the parameter description should fit on one line. If more needs to be said about it, it can be done in the description, where every reference of the name has the "@" attached to it. I only mentioned this because I noticed it in a few places already. -- Steve > + * > + * This API only allocates a handler and performs minimal initialization. > + * No data is written in the file. > + * > + * Returns pointer to a newly allocated file descriptor, that can be used > + * with other library APIs. In case of an error, NULL is returned. The returned > + * handler must be freed with tracecmd_output_close() or tracecmd_output_free() > + */ > +struct tracecmd_output *tracecmd_output_allocate(int fd) > +{ > + struct tracecmd_output *handle; > + > + handle = calloc(1, sizeof(*handle)); > + if (!handle) > + return NULL; > + > + handle->fd = fd; > + > + handle->file_version = FILE_VERSION; > + > + handle->page_size = getpagesize(); > + handle->big_endian = tracecmd_host_bigendian(); > + > + list_head_init(&handle->options); > + > + handle->file_state = TRACECMD_FILE_ALLOCATED; > + > + return handle; > +} > + > + > static int select_file_version(struct tracecmd_output *handle, > struct tracecmd_input *ihandle) > {
diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h index f40babef..bed96657 100644 --- a/lib/trace-cmd/include/private/trace-cmd-private.h +++ b/lib/trace-cmd/include/private/trace-cmd-private.h @@ -102,7 +102,8 @@ static inline int tracecmd_host_bigendian(void) /* --- Opening and Reading the trace.dat file --- */ enum tracecmd_file_states { - TRACECMD_FILE_INIT = 1, + TRACECMD_FILE_ALLOCATED = 0, + TRACECMD_FILE_INIT, TRACECMD_FILE_HEADERS, TRACECMD_FILE_FTRACE_EVENTS, TRACECMD_FILE_ALL_EVENTS, @@ -268,6 +269,7 @@ struct tracecmd_event_list { struct tracecmd_option; struct tracecmd_msg_handle; +struct tracecmd_output *tracecmd_output_allocate(int fd); struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus); struct tracecmd_output * tracecmd_create_init_file_glob(const char *output_file, diff --git a/lib/trace-cmd/trace-output.c b/lib/trace-cmd/trace-output.c index fe1d1aaa..3878b963 100644 --- a/lib/trace-cmd/trace-output.c +++ b/lib/trace-cmd/trace-output.c @@ -59,6 +59,7 @@ struct tracecmd_output { unsigned long file_state; unsigned long file_version; size_t options_start; + bool big_endian; struct list_head options; struct tracecmd_msg_handle *msg_handle; @@ -883,6 +884,41 @@ out_free: return ret; } +/** + * tracecmd_output_allocate - allocate new output handler to a trace file + * @handle: file descriptor to an empty file, it can be -1 if the handler + * will not write to a file + * + * This API only allocates a handler and performs minimal initialization. + * No data is written in the file. + * + * Returns pointer to a newly allocated file descriptor, that can be used + * with other library APIs. In case of an error, NULL is returned. The returned + * handler must be freed with tracecmd_output_close() or tracecmd_output_free() + */ +struct tracecmd_output *tracecmd_output_allocate(int fd) +{ + struct tracecmd_output *handle; + + handle = calloc(1, sizeof(*handle)); + if (!handle) + return NULL; + + handle->fd = fd; + + handle->file_version = FILE_VERSION; + + handle->page_size = getpagesize(); + handle->big_endian = tracecmd_host_bigendian(); + + list_head_init(&handle->options); + + handle->file_state = TRACECMD_FILE_ALLOCATED; + + return handle; +} + + static int select_file_version(struct tracecmd_output *handle, struct tracecmd_input *ihandle) {
The API only allocates a handler and performs minimal initialization. No data is written in the file. tracecmd_output_allocate() Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> --- .../include/private/trace-cmd-private.h | 4 ++- lib/trace-cmd/trace-output.c | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-)