Move the add_traces_recursive out of the library
authorYannick Brosseau <yannick.brosseau@gmail.com>
Tue, 14 Feb 2012 19:11:45 +0000 (14:11 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 14 Feb 2012 19:11:45 +0000 (14:11 -0500)
The exact API for this function is hard to define, so we move back
the function directly to the converter code where it can serve
as an example for applications who want to use this functionnality.

Signed-off-by: Yannick Brosseau <yannick.brosseau@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
converter/babeltrace.c
include/babeltrace/context.h
lib/context.c

index f83e1e62ba0f656323398467057e13ebeb29a9e8..539734eeaa55df4e3ba23019f8cbe5d9560fef51 100644 (file)
@@ -18,7 +18,7 @@
  * all copies or substantial portions of the Software.
  */
 
-#define _XOPEN_SOURCE 700
+#define _GNU_SOURCE
 #include <config.h>
 #include <babeltrace/babeltrace.h>
 #include <babeltrace/format.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <fcntl.h>
-#include <ftw.h>
-#include <dirent.h>
 #include <unistd.h>
 #include <inttypes.h>
+#include <fts.h>
 
 #include <babeltrace/ctf-ir/metadata.h>        /* for clocks */
 
@@ -303,6 +302,94 @@ end:
 }
 
 
+/*
+ * bt_context_add_traces_recursive: Open a trace recursively
+ *
+ * Find each trace present in the subdirectory starting from the given
+ * path, and add them to the context.
+ *
+ * Return: 0 on success, nonzero on failure.
+ * Unable to open toplevel: failure.
+ * Unable to open some subdirectory or file: warn and continue;
+ */
+int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path,
+               const char *format_str)
+{
+       FTS *tree;
+       FTSENT *node;
+       GArray *trace_ids;
+       char lpath[PATH_MAX];
+       char * const paths[2] = { lpath, NULL };
+       int ret;
+
+       /*
+        * Need to copy path, because fts_open can change it.
+        * It is the pointer array, not the strings, that are constant.
+        */
+       strncpy(lpath, path, PATH_MAX);
+       lpath[PATH_MAX - 1] = '\0';
+
+       tree = fts_open(paths, FTS_NOCHDIR | FTS_LOGICAL, 0);
+       if (tree == NULL) {
+               fprintf(stderr, "[error] [Context] Cannot traverse \"%s\" for reading.\n",
+                               path);
+               return -EINVAL;
+       }
+
+       trace_ids = g_array_new(FALSE, TRUE, sizeof(int));
+
+       while ((node = fts_read(tree))) {
+               int dirfd, metafd;
+
+               if (!(node->fts_info & FTS_D))
+                       continue;
+
+               dirfd = open(node->fts_accpath, 0);
+               if (dirfd < 0) {
+                       fprintf(stderr, "[error] [Context] Unable to open trace "
+                               "directory file descriptor.\n");
+                       ret = dirfd;
+                       goto error;
+               }
+               metafd = openat(dirfd, "metadata", O_RDONLY);
+               if (metafd < 0) {
+                       ret = close(dirfd);
+                       if (ret < 0) {
+                               perror("close");
+                               goto error;
+                       }
+               } else {
+                       int trace_id;
+
+                       ret = close(metafd);
+                       if (ret < 0) {
+                               perror("close");
+                               goto error;
+                       }
+                       ret = close(dirfd);
+                       if (ret < 0) {
+                               perror("close");
+                               goto error;
+                       }
+
+                       trace_id = bt_context_add_trace(ctx,
+                               node->fts_accpath, format_str);
+                       if (trace_id < 0) {
+                               fprintf(stderr, "[error] [Context] opening trace \"%s\" from %s "
+                                       "for reading.\n", node->fts_accpath, path);
+                               ret = trace_id;
+                               goto error;
+                       }
+                       g_array_append_val(trace_ids, trace_id);
+               }
+       }
+
+       g_array_free(trace_ids, TRUE);
+       return 0;
+
+error:
+       return ret;
+}
 
 
 
index 99e034805160da3ccfcf6eaab2fea5276f273c0d..32282cf4cc7acb7f91e275da6bbb7f852257751a 100644 (file)
@@ -46,17 +46,6 @@ struct bt_context *bt_context_create(void);
 int bt_context_add_trace(struct bt_context *ctx, const char *path,
                const char *format);
 
-/*
- * bt_context_add_traces_recursive: Open a trace recursively
- *
- * Find each trace present in the subdirectory starting from the given
- * path, and add them to the context.
- *
- * Return: 0 on success, nonzero on failure.
- */
-int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path,
-               const char *format);
-
 /*
  * bt_context_remove_trace: Remove a trace from the context.
  *
index 3cbafa07c5ba6b09e6af94653d480accda2038f2..5408bc81c942c5ceead7a951b164e8b60c4d46f4 100644 (file)
@@ -91,89 +91,6 @@ int bt_context_add_trace(struct bt_context *ctx, const char *path,
        return trace_collection_add(ctx->tc, td);
 }
 
-/*
- * Unable to open toplevel: failure.
- * Unable to open some subdirectory or file: warn and continue;
- */
-int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path,
-               const char *format_str)
-{
-       FTS *tree;
-       FTSENT *node;
-       GArray *trace_ids;
-       char lpath[PATH_MAX];
-       char * const paths[2] = { lpath, NULL };
-       int ret;
-
-       /*
-        * Need to copy path, because fts_open can change it.
-        * It is the pointer array, not the strings, that are constant.
-        */
-       strncpy(lpath, path, PATH_MAX);
-       lpath[PATH_MAX - 1] = '\0';
-
-       tree = fts_open(paths, FTS_NOCHDIR | FTS_LOGICAL, 0);
-       if (tree == NULL) {
-               fprintf(stderr, "[error] [Context] Cannot traverse \"%s\" for reading.\n",
-                               path);
-               return -EINVAL;
-       }
-
-       trace_ids = g_array_new(FALSE, TRUE, sizeof(int));
-
-       while ((node = fts_read(tree))) {
-               int dirfd, metafd;
-
-               if (!(node->fts_info & FTS_D))
-                       continue;
-
-               dirfd = open(node->fts_accpath, 0);
-               if (dirfd < 0) {
-                       fprintf(stderr, "[error] [Context] Unable to open trace "
-                               "directory file descriptor.\n");
-                       ret = dirfd;
-                       goto error;
-               }
-               metafd = openat(dirfd, "metadata", O_RDONLY);
-               if (metafd < 0) {
-                       ret = close(dirfd);
-                       if (ret < 0) {
-                               perror("close");
-                               goto error;
-                       }
-               } else {
-                       int trace_id;
-
-                       ret = close(metafd);
-                       if (ret < 0) {
-                               perror("close");
-                               goto error;
-                       }
-                       ret = close(dirfd);
-                       if (ret < 0) {
-                               perror("close");
-                               goto error;
-                       }
-
-                       trace_id = bt_context_add_trace(ctx,
-                               node->fts_accpath, format_str);
-                       if (trace_id < 0) {
-                               fprintf(stderr, "[error] [Context] opening trace \"%s\" from %s "
-                                       "for reading.\n", node->fts_accpath, path);
-                               ret = trace_id;
-                               goto error;
-                       }
-                       g_array_append_val(trace_ids, trace_id);
-               }
-       }
-
-       g_array_free(trace_ids, TRUE);
-       return 0;
-
-error:
-       return ret;
-}
-
 void bt_context_remove_trace(struct bt_context *ctx, int handle_id)
 {
        struct bt_trace_handle *handle;
This page took 0.027227 seconds and 4 git commands to generate.