X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fconfig%2Fsession-config.cpp;h=9af61fa93fb349f037b1e07c5039587c61944729;hp=dfbddf2913d25550c7058ca96b9d7e54757501e9;hb=HEAD;hpb=c9e313bc594f40a86eed237dce222c0fc99c957f diff --git a/src/common/config/session-config.cpp b/src/common/config/session-config.cpp index dfbddf291..9af61fa93 100644 --- a/src/common/config/session-config.cpp +++ b/src/common/config/session-config.cpp @@ -7,223 +7,230 @@ #include "lttng/tracker.h" #define _LGPL_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "config-internal.hpp" +#include "session-config.hpp" +#include #include +#include #include #include #include -#include -#include + #include -#include -#include -#include -#include #include -#include #include +#include #include -#include "session-config.hpp" -#include "config-internal.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #define CONFIG_USERSPACE_PROBE_LOOKUP_METHOD_NAME_MAX_LEN 7 +namespace { struct session_config_validation_ctx { xmlSchemaParserCtxtPtr parser_ctx; xmlSchemaPtr schema; xmlSchemaValidCtxtPtr schema_validation_ctx; }; +} /* namespace */ -const char * const config_element_all = "all"; +const char *const config_element_all = "all"; LTTNG_EXPORT const char *config_xml_encoding = "UTF-8"; -LTTNG_EXPORT size_t config_xml_encoding_bytes_per_char = 2; /* Size of the encoding's largest character */ +LTTNG_EXPORT size_t config_xml_encoding_bytes_per_char = 2; /* Size of the encoding's largest + character */ LTTNG_EXPORT const char *config_xml_indent_string = "\t"; LTTNG_EXPORT const char *config_xml_true = "true"; LTTNG_EXPORT const char *config_xml_false = "false"; -const char * const config_element_channel = "channel"; -const char * const config_element_channels = "channels"; -const char * const config_element_domain = "domain"; -const char * const config_element_domains = "domains"; -const char * const config_element_event = "event"; -const char * const config_element_events = "events"; -const char * const config_element_context = "context"; -const char * const config_element_contexts = "contexts"; -const char * const config_element_attributes = "attributes"; -const char * const config_element_exclusion = "exclusion"; -const char * const config_element_exclusions = "exclusions"; -const char * const config_element_function_attributes = "function_attributes"; -const char * const config_element_probe_attributes = "probe_attributes"; -const char * const config_element_symbol_name = "symbol_name"; -const char * const config_element_address = "address"; -const char * const config_element_offset = "offset"; - -const char * const config_element_userspace_probe_lookup = "lookup_method"; -const char * const config_element_userspace_probe_lookup_function_default = "DEFAULT"; -const char * const config_element_userspace_probe_lookup_function_elf = "ELF"; -const char * const config_element_userspace_probe_lookup_tracepoint_sdt = "SDT"; -const char * const config_element_userspace_probe_location_binary_path = "binary_path"; -const char * const config_element_userspace_probe_function_attributes = "userspace_probe_function_attributes"; -const char * const config_element_userspace_probe_function_location_function_name = "function_name"; -const char * const config_element_userspace_probe_tracepoint_attributes = "userspace_probe_tracepoint_attributes"; -const char * const config_element_userspace_probe_tracepoint_location_provider_name = "provider_name"; -const char * const config_element_userspace_probe_tracepoint_location_probe_name = "probe_name"; - -const char * const config_element_name = "name"; -const char * const config_element_enabled = "enabled"; -const char * const config_element_overwrite_mode = "overwrite_mode"; -const char * const config_element_subbuf_size = "subbuffer_size"; -const char * const config_element_num_subbuf = "subbuffer_count"; -const char * const config_element_switch_timer_interval = "switch_timer_interval"; -const char * const config_element_read_timer_interval = "read_timer_interval"; -const char * const config_element_monitor_timer_interval = "monitor_timer_interval"; -const char * const config_element_blocking_timeout = "blocking_timeout"; -const char * const config_element_output = "output"; -const char * const config_element_output_type = "output_type"; -const char * const config_element_tracefile_size = "tracefile_size"; -const char * const config_element_tracefile_count = "tracefile_count"; -const char * const config_element_live_timer_interval = "live_timer_interval"; -const char * const config_element_discarded_events = "discarded_events"; -const char * const config_element_lost_packets = "lost_packets"; -const char * const config_element_type = "type"; -const char * const config_element_buffer_type = "buffer_type"; -const char * const config_element_session = "session"; -const char * const config_element_sessions = "sessions"; -const char * const config_element_context_perf = "perf"; -const char * const config_element_context_app = "app"; -const char * const config_element_context_app_provider_name = "provider_name"; -const char * const config_element_context_app_ctx_name = "ctx_name"; -const char * const config_element_config = "config"; -const char * const config_element_started = "started"; -const char * const config_element_snapshot_mode = "snapshot_mode"; -const char * const config_element_loglevel = "loglevel"; -const char * const config_element_loglevel_type = "loglevel_type"; -const char * const config_element_filter = "filter"; -const char * const config_element_filter_expression = "filter_expression"; -const char * const config_element_snapshot_outputs = "snapshot_outputs"; -const char * const config_element_consumer_output = "consumer_output"; -const char * const config_element_destination = "destination"; -const char * const config_element_path = "path"; -const char * const config_element_net_output = "net_output"; -const char * const config_element_control_uri = "control_uri"; -const char * const config_element_data_uri = "data_uri"; -const char * const config_element_max_size = "max_size"; -const char * const config_element_pid = "pid"; -const char * const config_element_pids = "pids"; -const char * const config_element_shared_memory_path = "shared_memory_path"; - -const char * const config_element_process_attr_id = "id"; -const char * const config_element_process_attr_tracker_pid = "pid_process_attr_tracker"; -const char * const config_element_process_attr_tracker_vpid = "vpid_process_attr_tracker"; -const char * const config_element_process_attr_tracker_uid = "uid_process_attr_tracker"; -const char * const config_element_process_attr_tracker_vuid = "vuid_process_attr_tracker"; -const char * const config_element_process_attr_tracker_gid = "gid_process_attr_tracker"; -const char * const config_element_process_attr_tracker_vgid = "vgid_process_attr_tracker"; -const char * const config_element_process_attr_trackers = "process_attr_trackers"; -const char * const config_element_process_attr_values = "process_attr_values"; -const char * const config_element_process_attr_value_type = "process_attr_value_type"; -const char * const config_element_process_attr_pid_value = "pid"; -const char * const config_element_process_attr_vpid_value = "vpid"; -const char * const config_element_process_attr_uid_value = "uid"; -const char * const config_element_process_attr_vuid_value = "vuid"; -const char * const config_element_process_attr_gid_value = "gid"; -const char * const config_element_process_attr_vgid_value = "vgid"; -const char * const config_element_process_attr_tracker_type = "process_attr_tracker_type"; +const char *const config_element_channel = "channel"; +const char *const config_element_channels = "channels"; +const char *const config_element_domain = "domain"; +const char *const config_element_domains = "domains"; +const char *const config_element_event = "event"; +const char *const config_element_events = "events"; +const char *const config_element_context = "context"; +const char *const config_element_contexts = "contexts"; +const char *const config_element_attributes = "attributes"; +const char *const config_element_exclusion = "exclusion"; +const char *const config_element_exclusions = "exclusions"; +const char *const config_element_function_attributes = "function_attributes"; +const char *const config_element_probe_attributes = "probe_attributes"; +const char *const config_element_symbol_name = "symbol_name"; +const char *const config_element_address = "address"; +const char *const config_element_offset = "offset"; + +const char *const config_element_userspace_probe_lookup = "lookup_method"; +const char *const config_element_userspace_probe_lookup_function_default = "DEFAULT"; +const char *const config_element_userspace_probe_lookup_function_elf = "ELF"; +const char *const config_element_userspace_probe_lookup_tracepoint_sdt = "SDT"; +const char *const config_element_userspace_probe_location_binary_path = "binary_path"; +const char *const config_element_userspace_probe_function_attributes = + "userspace_probe_function_attributes"; +const char *const config_element_userspace_probe_function_location_function_name = "function_name"; +const char *const config_element_userspace_probe_tracepoint_attributes = + "userspace_probe_tracepoint_attributes"; +const char *const config_element_userspace_probe_tracepoint_location_provider_name = + "provider_name"; +const char *const config_element_userspace_probe_tracepoint_location_probe_name = "probe_name"; + +const char *const config_element_name = "name"; +const char *const config_element_enabled = "enabled"; +const char *const config_element_overwrite_mode = "overwrite_mode"; +const char *const config_element_subbuf_size = "subbuffer_size"; +const char *const config_element_num_subbuf = "subbuffer_count"; +const char *const config_element_switch_timer_interval = "switch_timer_interval"; +const char *const config_element_read_timer_interval = "read_timer_interval"; +const char *const config_element_monitor_timer_interval = "monitor_timer_interval"; +const char *const config_element_blocking_timeout = "blocking_timeout"; +const char *const config_element_output = "output"; +const char *const config_element_output_type = "output_type"; +const char *const config_element_tracefile_size = "tracefile_size"; +const char *const config_element_tracefile_count = "tracefile_count"; +const char *const config_element_live_timer_interval = "live_timer_interval"; +const char *const config_element_discarded_events = "discarded_events"; +const char *const config_element_lost_packets = "lost_packets"; +const char *const config_element_type = "type"; +const char *const config_element_buffer_type = "buffer_type"; +const char *const config_element_session = "session"; +const char *const config_element_sessions = "sessions"; +const char *const config_element_context_perf = "perf"; +const char *const config_element_context_app = "app"; +const char *const config_element_context_app_provider_name = "provider_name"; +const char *const config_element_context_app_ctx_name = "ctx_name"; +const char *const config_element_config = "config"; +const char *const config_element_started = "started"; +const char *const config_element_snapshot_mode = "snapshot_mode"; +const char *const config_element_loglevel = "loglevel"; +const char *const config_element_loglevel_type = "loglevel_type"; +const char *const config_element_filter = "filter"; +const char *const config_element_filter_expression = "filter_expression"; +const char *const config_element_snapshot_outputs = "snapshot_outputs"; +const char *const config_element_consumer_output = "consumer_output"; +const char *const config_element_destination = "destination"; +const char *const config_element_path = "path"; +const char *const config_element_net_output = "net_output"; +const char *const config_element_control_uri = "control_uri"; +const char *const config_element_data_uri = "data_uri"; +const char *const config_element_max_size = "max_size"; +const char *const config_element_pid = "pid"; +const char *const config_element_pids = "pids"; +const char *const config_element_shared_memory_path = "shared_memory_path"; + +const char *const config_element_process_attr_id = "id"; +const char *const config_element_process_attr_tracker_pid = "pid_process_attr_tracker"; +const char *const config_element_process_attr_tracker_vpid = "vpid_process_attr_tracker"; +const char *const config_element_process_attr_tracker_uid = "uid_process_attr_tracker"; +const char *const config_element_process_attr_tracker_vuid = "vuid_process_attr_tracker"; +const char *const config_element_process_attr_tracker_gid = "gid_process_attr_tracker"; +const char *const config_element_process_attr_tracker_vgid = "vgid_process_attr_tracker"; +const char *const config_element_process_attr_trackers = "process_attr_trackers"; +const char *const config_element_process_attr_values = "process_attr_values"; +const char *const config_element_process_attr_value_type = "process_attr_value_type"; +const char *const config_element_process_attr_pid_value = "pid"; +const char *const config_element_process_attr_vpid_value = "vpid"; +const char *const config_element_process_attr_uid_value = "uid"; +const char *const config_element_process_attr_vuid_value = "vuid"; +const char *const config_element_process_attr_gid_value = "gid"; +const char *const config_element_process_attr_vgid_value = "vgid"; +const char *const config_element_process_attr_tracker_type = "process_attr_tracker_type"; /* Used for support of legacy tracker serialization (< 2.12). */ -const char * const config_element_trackers_legacy = "trackers"; -const char * const config_element_pid_tracker_legacy = "pid_tracker"; -const char * const config_element_tracker_targets_legacy = "targets"; -const char * const config_element_tracker_pid_legacy = "pid"; - -const char * const config_element_rotation_schedules = "rotation_schedules"; -const char * const config_element_rotation_schedule_periodic = "periodic"; -const char * const config_element_rotation_schedule_periodic_time_us = "time_us"; -const char * const config_element_rotation_schedule_size_threshold = "size_threshold"; -const char * const config_element_rotation_schedule_size_threshold_bytes = "bytes"; - -const char * const config_domain_type_kernel = "KERNEL"; -const char * const config_domain_type_ust = "UST"; -const char * const config_domain_type_jul = "JUL"; -const char * const config_domain_type_log4j = "LOG4J"; -const char * const config_domain_type_python = "PYTHON"; - -const char * const config_buffer_type_per_pid = "PER_PID"; -const char * const config_buffer_type_per_uid = "PER_UID"; -const char * const config_buffer_type_global = "GLOBAL"; - -const char * const config_overwrite_mode_discard = "DISCARD"; -const char * const config_overwrite_mode_overwrite = "OVERWRITE"; - -const char * const config_output_type_splice = "SPLICE"; -const char * const config_output_type_mmap = "MMAP"; - -const char * const config_loglevel_type_all = "ALL"; -const char * const config_loglevel_type_range = "RANGE"; -const char * const config_loglevel_type_single = "SINGLE"; - -const char * const config_event_type_all = "ALL"; -const char * const config_event_type_tracepoint = "TRACEPOINT"; -const char * const config_event_type_probe = "PROBE"; -const char * const config_event_type_userspace_probe = "USERSPACE_PROBE"; -const char * const config_event_type_function = "FUNCTION"; -const char * const config_event_type_function_entry = "FUNCTION_ENTRY"; -const char * const config_event_type_noop = "NOOP"; -const char * const config_event_type_syscall = "SYSCALL"; -const char * const config_event_type_kprobe = "KPROBE"; -const char * const config_event_type_kretprobe = "KRETPROBE"; - -const char * const config_event_context_pid = "PID"; -const char * const config_event_context_procname = "PROCNAME"; -const char * const config_event_context_prio = "PRIO"; -const char * const config_event_context_nice = "NICE"; -const char * const config_event_context_vpid = "VPID"; -const char * const config_event_context_tid = "TID"; -const char * const config_event_context_vtid = "VTID"; -const char * const config_event_context_ppid = "PPID"; -const char * const config_event_context_vppid = "VPPID"; -const char * const config_event_context_pthread_id = "PTHREAD_ID"; -const char * const config_event_context_hostname = "HOSTNAME"; -const char * const config_event_context_ip = "IP"; -const char * const config_event_context_perf_thread_counter = "PERF_THREAD_COUNTER"; -const char * const config_event_context_app = "APP"; -const char * const config_event_context_interruptible = "INTERRUPTIBLE"; -const char * const config_event_context_preemptible = "PREEMPTIBLE"; -const char * const config_event_context_need_reschedule = "NEED_RESCHEDULE"; -const char * const config_event_context_migratable = "MIGRATABLE"; -const char * const config_event_context_callstack_user= "CALLSTACK_USER"; -const char * const config_event_context_callstack_kernel = "CALLSTACK_KERNEL"; -const char * const config_event_context_cgroup_ns = "CGROUP_NS"; -const char * const config_event_context_ipc_ns = "IPC_NS"; -const char * const config_event_context_mnt_ns = "MNT_NS"; -const char * const config_event_context_net_ns = "NET_NS"; -const char * const config_event_context_pid_ns = "PID_NS"; -const char * const config_event_context_time_ns = "TIME_NS"; -const char * const config_event_context_user_ns = "USER_NS"; -const char * const config_event_context_uts_ns = "UTS_NS"; -const char * const config_event_context_uid = "UID"; -const char * const config_event_context_euid = "EUID"; -const char * const config_event_context_suid = "SUID"; -const char * const config_event_context_gid = "GID"; -const char * const config_event_context_egid = "EGID"; -const char * const config_event_context_sgid = "SGID"; -const char * const config_event_context_vuid = "VUID"; -const char * const config_event_context_veuid = "VEUID"; -const char * const config_event_context_vsuid = "VSUID"; -const char * const config_event_context_vgid = "VGID"; -const char * const config_event_context_vegid = "VEGID"; -const char * const config_event_context_vsgid = "VSGID"; +const char *const config_element_trackers_legacy = "trackers"; +const char *const config_element_pid_tracker_legacy = "pid_tracker"; +const char *const config_element_tracker_targets_legacy = "targets"; +const char *const config_element_tracker_pid_legacy = "pid"; + +const char *const config_element_rotation_schedules = "rotation_schedules"; +const char *const config_element_rotation_schedule_periodic = "periodic"; +const char *const config_element_rotation_schedule_periodic_time_us = "time_us"; +const char *const config_element_rotation_schedule_size_threshold = "size_threshold"; +const char *const config_element_rotation_schedule_size_threshold_bytes = "bytes"; + +const char *const config_domain_type_kernel = "KERNEL"; +const char *const config_domain_type_ust = "UST"; +const char *const config_domain_type_jul = "JUL"; +const char *const config_domain_type_log4j = "LOG4J"; +const char *const config_domain_type_python = "PYTHON"; + +const char *const config_buffer_type_per_pid = "PER_PID"; +const char *const config_buffer_type_per_uid = "PER_UID"; +const char *const config_buffer_type_global = "GLOBAL"; + +const char *const config_overwrite_mode_discard = "DISCARD"; +const char *const config_overwrite_mode_overwrite = "OVERWRITE"; + +const char *const config_output_type_splice = "SPLICE"; +const char *const config_output_type_mmap = "MMAP"; + +const char *const config_loglevel_type_all = "ALL"; +const char *const config_loglevel_type_range = "RANGE"; +const char *const config_loglevel_type_single = "SINGLE"; + +const char *const config_event_type_all = "ALL"; +const char *const config_event_type_tracepoint = "TRACEPOINT"; +const char *const config_event_type_probe = "PROBE"; +const char *const config_event_type_userspace_probe = "USERSPACE_PROBE"; +const char *const config_event_type_function = "FUNCTION"; +const char *const config_event_type_function_entry = "FUNCTION_ENTRY"; +const char *const config_event_type_noop = "NOOP"; +const char *const config_event_type_syscall = "SYSCALL"; +const char *const config_event_type_kprobe = "KPROBE"; +const char *const config_event_type_kretprobe = "KRETPROBE"; + +const char *const config_event_context_pid = "PID"; +const char *const config_event_context_procname = "PROCNAME"; +const char *const config_event_context_prio = "PRIO"; +const char *const config_event_context_nice = "NICE"; +const char *const config_event_context_vpid = "VPID"; +const char *const config_event_context_tid = "TID"; +const char *const config_event_context_vtid = "VTID"; +const char *const config_event_context_ppid = "PPID"; +const char *const config_event_context_vppid = "VPPID"; +const char *const config_event_context_pthread_id = "PTHREAD_ID"; +const char *const config_event_context_hostname = "HOSTNAME"; +const char *const config_event_context_ip = "IP"; +const char *const config_event_context_perf_thread_counter = "PERF_THREAD_COUNTER"; +const char *const config_event_context_app = "APP"; +const char *const config_event_context_interruptible = "INTERRUPTIBLE"; +const char *const config_event_context_preemptible = "PREEMPTIBLE"; +const char *const config_event_context_need_reschedule = "NEED_RESCHEDULE"; +const char *const config_event_context_migratable = "MIGRATABLE"; +const char *const config_event_context_callstack_user = "CALLSTACK_USER"; +const char *const config_event_context_callstack_kernel = "CALLSTACK_KERNEL"; +const char *const config_event_context_cgroup_ns = "CGROUP_NS"; +const char *const config_event_context_ipc_ns = "IPC_NS"; +const char *const config_event_context_mnt_ns = "MNT_NS"; +const char *const config_event_context_net_ns = "NET_NS"; +const char *const config_event_context_pid_ns = "PID_NS"; +const char *const config_event_context_time_ns = "TIME_NS"; +const char *const config_event_context_user_ns = "USER_NS"; +const char *const config_event_context_uts_ns = "UTS_NS"; +const char *const config_event_context_uid = "UID"; +const char *const config_event_context_euid = "EUID"; +const char *const config_event_context_suid = "SUID"; +const char *const config_event_context_gid = "GID"; +const char *const config_event_context_egid = "EGID"; +const char *const config_event_context_sgid = "SGID"; +const char *const config_event_context_vuid = "VUID"; +const char *const config_event_context_veuid = "VEUID"; +const char *const config_event_context_vsuid = "VSUID"; +const char *const config_event_context_vgid = "VGID"; +const char *const config_event_context_vegid = "VEGID"; +const char *const config_event_context_vsgid = "VSGID"; /* Deprecated symbols */ LTTNG_EXPORT const char *config_element_perf; @@ -233,19 +240,21 @@ enum process_event_node_phase { ENABLE = 1, }; +namespace { struct consumer_output { int enabled; char *path; char *control_uri; char *data_uri; }; +} /* namespace */ /* * Returns a xmlChar string which must be released using xmlFree(). */ static xmlChar *encode_string(const char *in_str) { - xmlChar *out_str = NULL; + xmlChar *out_str = nullptr; xmlCharEncodingHandlerPtr handler; int out_len, ret, in_len; @@ -271,7 +280,7 @@ static xmlChar *encode_string(const char *in_str) ret = handler->input(out_str, &out_len, (const xmlChar *) in_str, &in_len); if (ret < 0) { xmlFree(out_str); - out_str = NULL; + out_str = nullptr; goto end; } @@ -287,26 +296,24 @@ struct config_writer *config_writer_create(int fd_output, int indent) struct config_writer *writer; xmlOutputBufferPtr buffer; - writer = (config_writer *) zmalloc(sizeof(struct config_writer)); + writer = zmalloc(); if (!writer) { PERROR("zmalloc config_writer_create"); goto end; } - buffer = xmlOutputBufferCreateFd(fd_output, NULL); + buffer = xmlOutputBufferCreateFd(fd_output, nullptr); if (!buffer) { goto error_destroy; } writer->writer = xmlNewTextWriter(buffer); - ret = xmlTextWriterStartDocument(writer->writer, NULL, - config_xml_encoding, NULL); + ret = xmlTextWriterStartDocument(writer->writer, nullptr, config_xml_encoding, nullptr); if (ret < 0) { goto error_destroy; } - ret = xmlTextWriterSetIndentString(writer->writer, - BAD_CAST config_xml_indent_string); + ret = xmlTextWriterSetIndentString(writer->writer, BAD_CAST config_xml_indent_string); if (ret) { goto error_destroy; } @@ -320,7 +327,7 @@ end: return writer; error_destroy: config_writer_destroy(writer); - return NULL; + return nullptr; } int config_writer_destroy(struct config_writer *writer) @@ -346,8 +353,7 @@ end: return ret; } -int config_writer_open_element(struct config_writer *writer, - const char *element_name) +int config_writer_open_element(struct config_writer *writer, const char *element_name) { int ret; xmlChar *encoded_element_name; @@ -369,12 +375,11 @@ end: return ret >= 0 ? 0 : ret; } -int config_writer_write_attribute(struct config_writer *writer, - const char *name, const char *value) +int config_writer_write_attribute(struct config_writer *writer, const char *name, const char *value) { int ret; - xmlChar *encoded_name = NULL; - xmlChar *encoded_value = NULL; + xmlChar *encoded_name = nullptr; + xmlChar *encoded_value = nullptr; if (!writer || !writer->writer || !name || !name[0]) { ret = -1; @@ -393,8 +398,7 @@ int config_writer_write_attribute(struct config_writer *writer, goto end; } - ret = xmlTextWriterWriteAttribute(writer->writer, encoded_name, - encoded_value); + ret = xmlTextWriterWriteAttribute(writer->writer, encoded_name, encoded_value); end: xmlFree(encoded_name); xmlFree(encoded_value); @@ -416,7 +420,8 @@ end: } int config_writer_write_element_unsigned_int(struct config_writer *writer, - const char *element_name, uint64_t value) + const char *element_name, + uint64_t value) { int ret; xmlChar *encoded_element_name; @@ -432,15 +437,16 @@ int config_writer_write_element_unsigned_int(struct config_writer *writer, goto end; } - ret = xmlTextWriterWriteFormatElement(writer->writer, - encoded_element_name, "%" PRIu64, value); + ret = xmlTextWriterWriteFormatElement( + writer->writer, encoded_element_name, "%" PRIu64, value); xmlFree(encoded_element_name); end: return ret >= 0 ? 0 : ret; } int config_writer_write_element_signed_int(struct config_writer *writer, - const char *element_name, int64_t value) + const char *element_name, + int64_t value) { int ret; xmlChar *encoded_element_name; @@ -456,23 +462,24 @@ int config_writer_write_element_signed_int(struct config_writer *writer, goto end; } - ret = xmlTextWriterWriteFormatElement(writer->writer, - encoded_element_name, "%" PRIi64, value); + ret = xmlTextWriterWriteFormatElement( + writer->writer, encoded_element_name, "%" PRIi64, value); xmlFree(encoded_element_name); end: return ret >= 0 ? 0 : ret; } int config_writer_write_element_bool(struct config_writer *writer, - const char *element_name, int value) + const char *element_name, + int value) { - return config_writer_write_element_string(writer, element_name, - value ? config_xml_true : config_xml_false); + return config_writer_write_element_string( + writer, element_name, value ? config_xml_true : config_xml_false); } int config_writer_write_element_double(struct config_writer *writer, - const char *element_name, - double value) + const char *element_name, + double value) { int ret; xmlChar *encoded_element_name; @@ -488,22 +495,21 @@ int config_writer_write_element_double(struct config_writer *writer, goto end; } - ret = xmlTextWriterWriteFormatElement( - writer->writer, encoded_element_name, "%f", value); + ret = xmlTextWriterWriteFormatElement(writer->writer, encoded_element_name, "%f", value); xmlFree(encoded_element_name); end: return ret >= 0 ? 0 : ret; } int config_writer_write_element_string(struct config_writer *writer, - const char *element_name, const char *value) + const char *element_name, + const char *value) { int ret; - xmlChar *encoded_element_name = NULL; - xmlChar *encoded_value = NULL; + xmlChar *encoded_element_name = nullptr; + xmlChar *encoded_value = nullptr; - if (!writer || !writer->writer || !element_name || !element_name[0] || - !value) { + if (!writer || !writer->writer || !element_name || !element_name[0] || !value) { ret = -1; goto end; } @@ -520,16 +526,16 @@ int config_writer_write_element_string(struct config_writer *writer, goto end; } - ret = xmlTextWriterWriteElement(writer->writer, encoded_element_name, - encoded_value); + ret = xmlTextWriterWriteElement(writer->writer, encoded_element_name, encoded_value); end: xmlFree(encoded_element_name); xmlFree(encoded_value); return ret >= 0 ? 0 : ret; } -static ATTR_FORMAT_PRINTF(2, 3) -void xml_error_handler(void *ctx __attribute__((unused)), const char *format, ...) +static ATTR_FORMAT_PRINTF(2, 3) void xml_error_handler(void *ctx __attribute__((unused)), + const char *format, + ...) { char *errMsg; va_list args; @@ -547,9 +553,7 @@ void xml_error_handler(void *ctx __attribute__((unused)), const char *format, .. free(errMsg); } -static -void fini_session_config_validation_ctx( - struct session_config_validation_ctx *ctx) +static void fini_session_config_validation_ctx(struct session_config_validation_ctx *ctx) { if (ctx->parser_ctx) { xmlSchemaFreeParserCtxt(ctx->parser_ctx); @@ -566,8 +570,7 @@ void fini_session_config_validation_ctx( memset(ctx, 0, sizeof(struct session_config_validation_ctx)); } -static -char *get_session_config_xsd_path(void) +static char *get_session_config_xsd_path() { char *xsd_path; const char *base_path = lttng_secure_getenv(DEFAULT_SESSION_CONFIG_XSD_PATH_ENV); @@ -579,9 +582,8 @@ char *get_session_config_xsd_path(void) } base_path_len = strlen(base_path); - max_path_len = base_path_len + - sizeof(DEFAULT_SESSION_CONFIG_XSD_FILENAME) + 1; - xsd_path = (char *) zmalloc(max_path_len); + max_path_len = base_path_len + sizeof(DEFAULT_SESSION_CONFIG_XSD_FILENAME) + 1; + xsd_path = zmalloc(max_path_len); if (!xsd_path) { goto end; } @@ -596,9 +598,7 @@ end: return xsd_path; } -static -int init_session_config_validation_ctx( - struct session_config_validation_ctx *ctx) +static int init_session_config_validation_ctx(struct session_config_validation_ctx *ctx) { int ret; char *xsd_path = get_session_config_xsd_path(); @@ -614,8 +614,7 @@ int init_session_config_validation_ctx( ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - xmlSchemaSetParserErrors(ctx->parser_ctx, xml_error_handler, - xml_error_handler, NULL); + xmlSchemaSetParserErrors(ctx->parser_ctx, xml_error_handler, xml_error_handler, nullptr); ctx->schema = xmlSchemaParse(ctx->parser_ctx); if (!ctx->schema) { @@ -631,8 +630,8 @@ int init_session_config_validation_ctx( goto end; } - xmlSchemaSetValidErrors(ctx->schema_validation_ctx, xml_error_handler, - xml_error_handler, NULL); + xmlSchemaSetValidErrors( + ctx->schema_validation_ctx, xml_error_handler, xml_error_handler, nullptr); ret = 0; end: @@ -644,8 +643,7 @@ end: return ret; } -static -int parse_uint(xmlChar *str, uint64_t *val) +static int parse_uint(xmlChar *str, uint64_t *val) { int ret; char *endptr; @@ -666,8 +664,7 @@ end: return ret; } -static -int parse_int(xmlChar *str, int64_t *val) +static int parse_int(xmlChar *str, int64_t *val) { int ret; char *endptr; @@ -688,8 +685,7 @@ end: return ret; } -static -int parse_bool(xmlChar *str, int *val) +static int parse_bool(xmlChar *str, int *val) { int ret = 0; @@ -698,23 +694,20 @@ int parse_bool(xmlChar *str, int *val) goto end; } - if (!strcmp((const char *) str, config_xml_true) || - !strcmp((const char *) str, "1")) { + if (!strcmp((const char *) str, config_xml_true) || !strcmp((const char *) str, "1")) { *val = 1; } else if (!strcmp((const char *) str, config_xml_false) || - !strcmp((const char *) str, "0")) { + !strcmp((const char *) str, "0")) { *val = 0; } else { - WARN("Invalid boolean value encountered (%s).", - (const char *) str); + WARN("Invalid boolean value encountered (%s).", (const char *) str); ret = -1; } end: return ret; } -static -int get_domain_type(xmlChar *domain) +static int get_domain_type(xmlChar *domain) { int ret; @@ -741,8 +734,7 @@ error: return -1; } -static -int get_buffer_type(xmlChar *buffer_type) +static int get_buffer_type(xmlChar *buffer_type) { int ret; @@ -765,8 +757,7 @@ error: return -1; } -static -int get_overwrite_mode(xmlChar *overwrite_mode) +static int get_overwrite_mode(xmlChar *overwrite_mode) { int ret; @@ -776,8 +767,7 @@ int get_overwrite_mode(xmlChar *overwrite_mode) if (!strcmp((char *) overwrite_mode, config_overwrite_mode_overwrite)) { ret = 1; - } else if (!strcmp((char *) overwrite_mode, - config_overwrite_mode_discard)) { + } else if (!strcmp((char *) overwrite_mode, config_overwrite_mode_discard)) { ret = 0; } else { goto error; @@ -788,8 +778,7 @@ error: return -1; } -static -int get_output_type(xmlChar *output_type) +static int get_output_type(xmlChar *output_type) { int ret; @@ -810,8 +799,7 @@ error: return -1; } -static -int get_event_type(xmlChar *event_type) +static int get_event_type(xmlChar *event_type) { int ret; @@ -825,13 +813,11 @@ int get_event_type(xmlChar *event_type) ret = LTTNG_EVENT_TRACEPOINT; } else if (!strcmp((char *) event_type, config_event_type_probe)) { ret = LTTNG_EVENT_PROBE; - } else if (!strcmp((char *) event_type, - config_event_type_userspace_probe)) { + } else if (!strcmp((char *) event_type, config_event_type_userspace_probe)) { ret = LTTNG_EVENT_USERSPACE_PROBE; } else if (!strcmp((char *) event_type, config_event_type_function)) { ret = LTTNG_EVENT_FUNCTION; - } else if (!strcmp((char *) event_type, - config_event_type_function_entry)) { + } else if (!strcmp((char *) event_type, config_event_type_function_entry)) { ret = LTTNG_EVENT_FUNCTION_ENTRY; } else if (!strcmp((char *) event_type, config_event_type_noop)) { ret = LTTNG_EVENT_NOOP; @@ -846,8 +832,7 @@ error: return -1; } -static -int get_loglevel_type(xmlChar *loglevel_type) +static int get_loglevel_type(xmlChar *loglevel_type) { int ret; @@ -857,11 +842,9 @@ int get_loglevel_type(xmlChar *loglevel_type) if (!strcmp((char *) loglevel_type, config_loglevel_type_all)) { ret = LTTNG_EVENT_LOGLEVEL_ALL; - } else if (!strcmp((char *) loglevel_type, - config_loglevel_type_range)) { + } else if (!strcmp((char *) loglevel_type, config_loglevel_type_range)) { ret = LTTNG_EVENT_LOGLEVEL_RANGE; - } else if (!strcmp((char *) loglevel_type, - config_loglevel_type_single)) { + } else if (!strcmp((char *) loglevel_type, config_loglevel_type_single)) { ret = LTTNG_EVENT_LOGLEVEL_SINGLE; } else { goto error; @@ -875,8 +858,7 @@ error: /* * Return the context type or -1 on error. */ -static -int get_context_type(xmlChar *context_type) +static int get_context_type(xmlChar *context_type) { int ret; @@ -886,116 +868,79 @@ int get_context_type(xmlChar *context_type) if (!strcmp((char *) context_type, config_event_context_pid)) { ret = LTTNG_EVENT_CONTEXT_PID; - } else if (!strcmp((char *) context_type, - config_event_context_procname)) { + } else if (!strcmp((char *) context_type, config_event_context_procname)) { ret = LTTNG_EVENT_CONTEXT_PROCNAME; - } else if (!strcmp((char *) context_type, - config_event_context_prio)) { + } else if (!strcmp((char *) context_type, config_event_context_prio)) { ret = LTTNG_EVENT_CONTEXT_PRIO; - } else if (!strcmp((char *) context_type, - config_event_context_nice)) { + } else if (!strcmp((char *) context_type, config_event_context_nice)) { ret = LTTNG_EVENT_CONTEXT_NICE; - } else if (!strcmp((char *) context_type, - config_event_context_vpid)) { + } else if (!strcmp((char *) context_type, config_event_context_vpid)) { ret = LTTNG_EVENT_CONTEXT_VPID; - } else if (!strcmp((char *) context_type, - config_event_context_tid)) { + } else if (!strcmp((char *) context_type, config_event_context_tid)) { ret = LTTNG_EVENT_CONTEXT_TID; - } else if (!strcmp((char *) context_type, - config_event_context_vtid)) { + } else if (!strcmp((char *) context_type, config_event_context_vtid)) { ret = LTTNG_EVENT_CONTEXT_VTID; - } else if (!strcmp((char *) context_type, - config_event_context_ppid)) { + } else if (!strcmp((char *) context_type, config_event_context_ppid)) { ret = LTTNG_EVENT_CONTEXT_PPID; - } else if (!strcmp((char *) context_type, - config_event_context_vppid)) { + } else if (!strcmp((char *) context_type, config_event_context_vppid)) { ret = LTTNG_EVENT_CONTEXT_VPPID; - } else if (!strcmp((char *) context_type, - config_event_context_pthread_id)) { + } else if (!strcmp((char *) context_type, config_event_context_pthread_id)) { ret = LTTNG_EVENT_CONTEXT_PTHREAD_ID; - } else if (!strcmp((char *) context_type, - config_event_context_hostname)) { + } else if (!strcmp((char *) context_type, config_event_context_hostname)) { ret = LTTNG_EVENT_CONTEXT_HOSTNAME; - } else if (!strcmp((char *) context_type, - config_event_context_ip)) { + } else if (!strcmp((char *) context_type, config_event_context_ip)) { ret = LTTNG_EVENT_CONTEXT_IP; - } else if (!strcmp((char *) context_type, - config_event_context_interruptible)) { + } else if (!strcmp((char *) context_type, config_event_context_interruptible)) { ret = LTTNG_EVENT_CONTEXT_INTERRUPTIBLE; - } else if (!strcmp((char *) context_type, - config_event_context_preemptible)) { + } else if (!strcmp((char *) context_type, config_event_context_preemptible)) { ret = LTTNG_EVENT_CONTEXT_PREEMPTIBLE; - } else if (!strcmp((char *) context_type, - config_event_context_need_reschedule)) { + } else if (!strcmp((char *) context_type, config_event_context_need_reschedule)) { ret = LTTNG_EVENT_CONTEXT_NEED_RESCHEDULE; - } else if (!strcmp((char *) context_type, - config_event_context_migratable)) { + } else if (!strcmp((char *) context_type, config_event_context_migratable)) { ret = LTTNG_EVENT_CONTEXT_MIGRATABLE; - } else if (!strcmp((char *) context_type, - config_event_context_callstack_user)) { + } else if (!strcmp((char *) context_type, config_event_context_callstack_user)) { ret = LTTNG_EVENT_CONTEXT_CALLSTACK_USER; - } else if (!strcmp((char *) context_type, - config_event_context_callstack_kernel)) { + } else if (!strcmp((char *) context_type, config_event_context_callstack_kernel)) { ret = LTTNG_EVENT_CONTEXT_CALLSTACK_KERNEL; - } else if (!strcmp((char *) context_type, - config_event_context_cgroup_ns)) { + } else if (!strcmp((char *) context_type, config_event_context_cgroup_ns)) { ret = LTTNG_EVENT_CONTEXT_CGROUP_NS; - } else if (!strcmp((char *) context_type, - config_event_context_ipc_ns)) { + } else if (!strcmp((char *) context_type, config_event_context_ipc_ns)) { ret = LTTNG_EVENT_CONTEXT_IPC_NS; - } else if (!strcmp((char *) context_type, - config_event_context_mnt_ns)) { + } else if (!strcmp((char *) context_type, config_event_context_mnt_ns)) { ret = LTTNG_EVENT_CONTEXT_MNT_NS; - } else if (!strcmp((char *) context_type, - config_event_context_net_ns)) { + } else if (!strcmp((char *) context_type, config_event_context_net_ns)) { ret = LTTNG_EVENT_CONTEXT_NET_NS; - } else if (!strcmp((char *) context_type, - config_event_context_pid_ns)) { + } else if (!strcmp((char *) context_type, config_event_context_pid_ns)) { ret = LTTNG_EVENT_CONTEXT_PID_NS; - } else if (!strcmp((char *) context_type, - config_event_context_time_ns)) { + } else if (!strcmp((char *) context_type, config_event_context_time_ns)) { ret = LTTNG_EVENT_CONTEXT_TIME_NS; - } else if (!strcmp((char *) context_type, - config_event_context_user_ns)) { + } else if (!strcmp((char *) context_type, config_event_context_user_ns)) { ret = LTTNG_EVENT_CONTEXT_USER_NS; - } else if (!strcmp((char *) context_type, - config_event_context_uts_ns)) { + } else if (!strcmp((char *) context_type, config_event_context_uts_ns)) { ret = LTTNG_EVENT_CONTEXT_UTS_NS; - } else if (!strcmp((char *) context_type, - config_event_context_uid)) { + } else if (!strcmp((char *) context_type, config_event_context_uid)) { ret = LTTNG_EVENT_CONTEXT_UID; - } else if (!strcmp((char *) context_type, - config_event_context_euid)) { + } else if (!strcmp((char *) context_type, config_event_context_euid)) { ret = LTTNG_EVENT_CONTEXT_EUID; - } else if (!strcmp((char *) context_type, - config_event_context_suid)) { + } else if (!strcmp((char *) context_type, config_event_context_suid)) { ret = LTTNG_EVENT_CONTEXT_SUID; - } else if (!strcmp((char *) context_type, - config_event_context_gid)) { + } else if (!strcmp((char *) context_type, config_event_context_gid)) { ret = LTTNG_EVENT_CONTEXT_GID; - } else if (!strcmp((char *) context_type, - config_event_context_egid)) { + } else if (!strcmp((char *) context_type, config_event_context_egid)) { ret = LTTNG_EVENT_CONTEXT_EGID; - } else if (!strcmp((char *) context_type, - config_event_context_sgid)) { + } else if (!strcmp((char *) context_type, config_event_context_sgid)) { ret = LTTNG_EVENT_CONTEXT_SGID; - } else if (!strcmp((char *) context_type, - config_event_context_vuid)) { + } else if (!strcmp((char *) context_type, config_event_context_vuid)) { ret = LTTNG_EVENT_CONTEXT_VUID; - } else if (!strcmp((char *) context_type, - config_event_context_veuid)) { + } else if (!strcmp((char *) context_type, config_event_context_veuid)) { ret = LTTNG_EVENT_CONTEXT_VEUID; - } else if (!strcmp((char *) context_type, - config_event_context_vsuid)) { + } else if (!strcmp((char *) context_type, config_event_context_vsuid)) { ret = LTTNG_EVENT_CONTEXT_VSUID; - } else if (!strcmp((char *) context_type, - config_event_context_vgid)) { + } else if (!strcmp((char *) context_type, config_event_context_vgid)) { ret = LTTNG_EVENT_CONTEXT_VGID; - } else if (!strcmp((char *) context_type, - config_event_context_vegid)) { + } else if (!strcmp((char *) context_type, config_event_context_vegid)) { ret = LTTNG_EVENT_CONTEXT_VEGID; - } else if (!strcmp((char *) context_type, - config_event_context_vsgid)) { + } else if (!strcmp((char *) context_type, config_event_context_vsgid)) { ret = LTTNG_EVENT_CONTEXT_VSGID; } else { goto error; @@ -1006,14 +951,12 @@ error: return -1; } -static -int init_domain(xmlNodePtr domain_node, struct lttng_domain *domain) +static int init_domain(xmlNodePtr domain_node, struct lttng_domain *domain) { int ret; xmlNodePtr node; - for (node = xmlFirstElementChild(domain_node); node; - node = xmlNextElementSibling(node)) { + for (node = xmlFirstElementChild(domain_node); node; node = xmlNextElementSibling(node)) { if (!strcmp((const char *) node->name, config_element_type)) { /* domain type */ xmlChar *node_content = xmlNodeGetContent(node); @@ -1030,8 +973,7 @@ int init_domain(xmlNodePtr domain_node, struct lttng_domain *domain) } domain->type = (lttng_domain_type) ret; - } else if (!strcmp((const char *) node->name, - config_element_buffer_type)) { + } else if (!strcmp((const char *) node->name, config_element_buffer_type)) { /* buffer type */ xmlChar *node_content = xmlNodeGetContent(node); if (!node_content) { @@ -1054,14 +996,12 @@ end: return ret; } -static -int get_net_output_uris(xmlNodePtr net_output_node, char **control_uri, - char **data_uri) +static int get_net_output_uris(xmlNodePtr net_output_node, char **control_uri, char **data_uri) { xmlNodePtr node; for (node = xmlFirstElementChild(net_output_node); node; - node = xmlNextElementSibling(node)) { + node = xmlNextElementSibling(node)) { if (!strcmp((const char *) node->name, config_element_control_uri)) { /* control_uri */ *control_uri = (char *) xmlNodeGetContent(node); @@ -1080,9 +1020,7 @@ int get_net_output_uris(xmlNodePtr net_output_node, char **control_uri, return *control_uri || *data_uri ? 0 : -LTTNG_ERR_LOAD_INVALID_CONFIG; } -static -int process_consumer_output(xmlNodePtr consumer_output_node, - struct consumer_output *output) +static int process_consumer_output(xmlNodePtr consumer_output_node, struct consumer_output *output) { int ret; xmlNodePtr node; @@ -1090,7 +1028,7 @@ int process_consumer_output(xmlNodePtr consumer_output_node, LTTNG_ASSERT(output); for (node = xmlFirstElementChild(consumer_output_node); node; - node = xmlNextElementSibling(node)) { + node = xmlNextElementSibling(node)) { if (!strcmp((const char *) node->name, config_element_enabled)) { xmlChar *enabled_str = xmlNodeGetContent(node); @@ -1115,8 +1053,7 @@ int process_consumer_output(xmlNodePtr consumer_output_node, goto end; } - if (!strcmp((const char *) output_type_node->name, - config_element_path)) { + if (!strcmp((const char *) output_type_node->name, config_element_path)) { /* path */ output->path = (char *) xmlNodeGetContent(output_type_node); if (!output->path) { @@ -1125,8 +1062,8 @@ int process_consumer_output(xmlNodePtr consumer_output_node, } } else { /* net_output */ - ret = get_net_output_uris(output_type_node, - &output->control_uri, &output->data_uri); + ret = get_net_output_uris( + output_type_node, &output->control_uri, &output->data_uri); if (ret) { goto end; } @@ -1145,82 +1082,60 @@ end: return ret; } -static -int create_session_net_output(const char *name, const char *control_uri, - const char *data_uri) +static int create_snapshot_session(const char *session_name, + xmlNodePtr output_node, + const struct config_load_session_override_attr *overrides) { int ret; - struct lttng_handle *handle; - const char *uri = NULL; - - LTTNG_ASSERT(name); - - handle = lttng_create_handle(name, NULL); - if (!handle) { - ret = -LTTNG_ERR_NOMEM; - goto end; - } - - if (!control_uri || !data_uri) { - uri = control_uri ? control_uri : data_uri; - control_uri = uri; - data_uri = uri; - } - - ret = lttng_set_consumer_url(handle, control_uri, data_uri); - lttng_destroy_handle(handle); -end: - return ret; -} - -static -int create_snapshot_session(const char *session_name, xmlNodePtr output_node, - const struct config_load_session_override_attr *overrides) -{ - int ret; - xmlNodePtr node = NULL; + enum lttng_error_code ret_code; + xmlNodePtr node = nullptr; xmlNodePtr snapshot_output_list_node; xmlNodePtr snapshot_output_node; + struct lttng_session_descriptor *session_descriptor = nullptr; LTTNG_ASSERT(session_name); + LTTNG_ASSERT(output_node); - ret = lttng_create_session_snapshot(session_name, NULL); - if (ret) { + /* + * Use a descriptor without output since consumer output size is not + * exposed by the session descriptor api. + */ + session_descriptor = lttng_session_descriptor_snapshot_create(session_name); + if (session_descriptor == nullptr) { + ret = -LTTNG_ERR_NOMEM; goto end; } - if (!output_node) { + ret_code = lttng_create_session_ext(session_descriptor); + if (ret_code != LTTNG_OK) { + ret = -ret_code; goto end; } snapshot_output_list_node = xmlFirstElementChild(output_node); /* Parse and create snapshot outputs */ - - for (snapshot_output_node = - xmlFirstElementChild(snapshot_output_list_node); - snapshot_output_node; snapshot_output_node = - xmlNextElementSibling(snapshot_output_node)) { - char *name = NULL; + for (snapshot_output_node = xmlFirstElementChild(snapshot_output_list_node); + snapshot_output_node; + snapshot_output_node = xmlNextElementSibling(snapshot_output_node)) { + char *name = nullptr; uint64_t max_size = UINT64_MAX; struct consumer_output output = {}; - struct lttng_snapshot_output *snapshot_output = NULL; - const char *control_uri = NULL; - const char *data_uri = NULL; - const char *path = NULL; + struct lttng_snapshot_output *snapshot_output = nullptr; + const char *control_uri = nullptr; + const char *data_uri = nullptr; + const char *path = nullptr; for (node = xmlFirstElementChild(snapshot_output_node); node; - node = xmlNextElementSibling(node)) { - if (!strcmp((const char *) node->name, - config_element_name)) { + node = xmlNextElementSibling(node)) { + if (!strcmp((const char *) node->name, config_element_name)) { /* name */ name = (char *) xmlNodeGetContent(node); if (!name) { ret = -LTTNG_ERR_NOMEM; goto error_snapshot_output; } - } else if (!strcmp((const char *) node->name, - config_element_max_size)) { + } else if (!strcmp((const char *) node->name, config_element_max_size)) { xmlChar *content = xmlNodeGetContent(node); /* max_size */ @@ -1251,18 +1166,18 @@ int create_snapshot_session(const char *session_name, xmlNodePtr output_node, if (overrides->path_url) { path = overrides->path_url; /* Control/data_uri are null */ - control_uri = NULL; - data_uri = NULL; + control_uri = nullptr; + data_uri = nullptr; } else { if (overrides->ctrl_url) { control_uri = overrides->ctrl_url; /* path is null */ - path = NULL; + path = nullptr; } if (overrides->data_url) { data_uri = overrides->data_url; /* path is null */ - path = NULL; + path = nullptr; } } } @@ -1284,23 +1199,21 @@ int create_snapshot_session(const char *session_name, xmlNodePtr output_node, } if (path) { - ret = lttng_snapshot_output_set_ctrl_url(path, - snapshot_output); + ret = lttng_snapshot_output_set_ctrl_url(path, snapshot_output); if (ret) { goto error_snapshot_output; } } else { if (control_uri) { ret = lttng_snapshot_output_set_ctrl_url(control_uri, - snapshot_output); + snapshot_output); if (ret) { goto error_snapshot_output; } } if (data_uri) { - ret = lttng_snapshot_output_set_data_url(data_uri, - snapshot_output); + ret = lttng_snapshot_output_set_data_url(data_uri, snapshot_output); if (ret) { goto error_snapshot_output; } @@ -1308,7 +1221,7 @@ int create_snapshot_session(const char *session_name, xmlNodePtr output_node, } ret = lttng_snapshot_add_output(session_name, snapshot_output); -error_snapshot_output: + error_snapshot_output: free(name); free(output.path); free(output.control_uri); @@ -1319,21 +1232,23 @@ error_snapshot_output: } } end: + lttng_session_descriptor_destroy(session_descriptor); return ret; } -static -int create_session(const char *name, - xmlNodePtr output_node, - uint64_t live_timer_interval, - const struct config_load_session_override_attr *overrides) +static int create_session(const char *name, + xmlNodePtr output_node, + uint64_t live_timer_interval, + const struct config_load_session_override_attr *overrides) { - int ret; + int ret = 0; + enum lttng_error_code ret_code; struct consumer_output output = {}; xmlNodePtr consumer_output_node; - const char *control_uri = NULL; - const char *data_uri = NULL; - const char *path = NULL; + const char *control_uri = nullptr; + const char *data_uri = nullptr; + const char *path = nullptr; + struct lttng_session_descriptor *session_descriptor = nullptr; LTTNG_ASSERT(name); @@ -1345,9 +1260,9 @@ int create_session(const char *name, } if (strcmp((const char *) consumer_output_node->name, - config_element_consumer_output)) { + config_element_consumer_output) != 0) { WARN("Invalid output type, expected %s node", - config_element_consumer_output); + config_element_consumer_output); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } @@ -1367,23 +1282,22 @@ int create_session(const char *name, if (overrides->path_url) { path = overrides->path_url; /* control/data_uri are null */; - control_uri = NULL; - data_uri = NULL; + control_uri = nullptr; + data_uri = nullptr; } else { if (overrides->ctrl_url) { control_uri = overrides->ctrl_url; /* path is null */ - path = NULL; + path = nullptr; } if (overrides->data_url) { data_uri = overrides->data_url; /* path is null */ - path = NULL; + path = nullptr; } } } - if (live_timer_interval != UINT64_MAX && !control_uri && !data_uri) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; @@ -1397,42 +1311,46 @@ int create_session(const char *name, * with a live timer the data and control URIs are provided. So, * NULL is passed here and will be set right after. */ - ret = lttng_create_session_live(name, NULL, live_timer_interval); + session_descriptor = lttng_session_descriptor_live_network_create( + name, control_uri, data_uri, live_timer_interval); } else { - ret = lttng_create_session(name, NULL); - } - if (ret) { - goto end; - } - - ret = create_session_net_output(name, control_uri, data_uri); - if (ret) { - goto end; + session_descriptor = lttng_session_descriptor_network_create( + name, control_uri, data_uri); } + } else if (path != nullptr) { + session_descriptor = lttng_session_descriptor_local_create(name, path); } else { - /* either local output or no output */ - ret = lttng_create_session(name, path); - if (ret) { - goto end; - } + /* No output */ + session_descriptor = lttng_session_descriptor_create(name); + } + + if (session_descriptor == nullptr) { + ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; + goto end; + } + + ret_code = lttng_create_session_ext(session_descriptor); + if (ret_code != LTTNG_OK) { + ret = -ret_code; + goto end; } + end: free(output.path); free(output.control_uri); free(output.data_uri); + lttng_session_descriptor_destroy(session_descriptor); return ret; } -static -struct lttng_userspace_probe_location * -process_userspace_probe_function_attribute_node( - xmlNodePtr attribute_node) +static struct lttng_userspace_probe_location * +process_userspace_probe_function_attribute_node(xmlNodePtr attribute_node) { xmlNodePtr function_attribute_node; - char *function_name = NULL, *binary_path = NULL; - struct lttng_userspace_probe_location *location = NULL; - struct lttng_userspace_probe_location_lookup_method *lookup_method = NULL; + char *function_name = nullptr, *binary_path = nullptr; + struct lttng_userspace_probe_location *location = nullptr; + struct lttng_userspace_probe_location_lookup_method *lookup_method = nullptr; /* * Process userspace probe location function attributes. The order of @@ -1440,30 +1358,27 @@ process_userspace_probe_function_attribute_node( * and check at the end if everything we need for this location type is * there. */ - for (function_attribute_node = - xmlFirstElementChild(attribute_node); - function_attribute_node; - function_attribute_node = xmlNextElementSibling( - function_attribute_node)) { + for (function_attribute_node = xmlFirstElementChild(attribute_node); + function_attribute_node; + function_attribute_node = xmlNextElementSibling(function_attribute_node)) { /* Handle function name, binary path and lookup method. */ if (!strcmp((const char *) function_attribute_node->name, - config_element_userspace_probe_function_location_function_name)) { + config_element_userspace_probe_function_location_function_name)) { function_name = (char *) xmlNodeGetContent(function_attribute_node); if (!function_name) { goto error; } } else if (!strcmp((const char *) function_attribute_node->name, - config_element_userspace_probe_location_binary_path)) { + config_element_userspace_probe_location_binary_path)) { binary_path = (char *) xmlNodeGetContent(function_attribute_node); if (!binary_path) { goto error; } } else if (!strcmp((const char *) function_attribute_node->name, - config_element_userspace_probe_lookup)) { + config_element_userspace_probe_lookup)) { char *lookup_method_name; - lookup_method_name = (char *) xmlNodeGetContent( - function_attribute_node); + lookup_method_name = (char *) xmlNodeGetContent(function_attribute_node); if (!lookup_method_name) { goto error; } @@ -1472,9 +1387,12 @@ process_userspace_probe_function_attribute_node( * function_default lookup method defaults to * function_elf lookup method at the moment. */ - if (!strcmp(lookup_method_name, config_element_userspace_probe_lookup_function_elf) - || !strcmp(lookup_method_name, config_element_userspace_probe_lookup_function_default)) { - lookup_method = lttng_userspace_probe_location_lookup_method_function_elf_create(); + if (!strcmp(lookup_method_name, + config_element_userspace_probe_lookup_function_elf) || + !strcmp(lookup_method_name, + config_element_userspace_probe_lookup_function_default)) { + lookup_method = + lttng_userspace_probe_location_lookup_method_function_elf_create(); if (!lookup_method) { PERROR("Error creating function default/ELF lookup method"); } @@ -1493,11 +1411,9 @@ process_userspace_probe_function_attribute_node( /* Check if all the necessary fields were found. */ if (binary_path && function_name && lookup_method) { /* Ownership of lookup_method is transferred. */ - location = - lttng_userspace_probe_location_function_create( - binary_path, function_name, - lookup_method); - lookup_method = NULL; + location = lttng_userspace_probe_location_function_create( + binary_path, function_name, lookup_method); + lookup_method = nullptr; goto error; } } @@ -1508,15 +1424,13 @@ error: return location; } -static -struct lttng_userspace_probe_location * -process_userspace_probe_tracepoint_attribute_node( - xmlNodePtr attribute_node) +static struct lttng_userspace_probe_location * +process_userspace_probe_tracepoint_attribute_node(xmlNodePtr attribute_node) { xmlNodePtr tracepoint_attribute_node; - char *probe_name = NULL, *provider_name = NULL, *binary_path = NULL; - struct lttng_userspace_probe_location *location = NULL; - struct lttng_userspace_probe_location_lookup_method *lookup_method = NULL; + char *probe_name = nullptr, *provider_name = nullptr, *binary_path = nullptr; + struct lttng_userspace_probe_location *location = nullptr; + struct lttng_userspace_probe_location_lookup_method *lookup_method = nullptr; /* * Process userspace probe location tracepoint attributes. The order of @@ -1524,40 +1438,38 @@ process_userspace_probe_tracepoint_attribute_node( * and check at the end if everything we need for this location type is * there. */ - for (tracepoint_attribute_node = - xmlFirstElementChild(attribute_node); tracepoint_attribute_node; - tracepoint_attribute_node = xmlNextElementSibling( - tracepoint_attribute_node)) { + for (tracepoint_attribute_node = xmlFirstElementChild(attribute_node); + tracepoint_attribute_node; + tracepoint_attribute_node = xmlNextElementSibling(tracepoint_attribute_node)) { if (!strcmp((const char *) tracepoint_attribute_node->name, - config_element_userspace_probe_tracepoint_location_probe_name)) { + config_element_userspace_probe_tracepoint_location_probe_name)) { probe_name = (char *) xmlNodeGetContent(tracepoint_attribute_node); if (!probe_name) { goto error; } } else if (!strcmp((const char *) tracepoint_attribute_node->name, - config_element_userspace_probe_tracepoint_location_provider_name)) { + config_element_userspace_probe_tracepoint_location_provider_name)) { provider_name = (char *) xmlNodeGetContent(tracepoint_attribute_node); if (!provider_name) { goto error; } } else if (!strcmp((const char *) tracepoint_attribute_node->name, - config_element_userspace_probe_location_binary_path)) { + config_element_userspace_probe_location_binary_path)) { binary_path = (char *) xmlNodeGetContent(tracepoint_attribute_node); if (!binary_path) { goto error; } } else if (!strcmp((const char *) tracepoint_attribute_node->name, - config_element_userspace_probe_lookup)) { + config_element_userspace_probe_lookup)) { char *lookup_method_name; - lookup_method_name = (char *) xmlNodeGetContent( - tracepoint_attribute_node); + lookup_method_name = (char *) xmlNodeGetContent(tracepoint_attribute_node); if (!lookup_method_name) { goto error; } if (!strcmp(lookup_method_name, - config_element_userspace_probe_lookup_tracepoint_sdt)) { + config_element_userspace_probe_lookup_tracepoint_sdt)) { lookup_method = lttng_userspace_probe_location_lookup_method_tracepoint_sdt_create(); if (!lookup_method) { @@ -1579,11 +1491,9 @@ process_userspace_probe_tracepoint_attribute_node( /* Check if all the necessary fields were found. */ if (binary_path && provider_name && probe_name && lookup_method) { /* Ownership of lookup_method is transferred. */ - location = - lttng_userspace_probe_location_tracepoint_create( - binary_path, provider_name, - probe_name, lookup_method); - lookup_method = NULL; + location = lttng_userspace_probe_location_tracepoint_create( + binary_path, provider_name, probe_name, lookup_method); + lookup_method = nullptr; goto error; } } @@ -1595,17 +1505,15 @@ error: return location; } -static -int process_probe_attribute_node(xmlNodePtr probe_attribute_node, - struct lttng_event_probe_attr *attr) +static int process_probe_attribute_node(xmlNodePtr probe_attribute_node, + struct lttng_event_probe_attr *attr) { int ret; LTTNG_ASSERT(probe_attribute_node); LTTNG_ASSERT(attr); - if (!strcmp((const char *) probe_attribute_node->name, - config_element_address)) { + if (!strcmp((const char *) probe_attribute_node->name, config_element_address)) { xmlChar *content; uint64_t addr = 0; @@ -1624,8 +1532,7 @@ int process_probe_attribute_node(xmlNodePtr probe_attribute_node, } attr->addr = addr; - } else if (!strcmp((const char *) probe_attribute_node->name, - config_element_offset)) { + } else if (!strcmp((const char *) probe_attribute_node->name, config_element_offset)) { xmlChar *content; uint64_t offset = 0; @@ -1644,8 +1551,7 @@ int process_probe_attribute_node(xmlNodePtr probe_attribute_node, } attr->offset = offset; - } else if (!strcmp((const char *) probe_attribute_node->name, - config_element_symbol_name)) { + } else if (!strcmp((const char *) probe_attribute_node->name, config_element_symbol_name)) { xmlChar *content; /* symbol_name */ @@ -1655,14 +1561,13 @@ int process_probe_attribute_node(xmlNodePtr probe_attribute_node, goto end; } - ret = lttng_strncpy(attr->symbol_name, - (const char *) content, - LTTNG_SYMBOL_NAME_LEN); + ret = lttng_strncpy( + attr->symbol_name, (const char *) content, LTTNG_SYMBOL_NAME_LEN); if (ret == -1) { - ERR("symbol name \"%s\"'s length (%zu) exceeds the maximal permitted length (%d) in session configuration", - (const char *) content, - strlen((const char *) content), - LTTNG_SYMBOL_NAME_LEN); + ERR("symbol name \"%s\"'s length (%zu) exceeds the maximal permitted length (%d) in session configuration", + (const char *) content, + strlen((const char *) content), + LTTNG_SYMBOL_NAME_LEN); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; free(content); goto end; @@ -1674,16 +1579,17 @@ end: return ret; } -static -int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, - const char *channel_name, const enum process_event_node_phase phase) +static int process_event_node(xmlNodePtr event_node, + struct lttng_handle *handle, + const char *channel_name, + const enum process_event_node_phase phase) { int ret = 0, i; xmlNodePtr node; struct lttng_event *event; - char **exclusions = NULL; + char **exclusions = nullptr; unsigned long exclusion_count = 0; - char *filter_expression = NULL; + char *filter_expression = nullptr; LTTNG_ASSERT(event_node); LTTNG_ASSERT(handle); @@ -1696,8 +1602,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } /* Initialize default log level which varies by domain */ - switch (handle->domain.type) - { + switch (handle->domain.type) { case LTTNG_DOMAIN_JUL: event->loglevel = LTTNG_LOGLEVEL_JUL_ALL; break; @@ -1715,8 +1620,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, abort(); } - for (node = xmlFirstElementChild(event_node); node; - node = xmlNextElementSibling(node)) { + for (node = xmlFirstElementChild(event_node); node; node = xmlNextElementSibling(node)) { if (!strcmp((const char *) node->name, config_element_name)) { xmlChar *content; @@ -1727,21 +1631,19 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, goto end; } - ret = lttng_strncpy(event->name, - (const char *) content, - LTTNG_SYMBOL_NAME_LEN); + ret = lttng_strncpy( + event->name, (const char *) content, LTTNG_SYMBOL_NAME_LEN); if (ret == -1) { WARN("Event \"%s\"'s name length (%zu) exceeds the maximal permitted length (%d) in session configuration", - (const char *) content, - strlen((const char *) content), - LTTNG_SYMBOL_NAME_LEN); + (const char *) content, + strlen((const char *) content), + LTTNG_SYMBOL_NAME_LEN); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; free(content); goto end; } free(content); - } else if (!strcmp((const char *) node->name, - config_element_enabled)) { + } else if (!strcmp((const char *) node->name, config_element_enabled)) { xmlChar *content = xmlNodeGetContent(node); /* enabled */ @@ -1756,8 +1658,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - } else if (!strcmp((const char *) node->name, - config_element_type)) { + } else if (!strcmp((const char *) node->name, config_element_type)) { xmlChar *content = xmlNodeGetContent(node); /* type */ @@ -1774,8 +1675,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } event->type = (lttng_event_type) ret; - } else if (!strcmp((const char *) node->name, - config_element_loglevel_type)) { + } else if (!strcmp((const char *) node->name, config_element_loglevel_type)) { xmlChar *content = xmlNodeGetContent(node); /* loglevel_type */ @@ -1792,8 +1692,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } event->loglevel_type = (lttng_loglevel_type) ret; - } else if (!strcmp((const char *) node->name, - config_element_loglevel)) { + } else if (!strcmp((const char *) node->name, config_element_loglevel)) { xmlChar *content; int64_t loglevel = 0; @@ -1818,10 +1717,8 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } event->loglevel = loglevel; - } else if (!strcmp((const char *) node->name, - config_element_filter)) { - xmlChar *content = - xmlNodeGetContent(node); + } else if (!strcmp((const char *) node->name, config_element_filter)) { + xmlChar *content = xmlNodeGetContent(node); /* filter */ if (!content) { @@ -1836,8 +1733,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, ret = -LTTNG_ERR_NOMEM; goto end; } - } else if (!strcmp((const char *) node->name, - config_element_exclusions)) { + } else if (!strcmp((const char *) node->name, config_element_exclusions)) { xmlNodePtr exclusion_node; int exclusion_index = 0; @@ -1856,7 +1752,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, continue; } - exclusions = (char **) zmalloc(exclusion_count * sizeof(char *)); + exclusions = calloc(exclusion_count); if (!exclusions) { exclusion_count = 0; ret = -LTTNG_ERR_NOMEM; @@ -1864,9 +1760,8 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } for (exclusion_node = xmlFirstElementChild(node); exclusion_node; - exclusion_node = xmlNextElementSibling(exclusion_node)) { - xmlChar *content = - xmlNodeGetContent(exclusion_node); + exclusion_node = xmlNextElementSibling(exclusion_node)) { + xmlChar *content = xmlNodeGetContent(exclusion_node); if (!content) { ret = -LTTNG_ERR_NOMEM; @@ -1883,8 +1778,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } event->exclusion = 1; - } else if (!strcmp((const char *) node->name, - config_element_attributes)) { + } else if (!strcmp((const char *) node->name, config_element_attributes)) { xmlNodePtr attribute_node = xmlFirstElementChild(node); /* attributes */ @@ -1894,23 +1788,22 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } if (!strcmp((const char *) attribute_node->name, - config_element_probe_attributes)) { + config_element_probe_attributes)) { xmlNodePtr probe_attribute_node; /* probe_attributes */ - for (probe_attribute_node = - xmlFirstElementChild(attribute_node); probe_attribute_node; - probe_attribute_node = xmlNextElementSibling( - probe_attribute_node)) { - + for (probe_attribute_node = xmlFirstElementChild(attribute_node); + probe_attribute_node; + probe_attribute_node = + xmlNextElementSibling(probe_attribute_node)) { ret = process_probe_attribute_node(probe_attribute_node, - &event->attr.probe); + &event->attr.probe); if (ret) { goto end; } } } else if (!strcmp((const char *) attribute_node->name, - config_element_function_attributes)) { + config_element_function_attributes)) { size_t sym_len; xmlChar *content; xmlNodePtr symbol_node = xmlFirstElementChild(attribute_node); @@ -1931,8 +1824,7 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } ret = lttng_strncpy( - event->attr.ftrace.symbol_name, - (char *) content, sym_len); + event->attr.ftrace.symbol_name, (char *) content, sym_len); if (ret == -1) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; free(content); @@ -1940,43 +1832,39 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } free(content); } else if (!strcmp((const char *) attribute_node->name, - config_element_userspace_probe_tracepoint_attributes)) { + config_element_userspace_probe_tracepoint_attributes)) { struct lttng_userspace_probe_location *location; - location = process_userspace_probe_tracepoint_attribute_node(attribute_node); + location = process_userspace_probe_tracepoint_attribute_node( + attribute_node); if (!location) { WARN("Error processing userspace probe tracepoint attribute"); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - ret = lttng_event_set_userspace_probe_location( - event, location); + ret = lttng_event_set_userspace_probe_location(event, location); if (ret) { WARN("Error setting userspace probe location field"); - lttng_userspace_probe_location_destroy( - location); + lttng_userspace_probe_location_destroy(location); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } } else if (!strcmp((const char *) attribute_node->name, - config_element_userspace_probe_function_attributes)) { + config_element_userspace_probe_function_attributes)) { struct lttng_userspace_probe_location *location; - location = - process_userspace_probe_function_attribute_node( - attribute_node); + location = process_userspace_probe_function_attribute_node( + attribute_node); if (!location) { WARN("Error processing userspace probe function attribute"); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - ret = lttng_event_set_userspace_probe_location( - event, location); + ret = lttng_event_set_userspace_probe_location(event, location); if (ret) { WARN("Error setting userspace probe location field"); - lttng_userspace_probe_location_destroy( - location); + lttng_userspace_probe_location_destroy(location); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } @@ -1989,8 +1877,8 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle, } if ((event->enabled && phase == ENABLE) || phase == CREATION) { - ret = lttng_enable_event_with_exclusions(handle, event, channel_name, - filter_expression, exclusion_count, exclusions); + ret = lttng_enable_event_with_exclusions( + handle, event, channel_name, filter_expression, exclusion_count, exclusions); if (ret < 0) { WARN("Enabling event (name:%s) on load failed.", event->name); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; @@ -2009,9 +1897,8 @@ end: return ret; } -static -int process_events_node(xmlNodePtr events_node, struct lttng_handle *handle, - const char *channel_name) +static int +process_events_node(xmlNodePtr events_node, struct lttng_handle *handle, const char *channel_name) { int ret = 0; struct lttng_event event; @@ -2021,8 +1908,7 @@ int process_events_node(xmlNodePtr events_node, struct lttng_handle *handle, LTTNG_ASSERT(handle); LTTNG_ASSERT(channel_name); - for (node = xmlFirstElementChild(events_node); node; - node = xmlNextElementSibling(node)) { + for (node = xmlFirstElementChild(events_node); node; node = xmlNextElementSibling(node)) { ret = process_event_node(node, handle, channel_name, CREATION); if (ret) { goto end; @@ -2037,13 +1923,12 @@ int process_events_node(xmlNodePtr events_node, struct lttng_handle *handle, memset(&event, 0, sizeof(event)); event.loglevel = -1; event.type = LTTNG_EVENT_ALL; - ret = lttng_disable_event_ext(handle, &event, channel_name, NULL); + ret = lttng_disable_event_ext(handle, &event, channel_name, nullptr); if (ret) { goto end; } - for (node = xmlFirstElementChild(events_node); node; - node = xmlNextElementSibling(node)) { + for (node = xmlFirstElementChild(events_node); node; node = xmlNextElementSibling(node)) { ret = process_event_node(node, handle, channel_name, ENABLE); if (ret) { goto end; @@ -2054,10 +1939,10 @@ end: return ret; } -static -int process_channel_attr_node(xmlNodePtr attr_node, - struct lttng_channel *channel, xmlNodePtr *contexts_node, - xmlNodePtr *events_node) +static int process_channel_attr_node(xmlNodePtr attr_node, + struct lttng_channel *channel, + xmlNodePtr *contexts_node, + xmlNodePtr *events_node) { int ret; @@ -2076,21 +1961,18 @@ int process_channel_attr_node(xmlNodePtr attr_node, goto end; } - ret = lttng_strncpy(channel->name, - (const char *) content, - LTTNG_SYMBOL_NAME_LEN); + ret = lttng_strncpy(channel->name, (const char *) content, LTTNG_SYMBOL_NAME_LEN); if (ret == -1) { WARN("Channel \"%s\"'s name length (%zu) exceeds the maximal permitted length (%d) in session configuration", - (const char *) content, - strlen((const char *) content), - LTTNG_SYMBOL_NAME_LEN); + (const char *) content, + strlen((const char *) content), + LTTNG_SYMBOL_NAME_LEN); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; free(content); goto end; } free(content); - } else if (!strcmp((const char *) attr_node->name, - config_element_enabled)) { + } else if (!strcmp((const char *) attr_node->name, config_element_enabled)) { xmlChar *content; int enabled; @@ -2109,8 +1991,7 @@ int process_channel_attr_node(xmlNodePtr attr_node, } channel->enabled = enabled; - } else if (!strcmp((const char *) attr_node->name, - config_element_overwrite_mode)) { + } else if (!strcmp((const char *) attr_node->name, config_element_overwrite_mode)) { xmlChar *content; /* overwrite_mode */ @@ -2128,8 +2009,7 @@ int process_channel_attr_node(xmlNodePtr attr_node, } channel->attr.overwrite = ret; - } else if (!strcmp((const char *) attr_node->name, - config_element_subbuf_size)) { + } else if (!strcmp((const char *) attr_node->name, config_element_subbuf_size)) { xmlChar *content; /* subbuffer_size */ @@ -2145,8 +2025,7 @@ int process_channel_attr_node(xmlNodePtr attr_node, ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - } else if (!strcmp((const char *) attr_node->name, - config_element_num_subbuf)) { + } else if (!strcmp((const char *) attr_node->name, config_element_num_subbuf)) { xmlChar *content; /* subbuffer_count */ @@ -2162,8 +2041,7 @@ int process_channel_attr_node(xmlNodePtr attr_node, ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - } else if (!strcmp((const char *) attr_node->name, - config_element_switch_timer_interval)) { + } else if (!strcmp((const char *) attr_node->name, config_element_switch_timer_interval)) { xmlChar *content; uint64_t switch_timer_interval = 0; @@ -2187,10 +2065,8 @@ int process_channel_attr_node(xmlNodePtr attr_node, goto end; } - channel->attr.switch_timer_interval = - switch_timer_interval; - } else if (!strcmp((const char *) attr_node->name, - config_element_read_timer_interval)) { + channel->attr.switch_timer_interval = switch_timer_interval; + } else if (!strcmp((const char *) attr_node->name, config_element_read_timer_interval)) { xmlChar *content; uint64_t read_timer_interval = 0; @@ -2214,10 +2090,8 @@ int process_channel_attr_node(xmlNodePtr attr_node, goto end; } - channel->attr.read_timer_interval = - read_timer_interval; - } else if (!strcmp((const char *) attr_node->name, - config_element_output_type)) { + channel->attr.read_timer_interval = read_timer_interval; + } else if (!strcmp((const char *) attr_node->name, config_element_output_type)) { xmlChar *content; /* output_type */ @@ -2235,8 +2109,7 @@ int process_channel_attr_node(xmlNodePtr attr_node, } channel->attr.output = (lttng_event_output) ret; - } else if (!strcmp((const char *) attr_node->name, - config_element_tracefile_size)) { + } else if (!strcmp((const char *) attr_node->name, config_element_tracefile_size)) { xmlChar *content; /* tracefile_size */ @@ -2252,8 +2125,7 @@ int process_channel_attr_node(xmlNodePtr attr_node, ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - } else if (!strcmp((const char *) attr_node->name, - config_element_tracefile_count)) { + } else if (!strcmp((const char *) attr_node->name, config_element_tracefile_count)) { xmlChar *content; /* tracefile_count */ @@ -2269,8 +2141,7 @@ int process_channel_attr_node(xmlNodePtr attr_node, ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - } else if (!strcmp((const char *) attr_node->name, - config_element_live_timer_interval)) { + } else if (!strcmp((const char *) attr_node->name, config_element_live_timer_interval)) { xmlChar *content; uint64_t live_timer_interval = 0; @@ -2294,10 +2165,8 @@ int process_channel_attr_node(xmlNodePtr attr_node, goto end; } - channel->attr.live_timer_interval = - live_timer_interval; - } else if (!strcmp((const char *) attr_node->name, - config_element_monitor_timer_interval)) { + channel->attr.live_timer_interval = live_timer_interval; + } else if (!strcmp((const char *) attr_node->name, config_element_monitor_timer_interval)) { xmlChar *content; uint64_t monitor_timer_interval = 0; @@ -2315,14 +2184,12 @@ int process_channel_attr_node(xmlNodePtr attr_node, goto end; } - ret = lttng_channel_set_monitor_timer_interval(channel, - monitor_timer_interval); + ret = lttng_channel_set_monitor_timer_interval(channel, monitor_timer_interval); if (ret) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - } else if (!strcmp((const char *) attr_node->name, - config_element_blocking_timeout)) { + } else if (!strcmp((const char *) attr_node->name, config_element_blocking_timeout)) { xmlChar *content; int64_t blocking_timeout = 0; @@ -2340,14 +2207,12 @@ int process_channel_attr_node(xmlNodePtr attr_node, goto end; } - ret = lttng_channel_set_blocking_timeout(channel, - blocking_timeout); + ret = lttng_channel_set_blocking_timeout(channel, blocking_timeout); if (ret) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } - } else if (!strcmp((const char *) attr_node->name, - config_element_events)) { + } else if (!strcmp((const char *) attr_node->name, config_element_events)) { /* events */ *events_node = attr_node; } else { @@ -2359,9 +2224,8 @@ end: return ret; } -static -int process_context_node(xmlNodePtr context_node, - struct lttng_handle *handle, const char *channel_name) +static int +process_context_node(xmlNodePtr context_node, struct lttng_handle *handle, const char *channel_name) { int ret; struct lttng_event_context context; @@ -2377,8 +2241,7 @@ int process_context_node(xmlNodePtr context_node, memset(&context, 0, sizeof(context)); - if (!strcmp((const char *) context_child_node->name, - config_element_type)) { + if (!strcmp((const char *) context_child_node->name, config_element_type)) { /* type */ xmlChar *content = xmlNodeGetContent(context_child_node); @@ -2395,19 +2258,16 @@ int process_context_node(xmlNodePtr context_node, } context.ctx = (lttng_event_context_type) ret; - } else if (!strcmp((const char *) context_child_node->name, - config_element_context_perf)) { + } else if (!strcmp((const char *) context_child_node->name, config_element_context_perf)) { /* perf */ xmlNodePtr perf_attr_node; context.ctx = handle->domain.type == LTTNG_DOMAIN_KERNEL ? LTTNG_EVENT_CONTEXT_PERF_CPU_COUNTER : LTTNG_EVENT_CONTEXT_PERF_THREAD_COUNTER; - for (perf_attr_node = xmlFirstElementChild(context_child_node); - perf_attr_node; perf_attr_node = - xmlNextElementSibling(perf_attr_node)) { - if (!strcmp((const char *) perf_attr_node->name, - config_element_type)) { + for (perf_attr_node = xmlFirstElementChild(context_child_node); perf_attr_node; + perf_attr_node = xmlNextElementSibling(perf_attr_node)) { + if (!strcmp((const char *) perf_attr_node->name, config_element_type)) { xmlChar *content; uint64_t type = 0; @@ -2433,7 +2293,7 @@ int process_context_node(xmlNodePtr context_node, context.u.perf_counter.type = type; } else if (!strcmp((const char *) perf_attr_node->name, - config_element_config)) { + config_element_config)) { xmlChar *content; uint64_t config = 0; @@ -2453,7 +2313,7 @@ int process_context_node(xmlNodePtr context_node, context.u.perf_counter.config = config; } else if (!strcmp((const char *) perf_attr_node->name, - config_element_name)) { + config_element_name)) { xmlChar *content; /* name */ @@ -2464,13 +2324,13 @@ int process_context_node(xmlNodePtr context_node, } ret = lttng_strncpy(context.u.perf_counter.name, - (const char *) content, - LTTNG_SYMBOL_NAME_LEN); + (const char *) content, + LTTNG_SYMBOL_NAME_LEN); if (ret == -1) { WARN("Perf counter \"%s\"'s name length (%zu) exceeds the maximal permitted length (%d) in session configuration", - (const char *) content, - strlen((const char *) content), - LTTNG_SYMBOL_NAME_LEN); + (const char *) content, + strlen((const char *) content), + LTTNG_SYMBOL_NAME_LEN); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; free(content); goto end; @@ -2478,21 +2338,18 @@ int process_context_node(xmlNodePtr context_node, free(content); } } - } else if (!strcmp((const char *) context_child_node->name, - config_element_context_app)) { + } else if (!strcmp((const char *) context_child_node->name, config_element_context_app)) { /* application context */ xmlNodePtr app_ctx_node; context.ctx = LTTNG_EVENT_CONTEXT_APP_CONTEXT; - for (app_ctx_node = xmlFirstElementChild(context_child_node); - app_ctx_node; app_ctx_node = - xmlNextElementSibling(app_ctx_node)) { + for (app_ctx_node = xmlFirstElementChild(context_child_node); app_ctx_node; + app_ctx_node = xmlNextElementSibling(app_ctx_node)) { xmlChar *content; - char **target = strcmp( - (const char *) app_ctx_node->name, - config_element_context_app_provider_name) == 0 ? - &context.u.app_ctx.provider_name : - &context.u.app_ctx.ctx_name; + char **target = strcmp((const char *) app_ctx_node->name, + config_element_context_app_provider_name) == 0 ? + &context.u.app_ctx.provider_name : + &context.u.app_ctx.ctx_name; content = xmlNodeGetContent(app_ctx_node); if (!content) { @@ -2508,7 +2365,7 @@ int process_context_node(xmlNodePtr context_node, goto end; } - ret = lttng_add_context(handle, &context, NULL, channel_name); + ret = lttng_add_context(handle, &context, nullptr, channel_name); if (context.ctx == LTTNG_EVENT_CONTEXT_APP_CONTEXT) { free(context.u.app_ctx.provider_name); free(context.u.app_ctx.ctx_name); @@ -2517,15 +2374,15 @@ end: return ret; } -static -int process_contexts_node(xmlNodePtr contexts_node, - struct lttng_handle *handle, const char *channel_name) +static int process_contexts_node(xmlNodePtr contexts_node, + struct lttng_handle *handle, + const char *channel_name) { int ret = 0; xmlNodePtr context_node; for (context_node = xmlFirstElementChild(contexts_node); context_node; - context_node = xmlNextElementSibling(context_node)) { + context_node = xmlNextElementSibling(context_node)) { ret = process_context_node(context_node, handle, channel_name); if (ret) { goto end; @@ -2536,11 +2393,11 @@ end: } static int get_tracker_elements(enum lttng_process_attr process_attr, - const char **element_id_tracker, - const char **element_value_type, - const char **element_value, - const char **element_value_alias, - const char **element_name) + const char **element_id_tracker, + const char **element_value_type, + const char **element_value, + const char **element_value_alias, + const char **element_name) { int ret = 0; @@ -2550,41 +2407,41 @@ static int get_tracker_elements(enum lttng_process_attr process_attr, *element_value_type = config_element_process_attr_pid_value; *element_value = config_element_process_attr_id; *element_value_alias = config_element_process_attr_id; - *element_name = NULL; + *element_name = nullptr; break; case LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID: *element_id_tracker = config_element_process_attr_tracker_vpid; *element_value_type = config_element_process_attr_vpid_value; *element_value = config_element_process_attr_id; - *element_value_alias = NULL; - *element_name = NULL; + *element_value_alias = nullptr; + *element_name = nullptr; break; case LTTNG_PROCESS_ATTR_USER_ID: *element_id_tracker = config_element_process_attr_tracker_uid; *element_value_type = config_element_process_attr_uid_value; *element_value = config_element_process_attr_id; - *element_value_alias = NULL; + *element_value_alias = nullptr; *element_name = config_element_name; break; case LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID: *element_id_tracker = config_element_process_attr_tracker_vuid; *element_value_type = config_element_process_attr_vuid_value; *element_value = config_element_process_attr_id; - *element_value_alias = NULL; + *element_value_alias = nullptr; *element_name = config_element_name; break; case LTTNG_PROCESS_ATTR_GROUP_ID: *element_id_tracker = config_element_process_attr_tracker_gid; *element_value_type = config_element_process_attr_gid_value; *element_value = config_element_process_attr_id; - *element_value_alias = NULL; + *element_value_alias = nullptr; *element_name = config_element_name; break; case LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID: *element_id_tracker = config_element_process_attr_tracker_vgid; *element_value_type = config_element_process_attr_vgid_value; *element_value = config_element_process_attr_id; - *element_value_alias = NULL; + *element_value_alias = nullptr; *element_name = config_element_name; break; default: @@ -2593,11 +2450,10 @@ static int get_tracker_elements(enum lttng_process_attr process_attr, return ret; } -static int process_legacy_pid_tracker_node( - xmlNodePtr trackers_node, struct lttng_handle *handle) +static int process_legacy_pid_tracker_node(xmlNodePtr trackers_node, struct lttng_handle *handle) { int ret = 0, child_count; - xmlNodePtr targets_node = NULL; + xmlNodePtr targets_node = nullptr; xmlNodePtr node; const char *element_id_tracker; const char *element_target_id; @@ -2605,36 +2461,34 @@ static int process_legacy_pid_tracker_node( const char *element_id_alias; const char *element_name; enum lttng_error_code tracker_handle_ret_code; - struct lttng_process_attr_tracker_handle *tracker_handle = NULL; + struct lttng_process_attr_tracker_handle *tracker_handle = nullptr; enum lttng_process_attr_tracker_handle_status status; - const enum lttng_process_attr process_attr = - handle->domain.type == LTTNG_DOMAIN_UST ? - LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID : - LTTNG_PROCESS_ATTR_PROCESS_ID; + const enum lttng_process_attr process_attr = handle->domain.type == LTTNG_DOMAIN_UST ? + LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID : + LTTNG_PROCESS_ATTR_PROCESS_ID; LTTNG_ASSERT(handle); tracker_handle_ret_code = lttng_session_get_tracker_handle( - handle->session_name, handle->domain.type, - process_attr, - &tracker_handle); + handle->session_name, handle->domain.type, process_attr, &tracker_handle); if (tracker_handle_ret_code != LTTNG_OK) { ret = LTTNG_ERR_INVALID; goto end; } - ret = get_tracker_elements(process_attr, &element_id_tracker, - &element_target_id, &element_id, &element_id_alias, - &element_name); + ret = get_tracker_elements(process_attr, + &element_id_tracker, + &element_target_id, + &element_id, + &element_id_alias, + &element_name); if (ret) { goto end; } /* Get the targets node */ - for (node = xmlFirstElementChild(trackers_node); node; - node = xmlNextElementSibling(node)) { - if (!strcmp((const char *) node->name, - config_element_tracker_targets_legacy)) { + for (node = xmlFirstElementChild(trackers_node); node; node = xmlNextElementSibling(node)) { + if (!strcmp((const char *) node->name, config_element_tracker_targets_legacy)) { targets_node = node; break; } @@ -2648,24 +2502,22 @@ static int process_legacy_pid_tracker_node( /* Go through all id target node */ child_count = xmlChildElementCount(targets_node); status = lttng_process_attr_tracker_handle_set_tracking_policy( - tracker_handle, - child_count == 0 ? LTTNG_TRACKING_POLICY_EXCLUDE_ALL : - LTTNG_TRACKING_POLICY_INCLUDE_SET); + tracker_handle, + child_count == 0 ? LTTNG_TRACKING_POLICY_EXCLUDE_ALL : + LTTNG_TRACKING_POLICY_INCLUDE_SET); if (status != LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_OK) { ret = LTTNG_ERR_UNK; goto end; } /* Add all tracked values. */ - for (node = xmlFirstElementChild(targets_node); node; - node = xmlNextElementSibling(node)) { + for (node = xmlFirstElementChild(targets_node); node; node = xmlNextElementSibling(node)) { xmlNodePtr pid_target_node = node; /* get pid_target node and track it */ for (node = xmlFirstElementChild(pid_target_node); node; - node = xmlNextElementSibling(node)) { - if (!strcmp((const char *) node->name, - config_element_tracker_pid_legacy)) { + node = xmlNextElementSibling(node)) { + if (!strcmp((const char *) node->name, config_element_tracker_pid_legacy)) { int64_t id; xmlChar *content = xmlNodeGetContent(node); @@ -2683,14 +2535,14 @@ static int process_legacy_pid_tracker_node( switch (process_attr) { case LTTNG_PROCESS_ATTR_PROCESS_ID: - status = lttng_process_attr_process_id_tracker_handle_add_pid( - tracker_handle, - (pid_t) id); + status = + lttng_process_attr_process_id_tracker_handle_add_pid( + tracker_handle, (pid_t) id); break; case LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID: - status = lttng_process_attr_virtual_process_id_tracker_handle_add_pid( - tracker_handle, - (pid_t) id); + status = + lttng_process_attr_virtual_process_id_tracker_handle_add_pid( + tracker_handle, (pid_t) id); break; default: ret = LTTNG_ERR_INVALID; @@ -2722,14 +2574,14 @@ static int process_legacy_pid_tracker_node( end: lttng_process_attr_tracker_handle_destroy(tracker_handle); return ret; - } +} static int process_id_tracker_node(xmlNodePtr id_tracker_node, - struct lttng_handle *handle, - enum lttng_process_attr process_attr) + struct lttng_handle *handle, + enum lttng_process_attr process_attr) { int ret = 0, child_count; - xmlNodePtr values_node = NULL; + xmlNodePtr values_node = nullptr; xmlNodePtr node; const char *element_id_tracker; const char *element_target_id; @@ -2737,32 +2589,33 @@ static int process_id_tracker_node(xmlNodePtr id_tracker_node, const char *element_id_alias; const char *element_name; enum lttng_error_code tracker_handle_ret_code; - struct lttng_process_attr_tracker_handle *tracker_handle = NULL; + struct lttng_process_attr_tracker_handle *tracker_handle = nullptr; enum lttng_process_attr_tracker_handle_status status; LTTNG_ASSERT(handle); LTTNG_ASSERT(id_tracker_node); tracker_handle_ret_code = lttng_session_get_tracker_handle( - handle->session_name, handle->domain.type, process_attr, - &tracker_handle); + handle->session_name, handle->domain.type, process_attr, &tracker_handle); if (tracker_handle_ret_code != LTTNG_OK) { ret = LTTNG_ERR_INVALID; goto end; } - ret = get_tracker_elements(process_attr, &element_id_tracker, - &element_target_id, &element_id, &element_id_alias, - &element_name); + ret = get_tracker_elements(process_attr, + &element_id_tracker, + &element_target_id, + &element_id, + &element_id_alias, + &element_name); if (ret) { goto end; } /* get the values node */ for (node = xmlFirstElementChild(id_tracker_node); node; - node = xmlNextElementSibling(node)) { - if (!strcmp((const char *) node->name, - config_element_process_attr_values)) { + node = xmlNextElementSibling(node)) { + if (!strcmp((const char *) node->name, config_element_process_attr_values)) { values_node = node; break; } @@ -2776,26 +2629,24 @@ static int process_id_tracker_node(xmlNodePtr id_tracker_node, /* Go through all id target node */ child_count = xmlChildElementCount(values_node); status = lttng_process_attr_tracker_handle_set_tracking_policy( - tracker_handle, - child_count == 0 ? LTTNG_TRACKING_POLICY_EXCLUDE_ALL : - LTTNG_TRACKING_POLICY_INCLUDE_SET); + tracker_handle, + child_count == 0 ? LTTNG_TRACKING_POLICY_EXCLUDE_ALL : + LTTNG_TRACKING_POLICY_INCLUDE_SET); if (status != LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_OK) { ret = LTTNG_ERR_UNK; goto end; } /* Add all tracked values. */ - for (node = xmlFirstElementChild(values_node); node; - node = xmlNextElementSibling(node)) { + for (node = xmlFirstElementChild(values_node); node; node = xmlNextElementSibling(node)) { xmlNodePtr id_target_node = node; /* get id node and track it */ for (node = xmlFirstElementChild(id_target_node); node; - node = xmlNextElementSibling(node)) { + node = xmlNextElementSibling(node)) { if (!strcmp((const char *) node->name, element_id) || - (element_id_alias && - !strcmp((const char *) node->name, - element_id_alias))) { + (element_id_alias && + !strcmp((const char *) node->name, element_id_alias))) { int64_t id; xmlChar *content = xmlNodeGetContent(node); @@ -2813,42 +2664,39 @@ static int process_id_tracker_node(xmlNodePtr id_tracker_node, switch (process_attr) { case LTTNG_PROCESS_ATTR_PROCESS_ID: - status = lttng_process_attr_process_id_tracker_handle_add_pid( - tracker_handle, - (pid_t) id); + status = + lttng_process_attr_process_id_tracker_handle_add_pid( + tracker_handle, (pid_t) id); break; case LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID: - status = lttng_process_attr_virtual_process_id_tracker_handle_add_pid( - tracker_handle, - (pid_t) id); + status = + lttng_process_attr_virtual_process_id_tracker_handle_add_pid( + tracker_handle, (pid_t) id); break; case LTTNG_PROCESS_ATTR_USER_ID: status = lttng_process_attr_user_id_tracker_handle_add_uid( - tracker_handle, - (uid_t) id); + tracker_handle, (uid_t) id); break; case LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID: - status = lttng_process_attr_virtual_user_id_tracker_handle_add_uid( - tracker_handle, - (uid_t) id); + status = + lttng_process_attr_virtual_user_id_tracker_handle_add_uid( + tracker_handle, (uid_t) id); break; case LTTNG_PROCESS_ATTR_GROUP_ID: status = lttng_process_attr_group_id_tracker_handle_add_gid( - tracker_handle, - (gid_t) id); + tracker_handle, (gid_t) id); break; case LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID: - status = lttng_process_attr_virtual_group_id_tracker_handle_add_gid( - tracker_handle, - (gid_t) id); + status = + lttng_process_attr_virtual_group_id_tracker_handle_add_gid( + tracker_handle, (gid_t) id); break; default: ret = LTTNG_ERR_INVALID; goto end; } } else if (element_name && - !strcmp((const char *) node->name, - element_name)) { + !strcmp((const char *) node->name, element_name)) { xmlChar *content = xmlNodeGetContent(node); if (!content) { @@ -2858,24 +2706,24 @@ static int process_id_tracker_node(xmlNodePtr id_tracker_node, switch (process_attr) { case LTTNG_PROCESS_ATTR_USER_ID: - status = lttng_process_attr_user_id_tracker_handle_add_user_name( - tracker_handle, - (const char *) content); + status = + lttng_process_attr_user_id_tracker_handle_add_user_name( + tracker_handle, (const char *) content); break; case LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID: - status = lttng_process_attr_virtual_user_id_tracker_handle_add_user_name( - tracker_handle, - (const char *) content); + status = + lttng_process_attr_virtual_user_id_tracker_handle_add_user_name( + tracker_handle, (const char *) content); break; case LTTNG_PROCESS_ATTR_GROUP_ID: - status = lttng_process_attr_group_id_tracker_handle_add_group_name( - tracker_handle, - (const char *) content); + status = + lttng_process_attr_group_id_tracker_handle_add_group_name( + tracker_handle, (const char *) content); break; case LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID: - status = lttng_process_attr_virtual_group_id_tracker_handle_add_group_name( - tracker_handle, - (const char *) content); + status = + lttng_process_attr_virtual_group_id_tracker_handle_add_group_name( + tracker_handle, (const char *) content); break; default: free(content); @@ -2911,21 +2759,20 @@ end: return ret; } -static -int process_domain_node(xmlNodePtr domain_node, const char *session_name) +static int process_domain_node(xmlNodePtr domain_node, const char *session_name) { int ret; struct lttng_domain domain {}; - struct lttng_handle *handle = NULL; - struct lttng_channel *channel = NULL; - xmlNodePtr channels_node = NULL; - xmlNodePtr trackers_node = NULL; - xmlNodePtr pid_tracker_node = NULL; - xmlNodePtr vpid_tracker_node = NULL; - xmlNodePtr uid_tracker_node = NULL; - xmlNodePtr vuid_tracker_node = NULL; - xmlNodePtr gid_tracker_node = NULL; - xmlNodePtr vgid_tracker_node = NULL; + struct lttng_handle *handle = nullptr; + struct lttng_channel *channel = nullptr; + xmlNodePtr channels_node = nullptr; + xmlNodePtr trackers_node = nullptr; + xmlNodePtr pid_tracker_node = nullptr; + xmlNodePtr vpid_tracker_node = nullptr; + xmlNodePtr uid_tracker_node = nullptr; + xmlNodePtr vuid_tracker_node = nullptr; + xmlNodePtr gid_tracker_node = nullptr; + xmlNodePtr vgid_tracker_node = nullptr; xmlNodePtr node; LTTNG_ASSERT(session_name); @@ -2942,10 +2789,8 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) } /* get the channels node */ - for (node = xmlFirstElementChild(domain_node); node; - node = xmlNextElementSibling(node)) { - if (!strcmp((const char *) node->name, - config_element_channels)) { + for (node = xmlFirstElementChild(domain_node); node; node = xmlNextElementSibling(node)) { + if (!strcmp((const char *) node->name, config_element_channels)) { channels_node = node; break; } @@ -2956,11 +2801,10 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) } /* create all channels */ - for (node = xmlFirstElementChild(channels_node); node; - node = xmlNextElementSibling(node)) { + for (node = xmlFirstElementChild(channels_node); node; node = xmlNextElementSibling(node)) { const enum lttng_domain_type original_domain = domain.type; - xmlNodePtr contexts_node = NULL; - xmlNodePtr events_node = NULL; + xmlNodePtr contexts_node = nullptr; + xmlNodePtr events_node = nullptr; xmlNodePtr channel_attr_node; /* @@ -2989,11 +2833,10 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) goto end; } - for (channel_attr_node = xmlFirstElementChild(node); - channel_attr_node; channel_attr_node = - xmlNextElementSibling(channel_attr_node)) { - ret = process_channel_attr_node(channel_attr_node, - channel, &contexts_node, &events_node); + for (channel_attr_node = xmlFirstElementChild(node); channel_attr_node; + channel_attr_node = xmlNextElementSibling(channel_attr_node)) { + ret = process_channel_attr_node( + channel_attr_node, channel, &contexts_node, &events_node); if (ret) { goto end; } @@ -3012,27 +2855,23 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) goto end; } - ret = process_contexts_node(contexts_node, handle, - channel->name); + ret = process_contexts_node(contexts_node, handle, channel->name); if (ret) { goto end; } lttng_channel_destroy(channel); } - channel = NULL; + channel = nullptr; /* get the trackers node */ - for (node = xmlFirstElementChild(domain_node); node; - node = xmlNextElementSibling(node)) { - if (!strcmp((const char *) node->name, - config_element_process_attr_trackers) || - !strcmp((const char *) node->name, - config_element_trackers_legacy)) { + for (node = xmlFirstElementChild(domain_node); node; node = xmlNextElementSibling(node)) { + if (!strcmp((const char *) node->name, config_element_process_attr_trackers) || + !strcmp((const char *) node->name, config_element_trackers_legacy)) { if (trackers_node) { ERR("Only one instance of `%s` or `%s` is allowed in a session configuration", - config_element_process_attr_trackers, - config_element_trackers_legacy); + config_element_process_attr_trackers, + config_element_trackers_legacy); ret = -1; goto end; } @@ -3045,64 +2884,56 @@ int process_domain_node(xmlNodePtr domain_node, const char *session_name) goto end; } - for (node = xmlFirstElementChild(trackers_node); node; - node = xmlNextElementSibling(node)) { - if (!strcmp((const char *) node->name, - config_element_process_attr_tracker_pid)) { + for (node = xmlFirstElementChild(trackers_node); node; node = xmlNextElementSibling(node)) { + if (!strcmp((const char *) node->name, config_element_process_attr_tracker_pid)) { pid_tracker_node = node; - ret = process_id_tracker_node(pid_tracker_node, handle, - LTTNG_PROCESS_ATTR_PROCESS_ID); + ret = process_id_tracker_node( + pid_tracker_node, handle, LTTNG_PROCESS_ATTR_PROCESS_ID); if (ret) { goto end; } } - if (!strcmp((const char *) node->name, - config_element_process_attr_tracker_vpid)) { + if (!strcmp((const char *) node->name, config_element_process_attr_tracker_vpid)) { vpid_tracker_node = node; - ret = process_id_tracker_node(vpid_tracker_node, handle, - LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID); + ret = process_id_tracker_node( + vpid_tracker_node, handle, LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID); if (ret) { goto end; } } - if (!strcmp((const char *) node->name, - config_element_process_attr_tracker_uid)) { + if (!strcmp((const char *) node->name, config_element_process_attr_tracker_uid)) { uid_tracker_node = node; - ret = process_id_tracker_node(uid_tracker_node, handle, - LTTNG_PROCESS_ATTR_USER_ID); + ret = process_id_tracker_node( + uid_tracker_node, handle, LTTNG_PROCESS_ATTR_USER_ID); if (ret) { goto end; } } - if (!strcmp((const char *) node->name, - config_element_process_attr_tracker_vuid)) { + if (!strcmp((const char *) node->name, config_element_process_attr_tracker_vuid)) { vuid_tracker_node = node; - ret = process_id_tracker_node(vuid_tracker_node, handle, - LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID); + ret = process_id_tracker_node( + vuid_tracker_node, handle, LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID); if (ret) { goto end; } } - if (!strcmp((const char *) node->name, - config_element_process_attr_tracker_gid)) { + if (!strcmp((const char *) node->name, config_element_process_attr_tracker_gid)) { gid_tracker_node = node; - ret = process_id_tracker_node(gid_tracker_node, handle, - LTTNG_PROCESS_ATTR_GROUP_ID); + ret = process_id_tracker_node( + gid_tracker_node, handle, LTTNG_PROCESS_ATTR_GROUP_ID); if (ret) { goto end; } } - if (!strcmp((const char *) node->name, - config_element_process_attr_tracker_vgid)) { + if (!strcmp((const char *) node->name, config_element_process_attr_tracker_vgid)) { vgid_tracker_node = node; - ret = process_id_tracker_node(vgid_tracker_node, handle, - LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID); + ret = process_id_tracker_node( + vgid_tracker_node, handle, LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID); if (ret) { goto end; } } - if (!strcmp((const char *) node->name, - config_element_pid_tracker_legacy)) { + if (!strcmp((const char *) node->name, config_element_pid_tracker_legacy)) { ret = process_legacy_pid_tracker_node(node, handle); if (ret) { goto end; @@ -3116,21 +2947,18 @@ end: return ret; } -static -int add_periodic_rotation(const char *name, uint64_t time_us) +static int add_periodic_rotation(const char *name, uint64_t time_us) { int ret; enum lttng_rotation_status status; - struct lttng_rotation_schedule *periodic = - lttng_rotation_schedule_periodic_create(); + struct lttng_rotation_schedule *periodic = lttng_rotation_schedule_periodic_create(); if (!periodic) { ret = -LTTNG_ERR_NOMEM; goto error; } - status = lttng_rotation_schedule_periodic_set_period(periodic, - time_us); + status = lttng_rotation_schedule_periodic_set_period(periodic, time_us); if (status != LTTNG_ROTATION_STATUS_OK) { ret = -LTTNG_ERR_INVALID; goto error; @@ -3154,21 +2982,18 @@ error: return ret; } -static -int add_size_rotation(const char *name, uint64_t size_bytes) +static int add_size_rotation(const char *name, uint64_t size_bytes) { int ret; enum lttng_rotation_status status; - struct lttng_rotation_schedule *size = - lttng_rotation_schedule_size_threshold_create(); + struct lttng_rotation_schedule *size = lttng_rotation_schedule_size_threshold_create(); if (!size) { ret = -LTTNG_ERR_NOMEM; goto error; } - status = lttng_rotation_schedule_size_threshold_set_threshold(size, - size_bytes); + status = lttng_rotation_schedule_size_threshold_set_threshold(size, size_bytes); if (status != LTTNG_ROTATION_STATUS_OK) { ret = -LTTNG_ERR_INVALID; goto error; @@ -3192,28 +3017,25 @@ error: return ret; } -static -int process_session_rotation_schedules_node( - xmlNodePtr schedules_node, - uint64_t *rotation_timer_interval, - uint64_t *rotation_size) +static int process_session_rotation_schedules_node(xmlNodePtr schedules_node, + uint64_t *rotation_timer_interval, + uint64_t *rotation_size) { int ret = 0; xmlNodePtr child; - for (child = xmlFirstElementChild(schedules_node); - child; - child = xmlNextElementSibling(child)) { + for (child = xmlFirstElementChild(schedules_node); child; + child = xmlNextElementSibling(child)) { if (!strcmp((const char *) child->name, - config_element_rotation_schedule_periodic)) { + config_element_rotation_schedule_periodic)) { xmlChar *content; xmlNodePtr time_us_node; /* periodic rotation schedule */ time_us_node = xmlFirstElementChild(child); if (!time_us_node || - strcmp((const char *) time_us_node->name, - config_element_rotation_schedule_periodic_time_us)) { + strcmp((const char *) time_us_node->name, + config_element_rotation_schedule_periodic_time_us) != 0) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } @@ -3231,15 +3053,15 @@ int process_session_rotation_schedules_node( goto end; } } else if (!strcmp((const char *) child->name, - config_element_rotation_schedule_size_threshold)) { + config_element_rotation_schedule_size_threshold)) { xmlChar *content; xmlNodePtr bytes_node; /* size_threshold rotation schedule */ bytes_node = xmlFirstElementChild(child); if (!bytes_node || - strcmp((const char *) bytes_node->name, - config_element_rotation_schedule_size_threshold_bytes)) { + strcmp((const char *) bytes_node->name, + config_element_rotation_schedule_size_threshold_bytes) != 0) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto end; } @@ -3263,31 +3085,27 @@ end: return ret; } -static -int process_session_node(xmlNodePtr session_node, const char *session_name, - int overwrite, - const struct config_load_session_override_attr *overrides) +static int process_session_node(xmlNodePtr session_node, + const char *session_name, + int overwrite, + const struct config_load_session_override_attr *overrides) { int ret, started = -1, snapshot_mode = -1; - uint64_t live_timer_interval = UINT64_MAX, - rotation_timer_interval = 0, - rotation_size = 0; - xmlChar *name = NULL; - xmlChar *shm_path = NULL; - xmlNodePtr domains_node = NULL; - xmlNodePtr output_node = NULL; + uint64_t live_timer_interval = UINT64_MAX, rotation_timer_interval = 0, rotation_size = 0; + xmlChar *name = nullptr; + xmlChar *shm_path = nullptr; + xmlNodePtr domains_node = nullptr; + xmlNodePtr output_node = nullptr; xmlNodePtr node; xmlNodePtr attributes_child; - struct lttng_domain *kernel_domain = NULL; - struct lttng_domain *ust_domain = NULL; - struct lttng_domain *jul_domain = NULL; - struct lttng_domain *log4j_domain = NULL; - struct lttng_domain *python_domain = NULL; - - for (node = xmlFirstElementChild(session_node); node; - node = xmlNextElementSibling(node)) { - if (!name && !strcmp((const char *) node->name, - config_element_name)) { + struct lttng_domain *kernel_domain = nullptr; + struct lttng_domain *ust_domain = nullptr; + struct lttng_domain *jul_domain = nullptr; + struct lttng_domain *log4j_domain = nullptr; + struct lttng_domain *python_domain = nullptr; + + for (node = xmlFirstElementChild(session_node); node; node = xmlNextElementSibling(node)) { + if (!name && !strcmp((const char *) node->name, config_element_name)) { /* name */ xmlChar *node_content = xmlNodeGetContent(node); if (!node_content) { @@ -3296,12 +3114,12 @@ int process_session_node(xmlNodePtr session_node, const char *session_name, } name = node_content; - } else if (!domains_node && !strcmp((const char *) node->name, - config_element_domains)) { + } else if (!domains_node && + !strcmp((const char *) node->name, config_element_domains)) { /* domains */ domains_node = node; - } else if (started == -1 && !strcmp((const char *) node->name, - config_element_started)) { + } else if (started == -1 && + !strcmp((const char *) node->name, config_element_started)) { /* started */ xmlChar *node_content = xmlNodeGetContent(node); if (!node_content) { @@ -3315,12 +3133,12 @@ int process_session_node(xmlNodePtr session_node, const char *session_name, ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto error; } - } else if (!output_node && !strcmp((const char *) node->name, - config_element_output)) { + } else if (!output_node && + !strcmp((const char *) node->name, config_element_output)) { /* output */ output_node = node; - } else if (!shm_path && !strcmp((const char *) node->name, - config_element_shared_memory_path)) { + } else if (!shm_path && + !strcmp((const char *) node->name, config_element_shared_memory_path)) { /* shared memory path */ xmlChar *node_content = xmlNodeGetContent(node); if (!node_content) { @@ -3335,9 +3153,9 @@ int process_session_node(xmlNodePtr session_node, const char *session_name, * rotation_timer_interval. */ for (attributes_child = xmlFirstElementChild(node); attributes_child; - attributes_child = xmlNextElementSibling(attributes_child)) { + attributes_child = xmlNextElementSibling(attributes_child)) { if (!strcmp((const char *) attributes_child->name, - config_element_snapshot_mode)) { + config_element_snapshot_mode)) { /* snapshot_mode */ xmlChar *snapshot_mode_content = xmlNodeGetContent(attributes_child); @@ -3353,7 +3171,7 @@ int process_session_node(xmlNodePtr session_node, const char *session_name, goto error; } } else if (!strcmp((const char *) attributes_child->name, - config_element_live_timer_interval)) { + config_element_live_timer_interval)) { /* live_timer_interval */ xmlChar *timer_interval_content = xmlNodeGetContent(attributes_child); @@ -3362,23 +3180,23 @@ int process_session_node(xmlNodePtr session_node, const char *session_name, goto error; } - ret = parse_uint(timer_interval_content, &live_timer_interval); + ret = parse_uint(timer_interval_content, + &live_timer_interval); free(timer_interval_content); if (ret) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto error; } } else if (!strcmp((const char *) attributes_child->name, - config_element_rotation_schedules)) { + config_element_rotation_schedules)) { ret = process_session_rotation_schedules_node( - attributes_child, - &rotation_timer_interval, - &rotation_size); + attributes_child, + &rotation_timer_interval, + &rotation_size); if (ret) { ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto error; } - } } } @@ -3390,18 +3208,16 @@ int process_session_node(xmlNodePtr session_node, const char *session_name, goto error; } - if (session_name && strcmp((char *) name, session_name)) { + if (session_name && strcmp((char *) name, session_name) != 0) { /* This is not the session we are looking for */ ret = -LTTNG_ERR_NO_SESSION; goto error; } /* Init domains to create the session handles */ - for (node = xmlFirstElementChild(domains_node); node; - node = xmlNextElementSibling(node)) { - struct lttng_domain *domain; + for (node = xmlFirstElementChild(domains_node); node; node = xmlNextElementSibling(node)) { + lttng_domain *domain = zmalloc(); - domain = (lttng_domain *) zmalloc(sizeof(*domain)); if (!domain) { ret = -LTTNG_ERR_NOMEM; goto error; @@ -3453,7 +3269,7 @@ int process_session_node(xmlNodePtr session_node, const char *session_name, goto domain_init_error; } continue; -domain_init_error: + domain_init_error: free(domain); ret = -LTTNG_ERR_LOAD_INVALID_CONFIG; goto error; @@ -3485,31 +3301,26 @@ domain_init_error: /* Create session type depending on output type */ if (snapshot_mode && snapshot_mode != -1) { - ret = create_snapshot_session((const char *) name, output_node, - overrides); - } else if (live_timer_interval && - live_timer_interval != UINT64_MAX) { - ret = create_session((const char *) name, - output_node, live_timer_interval, overrides); + ret = create_snapshot_session((const char *) name, output_node, overrides); + } else if (live_timer_interval && live_timer_interval != UINT64_MAX) { + ret = create_session( + (const char *) name, output_node, live_timer_interval, overrides); } else { /* regular session */ - ret = create_session((const char *) name, - output_node, UINT64_MAX, overrides); + ret = create_session((const char *) name, output_node, UINT64_MAX, overrides); } if (ret) { goto error; } if (shm_path) { - ret = lttng_set_session_shm_path((const char *) name, - (const char *) shm_path); + ret = lttng_set_session_shm_path((const char *) name, (const char *) shm_path); if (ret) { goto error; } } - for (node = xmlFirstElementChild(domains_node); node; - node = xmlNextElementSibling(node)) { + for (node = xmlFirstElementChild(domains_node); node; node = xmlNextElementSibling(node)) { ret = process_domain_node(node, (const char *) name); if (ret) { goto end; @@ -3517,15 +3328,13 @@ domain_init_error: } if (rotation_timer_interval) { - ret = add_periodic_rotation((const char *) name, - rotation_timer_interval); + ret = add_periodic_rotation((const char *) name, rotation_timer_interval); if (ret < 0) { goto error; } } if (rotation_size) { - ret = add_size_rotation((const char *) name, - rotation_size); + ret = add_size_rotation((const char *) name, rotation_size); if (ret < 0) { goto error; } @@ -3540,8 +3349,7 @@ domain_init_error: end: if (ret < 0) { - ERR("Failed to load session %s: %s", (const char *) name, - lttng_strerror(ret)); + ERR("Failed to load session %s: %s", (const char *) name, lttng_strerror(ret)); lttng_destroy_session((const char *) name); } @@ -3581,13 +3389,14 @@ valid: return 1; } -static -int load_session_from_file(const char *path, const char *session_name, - struct session_config_validation_ctx *validation_ctx, int overwrite, - const struct config_load_session_override_attr *overrides) +static int load_session_from_file(const char *path, + const char *session_name, + struct session_config_validation_ctx *validation_ctx, + int overwrite, + const struct config_load_session_override_attr *overrides) { int ret, session_found = !session_name; - xmlDocPtr doc = NULL; + xmlDocPtr doc = nullptr; xmlNodePtr sessions_node; xmlNodePtr session_node; @@ -3623,11 +3432,9 @@ int load_session_from_file(const char *path, const char *session_name, goto end; } - for (session_node = xmlFirstElementChild(sessions_node); - session_node; session_node = - xmlNextElementSibling(session_node)) { - ret = process_session_node(session_node, - session_name, overwrite, overrides); + for (session_node = xmlFirstElementChild(sessions_node); session_node; + session_node = xmlNextElementSibling(session_node)) { + ret = process_session_node(session_node, session_name, overwrite, overrides); if (!session_name && ret) { /* Loading error occurred. */ goto end; @@ -3656,13 +3463,14 @@ end: return ret; } -static -int load_session_from_path(const char *path, const char *session_name, - struct session_config_validation_ctx *validation_ctx, int overwrite, - const struct config_load_session_override_attr *overrides) +static int load_session_from_path(const char *path, + const char *session_name, + struct session_config_validation_ctx *validation_ctx, + int overwrite, + const struct config_load_session_override_attr *overrides) { int ret, session_found = !session_name; - DIR *directory = NULL; + DIR *directory = nullptr; struct lttng_dynamic_buffer file_path; size_t path_len; @@ -3672,7 +3480,9 @@ int load_session_from_path(const char *path, const char *session_name, lttng_dynamic_buffer_init(&file_path); if (path_len >= LTTNG_PATH_MAX) { ERR("Session configuration load path \"%s\" length (%zu) exceeds the maximal length allowed (%d)", - path, path_len, LTTNG_PATH_MAX); + path, + path_len, + LTTNG_PATH_MAX); ret = -LTTNG_ERR_INVALID; goto end; } @@ -3694,21 +3504,20 @@ int load_session_from_path(const char *path, const char *session_name, if (directory) { size_t file_path_root_len; - ret = lttng_dynamic_buffer_set_capacity(&file_path, - LTTNG_PATH_MAX); + ret = lttng_dynamic_buffer_set_capacity(&file_path, LTTNG_PATH_MAX); if (ret) { ret = -LTTNG_ERR_NOMEM; goto end; } - ret = lttng_dynamic_buffer_append(&file_path, path, path_len); + ret = lttng_dynamic_buffer_append(&file_path, path, path_len); if (ret) { ret = -LTTNG_ERR_NOMEM; goto end; } if (file_path.data[file_path.size - 1] != '/') { - ret = lttng_dynamic_buffer_append(&file_path, "/", 1); + ret = lttng_dynamic_buffer_append(&file_path, "/", 1); if (ret) { ret = -LTTNG_ERR_NOMEM; goto end; @@ -3738,7 +3547,8 @@ int load_session_from_path(const char *path, const char *session_name, /* Reached end of dir stream or error out. */ if (!result) { if (errno) { - PERROR("Failed to enumerate the contents of path \"%s\" while loading session, readdir returned", path); + PERROR("Failed to enumerate the contents of path \"%s\" while loading session, readdir returned", + path); ret = -LTTNG_ERR_LOAD_IO_FAIL; goto end; } @@ -3747,38 +3557,37 @@ int load_session_from_path(const char *path, const char *session_name, file_name_len = strlen(result->d_name); - if (file_name_len <= - sizeof(DEFAULT_SESSION_CONFIG_FILE_EXTENSION)) { + if (file_name_len <= sizeof(DEFAULT_SESSION_CONFIG_FILE_EXTENSION)) { continue; } if (file_path.size + file_name_len >= LTTNG_PATH_MAX) { WARN("Ignoring file \"%s\" since the path's length (%zu) would exceed the maximal permitted size (%d)", - result->d_name, - /* +1 to account for NULL terminator. */ - file_path.size + file_name_len + 1, - LTTNG_PATH_MAX); + result->d_name, + /* +1 to account for NULL terminator. */ + file_path.size + file_name_len + 1, + LTTNG_PATH_MAX); continue; } /* Does the file end with .lttng? */ if (strcmp(DEFAULT_SESSION_CONFIG_FILE_EXTENSION, - result->d_name + file_name_len - sizeof( - DEFAULT_SESSION_CONFIG_FILE_EXTENSION) + 1)) { + result->d_name + file_name_len - + sizeof(DEFAULT_SESSION_CONFIG_FILE_EXTENSION) + 1) != + 0) { continue; } - ret = lttng_dynamic_buffer_append(&file_path, result->d_name, - file_name_len + 1); + ret = lttng_dynamic_buffer_append( + &file_path, result->d_name, file_name_len + 1); if (ret) { ret = -LTTNG_ERR_NOMEM; goto end; } - ret = load_session_from_file(file_path.data, session_name, - validation_ctx, overwrite, overrides); - if (session_name && - (!ret || ret != -LTTNG_ERR_LOAD_SESSION_NOENT)) { + ret = load_session_from_file( + file_path.data, session_name, validation_ctx, overwrite, overrides); + if (session_name && (!ret || ret != -LTTNG_ERR_LOAD_SESSION_NOENT)) { session_found = 1; break; } @@ -3789,16 +3598,15 @@ int load_session_from_path(const char *path, const char *session_name, * Reset the buffer's size to the location of the * path's trailing '/'. */ - ret = lttng_dynamic_buffer_set_size(&file_path, - file_path_root_len); + ret = lttng_dynamic_buffer_set_size(&file_path, file_path_root_len); if (ret) { ret = -LTTNG_ERR_UNK; goto end; } } } else { - ret = load_session_from_file(path, session_name, - validation_ctx, overwrite, overrides); + ret = load_session_from_file( + path, session_name, validation_ctx, overwrite, overrides); if (ret) { goto end; } @@ -3852,13 +3660,15 @@ invalid: return 0; } -int config_load_session(const char *path, const char *session_name, - int overwrite, unsigned int autoload, - const struct config_load_session_override_attr *overrides) +int config_load_session(const char *path, + const char *session_name, + int overwrite, + unsigned int autoload, + const struct config_load_session_override_attr *overrides) { int ret; bool session_loaded = false; - const char *path_ptr = NULL; + const char *path_ptr = nullptr; struct session_config_validation_ctx validation_ctx = {}; ret = init_session_config_validation_ctx(&validation_ctx); @@ -3880,10 +3690,11 @@ int config_load_session(const char *path, const char *session_name, * continue loading the system wide sessions. */ if (autoload) { - ret = snprintf(path_buf, sizeof(path_buf), - DEFAULT_SESSION_HOME_CONFIGPATH - "/" DEFAULT_SESSION_CONFIG_AUTOLOAD, - home_path); + ret = snprintf(path_buf, + sizeof(path_buf), + DEFAULT_SESSION_HOME_CONFIGPATH + "/" DEFAULT_SESSION_CONFIG_AUTOLOAD, + home_path); if (ret < 0) { PERROR("snprintf session autoload home config path"); ret = -LTTNG_ERR_INVALID; @@ -3900,9 +3711,10 @@ int config_load_session(const char *path, const char *session_name, path_ptr = path_buf; } } else { - ret = snprintf(path_buf, sizeof(path_buf), - DEFAULT_SESSION_HOME_CONFIGPATH, - home_path); + ret = snprintf(path_buf, + sizeof(path_buf), + DEFAULT_SESSION_HOME_CONFIGPATH, + home_path); if (ret < 0) { PERROR("snprintf session home config path"); ret = -LTTNG_ERR_INVALID; @@ -3911,8 +3723,11 @@ int config_load_session(const char *path, const char *session_name, path_ptr = path_buf; } if (path_ptr) { - ret = load_session_from_path(path_ptr, session_name, - &validation_ctx, overwrite, overrides); + ret = load_session_from_path(path_ptr, + session_name, + &validation_ctx, + overwrite, + overrides); if (ret && ret != -LTTNG_ERR_LOAD_SESSION_NOENT) { goto end; } @@ -3925,12 +3740,12 @@ int config_load_session(const char *path, const char *session_name, } /* Reset path pointer for the system wide dir. */ - path_ptr = NULL; + path_ptr = nullptr; /* Try system wide configuration directory. */ if (autoload) { - sys_path = DEFAULT_SESSION_SYSTEM_CONFIGPATH "/" - DEFAULT_SESSION_CONFIG_AUTOLOAD; + sys_path = DEFAULT_SESSION_SYSTEM_CONFIGPATH + "/" DEFAULT_SESSION_CONFIG_AUTOLOAD; ret = validate_path_creds(sys_path); if (ret) { path_ptr = sys_path; @@ -3941,8 +3756,8 @@ int config_load_session(const char *path, const char *session_name, } if (path_ptr) { - ret = load_session_from_path(path_ptr, session_name, - &validation_ctx, overwrite, overrides); + ret = load_session_from_path( + path_ptr, session_name, &validation_ctx, overwrite, overrides); if (!ret) { session_loaded = true; } @@ -3968,8 +3783,8 @@ int config_load_session(const char *path, const char *session_name, goto end; } - ret = load_session_from_path(path, session_name, - &validation_ctx, overwrite, overrides); + ret = load_session_from_path( + path, session_name, &validation_ctx, overwrite, overrides); } end: fini_session_config_validation_ctx(&validation_ctx); @@ -3988,8 +3803,7 @@ end: return ret; } -static -void __attribute__((destructor)) session_config_exit(void) +static void __attribute__((destructor)) session_config_exit() { xmlCleanupParser(); }