diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-02-12 19:45:22 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-02-12 19:45:22 -0500 |
commit | 4314457fc4de51b5ef5cc2df35f4d669299ae2b8 (patch) | |
tree | b60e5b6d58b2c3f6fa76ed2e3daadade819e2212 /parse-events.c | |
parent | bdeda78cf66c59d38109b033546639ee662cdc3b (diff) |
parse-events: Make input buffer const char *
Make the input buffer that the parse events reads into a const char *.
This will be needed by later patches to make sure the input buffer
does not get modified.
In doing this change, the work around by Johannes Berg needed to
be rewritten, since the push_str modified the input buffer.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'parse-events.c')
-rw-r--r-- | parse-events.c | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/parse-events.c b/parse-events.c index 7b3b440..c5e8080 100644 --- a/parse-events.c +++ b/parse-events.c | |||
@@ -30,11 +30,11 @@ | |||
30 | 30 | ||
31 | #include "parse-events.h" | 31 | #include "parse-events.h" |
32 | 32 | ||
33 | static char *input_buf; | 33 | static const char *input_buf; |
34 | static unsigned long long input_buf_ptr; | 34 | static unsigned long long input_buf_ptr; |
35 | static unsigned long long input_buf_siz; | 35 | static unsigned long long input_buf_siz; |
36 | 36 | ||
37 | static void init_input_buf(char *buf, unsigned long long size) | 37 | static void init_input_buf(const char *buf, unsigned long long size) |
38 | { | 38 | { |
39 | input_buf = buf; | 39 | input_buf = buf; |
40 | input_buf_siz = size; | 40 | input_buf_siz = size; |
@@ -657,26 +657,6 @@ static enum event_type get_type(int ch) | |||
657 | return EVENT_OP; | 657 | return EVENT_OP; |
658 | } | 658 | } |
659 | 659 | ||
660 | static void __push_char(char c) | ||
661 | { | ||
662 | if (input_buf_ptr <= 0) | ||
663 | die("too much pushback"); | ||
664 | input_buf[--input_buf_ptr] = c; | ||
665 | } | ||
666 | |||
667 | static void __push_str(char *s) | ||
668 | { | ||
669 | char *e = s; | ||
670 | |||
671 | while (*e++) | ||
672 | /* nothing */; | ||
673 | e--; | ||
674 | while (s != e) { | ||
675 | e--; | ||
676 | __push_char(*e); | ||
677 | } | ||
678 | } | ||
679 | |||
680 | static int __read_char(void) | 660 | static int __read_char(void) |
681 | { | 661 | { |
682 | if (input_buf_ptr >= input_buf_siz) | 662 | if (input_buf_ptr >= input_buf_siz) |
@@ -693,6 +673,8 @@ static int __peek_char(void) | |||
693 | return input_buf[input_buf_ptr]; | 673 | return input_buf[input_buf_ptr]; |
694 | } | 674 | } |
695 | 675 | ||
676 | static enum event_type force_token(const char *str, char **tok); | ||
677 | |||
696 | static enum event_type __read_token(char **tok) | 678 | static enum event_type __read_token(char **tok) |
697 | { | 679 | { |
698 | char buf[BUFSIZ]; | 680 | char buf[BUFSIZ]; |
@@ -848,24 +830,45 @@ static enum event_type __read_token(char **tok) | |||
848 | if (strcmp(*tok, "LOCAL_PR_FMT") == 0) { | 830 | if (strcmp(*tok, "LOCAL_PR_FMT") == 0) { |
849 | free(*tok); | 831 | free(*tok); |
850 | *tok = NULL; | 832 | *tok = NULL; |
851 | __push_str("\"\%s\" "); | 833 | return force_token("\"\%s\" ", tok); |
852 | return __read_token(tok); | ||
853 | } else if (strcmp(*tok, "STA_PR_FMT") == 0) { | 834 | } else if (strcmp(*tok, "STA_PR_FMT") == 0) { |
854 | free(*tok); | 835 | free(*tok); |
855 | *tok = NULL; | 836 | *tok = NULL; |
856 | __push_str("\" sta:%pM\" "); | 837 | return force_token("\" sta:%pM\" ", tok); |
857 | return __read_token(tok); | ||
858 | } else if (strcmp(*tok, "VIF_PR_FMT") == 0) { | 838 | } else if (strcmp(*tok, "VIF_PR_FMT") == 0) { |
859 | free(*tok); | 839 | free(*tok); |
860 | *tok = NULL; | 840 | *tok = NULL; |
861 | __push_str("\" vif:%p(%d)\" "); | 841 | return force_token("\" vif:%p(%d)\" ", tok); |
862 | return __read_token(tok); | ||
863 | } | 842 | } |
864 | } | 843 | } |
865 | 844 | ||
866 | return type; | 845 | return type; |
867 | } | 846 | } |
868 | 847 | ||
848 | static enum event_type force_token(const char *str, char **tok) | ||
849 | { | ||
850 | const char *save_input_buf; | ||
851 | unsigned long long save_input_buf_ptr; | ||
852 | unsigned long long save_input_buf_siz; | ||
853 | enum event_type type; | ||
854 | |||
855 | /* save off the current input pointers */ | ||
856 | save_input_buf = input_buf; | ||
857 | save_input_buf_ptr = input_buf_ptr; | ||
858 | save_input_buf_siz = input_buf_siz; | ||
859 | |||
860 | init_input_buf(str, strlen(str)); | ||
861 | |||
862 | type = __read_token(tok); | ||
863 | |||
864 | /* reset back to original token */ | ||
865 | input_buf = save_input_buf; | ||
866 | input_buf_ptr = save_input_buf_ptr; | ||
867 | input_buf_siz = save_input_buf_siz; | ||
868 | |||
869 | return type; | ||
870 | } | ||
871 | |||
869 | static void free_token(char *tok) | 872 | static void free_token(char *tok) |
870 | { | 873 | { |
871 | if (tok) | 874 | if (tok) |