From a6f94c132c425bbab543e98fcd19f4ff7519d1b7 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 14 Jan 2017 16:38:08 -0500 Subject: Implement -printf/-fprintf Based on a patch by Fangrui Song . Closes #16. --- printf.h | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 printf.h (limited to 'printf.h') 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 * + * * + * 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 +#include + +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 -- cgit v1.2.3