Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright 2001-2004 Brandon Long
      3  * All Rights Reserved.
      4  *
      5  * ClearSilver Templating System
      6  *
      7  * This code is made available under the terms of the ClearSilver License.
      8  * http://www.clearsilver.net/license.hdf
      9  *
     10  */
     11 
     12 #ifndef __NEO_STR_H_
     13 #define __NEO_STR_H_ 1
     14 
     15 __BEGIN_DECLS
     16 
     17 #include <stdarg.h>
     18 #include <stdio.h>
     19 #include "util/neo_misc.h"
     20 
     21 /* This modifies the string its called with by replacing all the white
     22  * space on the end with \0, and returns a pointer to the first
     23  * non-white space character in the string
     24  */
     25 char *neos_strip (char *s);
     26 
     27 void neos_lower (char *s);
     28 
     29 char *sprintf_alloc (const char *fmt, ...) ATTRIBUTE_PRINTF(1,2);
     30 char *nsprintf_alloc (int start_size, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3);
     31 char *vsprintf_alloc (const char *fmt, va_list ap);
     32 char *vnsprintf_alloc (int start_size, const char *fmt, va_list ap);
     33 
     34 /* Versions of the above which actually return a length, necessary if
     35  * you expect embedded NULLs */
     36 int vnisprintf_alloc (char **buf, int start_size, const char *fmt, va_list ap);
     37 int visprintf_alloc (char **buf, const char *fmt, va_list ap);
     38 int isprintf_alloc (char **buf, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3);
     39 
     40 typedef struct _string
     41 {
     42   char *buf;
     43   int len;
     44   int max;
     45 } STRING;
     46 
     47 typedef struct _string_array
     48 {
     49   char **entries;
     50   int count;
     51   int max;
     52 } STRING_ARRAY;
     53 
     54 /* At some point, we should add the concept of "max len" to these so we
     55  * can't get DoS'd by someone sending us a line without an end point,
     56  * etc. */
     57 void string_init (STRING *str);
     58 NEOERR *string_set (STRING *str, const char *buf);
     59 NEOERR *string_append (STRING *str, const char *buf);
     60 NEOERR *string_appendn (STRING *str, const char *buf, int l);
     61 NEOERR *string_append_char (STRING *str, char c);
     62 NEOERR *string_appendf (STRING *str, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3);
     63 NEOERR *string_appendvf (STRING *str, const char *fmt, va_list ap);
     64 NEOERR *string_readline (STRING *str, FILE *fp);
     65 void string_clear (STRING *str);
     66 
     67 /* typedef struct _ulist ULIST; */
     68 #include "util/ulist.h"
     69 /* s is not const because we actually temporarily modify the string
     70  * during split */
     71 NEOERR *string_array_split (ULIST **list, char *s, const char *sep,
     72                             int max);
     73 
     74 BOOL reg_search (const char *re, const char *str);
     75 
     76 /* NEOS_ESCAPE details the support escape contexts/modes handled
     77  * by various NEOS helper methods and reused in CS itself. */
     78 typedef enum
     79 {
     80   NEOS_ESCAPE_UNDEF    =  0,    /* Used to force eval-time checking */
     81   NEOS_ESCAPE_NONE     =  1<<0,
     82   NEOS_ESCAPE_HTML     =  1<<1,
     83   NEOS_ESCAPE_SCRIPT   =  1<<2,
     84   NEOS_ESCAPE_URL      =  1<<3,
     85   NEOS_ESCAPE_FUNCTION =  1<<4  /* Special case used to override the others */
     86 } NEOS_ESCAPE;
     87 
     88 NEOERR* neos_escape(UINT8 *buf, int buflen, char esc_char, const char *escape,
     89                     char **esc);
     90 UINT8 *neos_unescape (UINT8 *s, int buflen, char esc_char);
     91 
     92 char *repr_string_alloc (const char *s);
     93 
     94 /* This is the "super" escape call which will call the proper helper
     95  * variable escape function based on the passed in context. */
     96 NEOERR *neos_var_escape (NEOS_ESCAPE context,
     97                          const char *in,
     98                          char **esc);
     99 
    100 /* Generic data escaping helper functions used by neos_contextual_escape
    101  * and cs built-ins. */
    102 NEOERR *neos_url_escape (const char *in, char **esc,
    103                          const char *other);
    104 
    105 NEOERR *neos_js_escape (const char *in, char **esc);
    106 
    107 NEOERR *neos_html_escape (const char *src, int slen,
    108                           char **out);
    109 
    110 NEOERR *neos_url_validate (const char *in, char **esc);
    111 
    112 __END_DECLS
    113 
    114 #endif /* __NEO_STR_H_ */
    115