diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2017-01-14 16:38:08 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2017-02-05 19:02:25 -0500 |
commit | a6f94c132c425bbab543e98fcd19f4ff7519d1b7 (patch) | |
tree | 215135837c0335946b70593877ec5411ba8e6c17 /printf.h | |
parent | 9f1863d45fe596e258596a4b4cc9a4064bcb11d3 (diff) | |
download | bfs-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.h | 62 |
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 |