/* ----------------------------------------------------------------------- *
 *
 *   Copyright 2001-2007 H. Peter Anvin - All Rights Reserved
 *
 *   This program is free software available under the same license
 *   as the "OpenBSD" operating system, distributed at
 *   http://www.openbsd.org/.
 *
 * ----------------------------------------------------------------------- */

/*
 * remap.h
 *
 * Prototypes for regular-expression based filename remapping.
 */

#ifndef TFTPD_REMAP_H
#define TFTPD_REMAP_H

/* Opaque type */
struct rule;

#ifdef WITH_REGEX

/* This is called when we encounter a substitution like \i.  The
   macro character is passed as the first argument; the output buffer,
   if any, is passed as the second argument.  The function should return
   the number of characters output, or -1 on failure. */
typedef int (*match_pattern_callback) (char, char *);

/* Read a rule file */
struct rule *parserulefile(FILE *);

/* Destroy a rule file data structure */
void freerules(struct rule *);

/* Execute a rule set on a string; returns a malloc'd new string. */
char *rewrite_string(const char *, const struct rule *, int,
                     match_pattern_callback, const char **);

#endif                          /* WITH_REGEX */
#endif                          /* TFTPD_REMAP_H */
