* [PATCH v2] libtracefs: Implement tracefs_warning()
@ 2021-04-08 4:27 Tzvetomir Stoyanov (VMware)
0 siblings, 0 replies; only message in thread
From: Tzvetomir Stoyanov (VMware) @ 2021-04-08 4:27 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel
The warning() function is used in a lot of places in the libracefs
library, and it is implemented as a dummy weak function. There is a
weak implementation of the same function in traceevent library, which
could cause a problem when both are used in an application.
Replaced warning() with tracefs_warning() and implemented it as a
weak function, specific to this library.
The tracefs_warning() uses tep_vwarning() from libtraceevent for
printing the warning, which is also a weak function and can be
overridden by the application.
Added a __weak define in the library internal header file.
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
Depends on "[PATCH v2] libtraceevent: Add tep_warning()"
https://lore.kernel.org/linux-trace-devel/20210408042623.3112002-1-tz.stoyanov@gmail.com/
v2 changes:
- Use tep_vwarning() for printing the warning message.
include/tracefs-local.h | 3 ++-
src/tracefs-events.c | 2 +-
src/tracefs-instance.c | 8 ++++----
src/tracefs-utils.c | 17 ++++++++++++-----
4 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/include/tracefs-local.h b/include/tracefs-local.h
index 73ec113..5a69ef7 100644
--- a/include/tracefs-local.h
+++ b/include/tracefs-local.h
@@ -7,6 +7,7 @@
#define _TRACE_FS_LOCAL_H
#define __hidden __attribute__((visibility ("hidden")))
+#define __weak __attribute__((weak))
#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
@@ -22,7 +23,7 @@ struct tracefs_instance {
};
/* Can be overridden */
-void warning(const char *fmt, ...);
+void tracefs_warning(const char *fmt, ...);
int str_read_file(const char *file, char **buffer);
char *trace_append_file(const char *dir, const char *name);
diff --git a/src/tracefs-events.c b/src/tracefs-events.c
index da56943..9a706ab 100644
--- a/src/tracefs-events.c
+++ b/src/tracefs-events.c
@@ -43,7 +43,7 @@ page_to_kbuf(struct tep_handle *tep, void *page, int size)
kbuffer_load_subbuffer(kbuf, page);
if (kbuffer_subbuffer_size(kbuf) > size) {
- warning("%s: page_size > size", __func__);
+ tracefs_warning("%s: page_size > size", __func__);
kbuffer_free(kbuf);
kbuf = NULL;
}
diff --git a/src/tracefs-instance.c b/src/tracefs-instance.c
index bf2fabf..e87b360 100644
--- a/src/tracefs-instance.c
+++ b/src/tracefs-instance.c
@@ -203,7 +203,7 @@ int tracefs_instance_destroy(struct tracefs_instance *instance)
int ret = -1;
if (!instance || !instance->name) {
- warning("Cannot remove top instance");
+ tracefs_warning("Cannot remove top instance");
return -1;
}
@@ -265,8 +265,8 @@ char *tracefs_instance_get_dir(struct tracefs_instance *instance)
ret = asprintf(&path, "%s/instances/%s", instance->trace_dir, instance->name);
if (ret < 0) {
- warning("Failed to allocate path for instance %s",
- instance->name);
+ tracefs_warning("Failed to allocate path for instance %s",
+ instance->name);
return NULL;
}
@@ -308,7 +308,7 @@ static int write_file(const char *file, const char *str)
fd = open(file, O_WRONLY | O_TRUNC);
if (fd < 0) {
- warning("Failed to open '%s'", file);
+ tracefs_warning("Failed to open '%s'", file);
return -1;
}
ret = write(fd, str, strlen(str));
diff --git a/src/tracefs-utils.c b/src/tracefs-utils.c
index 0e96f8e..812a41a 100644
--- a/src/tracefs-utils.c
+++ b/src/tracefs-utils.c
@@ -13,7 +13,9 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
+#include <errno.h>
+#include <traceevent/event-utils.h>
#include "tracefs.h"
#include "tracefs-local.h"
@@ -23,8 +25,13 @@
#define _STR(x) #x
#define STR(x) _STR(x)
-void __attribute__((weak)) warning(const char *fmt, ...)
+void __weak tracefs_warning(const char *fmt, ...)
{
+ va_list ap;
+
+ va_start(ap, fmt);
+ tep_vwarning("libtracefs", fmt, ap);
+ va_end(ap);
}
static int mount_tracefs(void)
@@ -76,7 +83,7 @@ __hidden char *trace_find_tracing_dir(void)
fp = fopen("/proc/mounts", "r");
if (!fp) {
- warning("Can't open /proc/mounts for read");
+ tracefs_warning("Can't open /proc/mounts for read");
return NULL;
}
@@ -103,7 +110,7 @@ __hidden char *trace_find_tracing_dir(void)
fspath[PATH_MAX] = 0;
} else {
if (mount_debugfs() < 0) {
- warning("debugfs not mounted, please mount");
+ tracefs_warning("debugfs not mounted, please mount");
free(debug_str);
return NULL;
}
@@ -200,7 +207,7 @@ __hidden int str_read_file(const char *file, char **buffer)
fd = open(file, O_RDONLY);
if (fd < 0) {
- warning("File %s not found", file);
+ tracefs_warning("File %s not found", file);
return -1;
}
@@ -210,7 +217,7 @@ __hidden int str_read_file(const char *file, char **buffer)
continue;
nbuf = realloc(buf, size+r+1);
if (!nbuf) {
- warning("Failed to allocate file buffer");
+ tracefs_warning("Failed to allocate file buffer");
size = -1;
break;
}
--
2.30.2
^ permalink raw reply [flat|nested] only message in thread
only message in thread, back to index
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-08 4:27 [PATCH v2] libtracefs: Implement tracefs_warning() Tzvetomir Stoyanov (VMware)
Linux-Trace-Devel Archive on lore.kernel.org
Archives are clonable:
git clone --mirror https://lore.kernel.org/linux-trace-devel/0 linux-trace-devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 linux-trace-devel linux-trace-devel/ https://lore.kernel.org/linux-trace-devel \
linux-trace-devel@vger.kernel.org
public-inbox-index linux-trace-devel
Example config snippet for mirrors
Newsgroup available over NNTP:
nntp://nntp.lore.kernel.org/org.kernel.vger.linux-trace-devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git