975431a6e08b66bd9604d266f8ec5be2f2b54860
[sip-router] / trim.h
1 /* $Id$ */
2
3 #ifndef TRIM_H
4 #define TRIM_H
5
6 #include "str.h"
7
8
9 /*
10  * This switch-case statement is used in
11  * trim_leading and trim_trailing. You can
12  * define char that should be skipped here.
13  */
14 #define TRIM_SWITCH(c) switch(c) {     \
15                        case ' ':       \
16                        case '\t':      \
17                        case '\r':      \
18                        case '\n':      \
19                                break;  \
20                                        \
21                        default:        \
22                                return; \
23                        }
24
25
26 /*
27  * Remove any leading whitechars, like spaces,
28  * horizontal tabs, carriage returns and line
29  * feeds
30  *
31  * WARNING: String descriptor structure will be
32  *          modified ! Make a copy otherwise you
33  *          might be unable to free _s->s for
34  *          example !
35  *
36  */
37 static inline void trim_leading(str* _s)
38 {
39         for(; _s->len > 0; _s->len--, _s->s++) {
40                 TRIM_SWITCH(*(_s->s));
41         }
42 }
43
44
45 /*
46  * Remove any trailing white char, like spaces,
47  * horizontal tabs, carriage returns and line feeds
48  *
49  * WARNING: String descriptor structure will be
50  *          modified ! Make a copy otherwise you
51  *          might be unable to free _s->s for
52  *          example !
53  */
54 static inline void trim_trailing(str* _s)
55 {
56         for(; _s->len > 0; _s->len--) {
57                 TRIM_SWITCH(_s->s[_s->len - 1]);
58         }
59 }
60
61
62 /*
63  * Do trim_leading and trim_trailing
64  *
65  * WARNING: String structure will be modified !
66  *          Make a copy otherwise you might be
67  *          unable to free _s->s for example !
68  */
69 static inline void trim(str* _s)
70 {
71         trim_leading(_s);
72         trim_trailing(_s);
73 }
74
75
76 #endif /* TRIM_H */