summaryrefslogtreecommitdiffstats
path: root/printf.h
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2017-01-14 16:38:08 -0500
committerTavian Barnes <tavianator@tavianator.com>2017-02-05 19:02:25 -0500
commita6f94c132c425bbab543e98fcd19f4ff7519d1b7 (patch)
tree215135837c0335946b70593877ec5411ba8e6c17 /printf.h
parent9f1863d45fe596e258596a4b4cc9a4064bcb11d3 (diff)
downloadbfs-a6f94c132c425bbab543e98fcd19f4ff7519d1b7.tar.xz
Implement -printf/-fprintf
Based on a patch by Fangrui Song <i@maskray.me>. Closes #16.
Diffstat (limited to 'printf.h')
-rw-r--r--printf.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/printf.h b/printf.h
new file mode 100644
index 0000000..34eda0a
--- /dev/null
+++ b/printf.h
@@ -0,0 +1,62 @@
+/*********************************************************************
+ * bfs *
+ * Copyright (C) 2017 Tavian Barnes <tavianator@tavianator.com> *
+ * *
+ * This program is free software. It comes without any warranty, to *
+ * the extent permitted by applicable law. You can redistribute it *
+ * and/or modify it under the terms of the Do What The Fuck You Want *
+ * To Public License, Version 2, as published by Sam Hocevar. See *
+ * the COPYING file or http://www.wtfpl.net/ for more details. *
+ *********************************************************************/
+
+#ifndef BFS_PRINTF_H
+#define BFS_PRINTF_H
+
+#include "bftw.h"
+#include "color.h"
+#include <stdbool.h>
+#include <stdio.h>
+
+struct bfs_printf_directive;
+
+/**
+ * A printf command, the result of parsing a single format string.
+ */
+struct bfs_printf {
+ /** The chain of printf directives. */
+ struct bfs_printf_directive *directives;
+ /** Whether the struct stat must be filled in. */
+ bool needs_stat;
+};
+
+/**
+ * Parse a -printf format string.
+ *
+ * @param format
+ * The format string to parse.
+ * @param stderr_colors
+ * Color table for printing error messages.
+ * @return The parsed printf command, or NULL on failure.
+ */
+struct bfs_printf *parse_bfs_printf(const char *format, const struct colors *stderr_colors);
+
+/**
+ * Evaluate a parsed format string.
+ *
+ * @param file
+ * The FILE to print to.
+ * @param command
+ * The parsed printf format.
+ * @param ftwbuf
+ * The bftw() data for the current file. If needs_stat is true, statbuf
+ * must be non-NULL.
+ * @return 0 on success, -1 on failure.
+ */
+int bfs_printf(FILE *file, const struct bfs_printf *command, const struct BFTW *ftwbuf);
+
+/**
+ * Free a parsed format string.
+ */
+void free_bfs_printf(struct bfs_printf *command);
+
+#endif // BFS_PRINTF_H