| /* |
| * Copyright 2001-2004 Brandon Long |
| * All Rights Reserved. |
| * |
| * ClearSilver Templating System |
| * |
| * This code is made available under the terms of the ClearSilver License. |
| * http://www.clearsilver.net/license.hdf |
| * |
| */ |
| |
| #ifndef __NEO_STR_H_ |
| #define __NEO_STR_H_ 1 |
| |
| __BEGIN_DECLS |
| |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include "util/neo_misc.h" |
| |
| /* This modifies the string its called with by replacing all the white |
| * space on the end with \0, and returns a pointer to the first |
| * non-white space character in the string |
| */ |
| char *neos_strip (char *s); |
| |
| void neos_lower (char *s); |
| |
| char *sprintf_alloc (const char *fmt, ...) ATTRIBUTE_PRINTF(1,2); |
| char *nsprintf_alloc (int start_size, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3); |
| char *vsprintf_alloc (const char *fmt, va_list ap); |
| char *vnsprintf_alloc (int start_size, const char *fmt, va_list ap); |
| |
| /* Versions of the above which actually return a length, necessary if |
| * you expect embedded NULLs */ |
| int vnisprintf_alloc (char **buf, int start_size, const char *fmt, va_list ap); |
| int visprintf_alloc (char **buf, const char *fmt, va_list ap); |
| int isprintf_alloc (char **buf, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3); |
| |
| typedef struct _string |
| { |
| char *buf; |
| int len; |
| int max; |
| } STRING; |
| |
| typedef struct _string_array |
| { |
| char **entries; |
| int count; |
| int max; |
| } STRING_ARRAY; |
| |
| /* At some point, we should add the concept of "max len" to these so we |
| * can't get DoS'd by someone sending us a line without an end point, |
| * etc. */ |
| void string_init (STRING *str); |
| NEOERR *string_set (STRING *str, const char *buf); |
| NEOERR *string_append (STRING *str, const char *buf); |
| NEOERR *string_appendn (STRING *str, const char *buf, int l); |
| NEOERR *string_append_char (STRING *str, char c); |
| NEOERR *string_appendf (STRING *str, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3); |
| NEOERR *string_appendvf (STRING *str, const char *fmt, va_list ap); |
| NEOERR *string_readline (STRING *str, FILE *fp); |
| void string_clear (STRING *str); |
| |
| /* typedef struct _ulist ULIST; */ |
| #include "util/ulist.h" |
| /* s is not const because we actually temporarily modify the string |
| * during split */ |
| NEOERR *string_array_split (ULIST **list, char *s, const char *sep, |
| int max); |
| |
| BOOL reg_search (const char *re, const char *str); |
| |
| /* NEOS_ESCAPE details the support escape contexts/modes handled |
| * by various NEOS helper methods and reused in CS itself. */ |
| typedef enum |
| { |
| NEOS_ESCAPE_UNDEF = 0, /* Used to force eval-time checking */ |
| NEOS_ESCAPE_NONE = 1<<0, |
| NEOS_ESCAPE_HTML = 1<<1, |
| NEOS_ESCAPE_SCRIPT = 1<<2, |
| NEOS_ESCAPE_URL = 1<<3, |
| NEOS_ESCAPE_FUNCTION = 1<<4 /* Special case used to override the others */ |
| } NEOS_ESCAPE; |
| |
| NEOERR* neos_escape(UINT8 *buf, int buflen, char esc_char, const char *escape, |
| char **esc); |
| UINT8 *neos_unescape (UINT8 *s, int buflen, char esc_char); |
| |
| char *repr_string_alloc (const char *s); |
| |
| /* This is the "super" escape call which will call the proper helper |
| * variable escape function based on the passed in context. */ |
| NEOERR *neos_var_escape (NEOS_ESCAPE context, |
| const char *in, |
| char **esc); |
| |
| /* Generic data escaping helper functions used by neos_contextual_escape |
| * and cs built-ins. */ |
| NEOERR *neos_url_escape (const char *in, char **esc, |
| const char *other); |
| |
| NEOERR *neos_js_escape (const char *in, char **esc); |
| |
| NEOERR *neos_html_escape (const char *src, int slen, |
| char **out); |
| |
| NEOERR *neos_url_validate (const char *in, char **esc); |
| |
| __END_DECLS |
| |
| #endif /* __NEO_STR_H_ */ |