Line data Source code
1 : #include "operator.h" 2 : 3 : /** 4 : * Order by operator length (longest first) to avoid matching << when looking for < 5 : */ 6 437 : OperatorType get_operator_type(const char *operator_str) 7 : { 8 : 9 437 : if (operator_str == NULL) 10 : { 11 0 : return UNKNOWN; 12 : } 13 : 14 437 : size_t len = 2; 15 : 16 437 : if (strncmp(operator_str, "&&", len) == 0) 17 : { 18 8 : return AND; 19 : } 20 : 21 429 : if (strncmp(operator_str, "||", len) == 0) 22 : { 23 4 : return OR; 24 : } 25 : 26 425 : if (strncmp(operator_str, ">>", len) == 0) 27 : { 28 4 : return REDIRECTION_APPEND_OUTPUT; 29 : } 30 : 31 421 : if (strncmp(operator_str, "<<", len) == 0) 32 : { 33 4 : return REDIRECTION_APPEND_INPUT; 34 : } 35 : 36 417 : len = 1; 37 : 38 417 : if (strncmp(operator_str, ";", len) == 0) 39 : { 40 10 : return SEMICOLON; 41 : } 42 : 43 407 : if (strncmp(operator_str, "|", len) == 0) 44 : { 45 4 : return PIPE; 46 : } 47 : 48 403 : if (strncmp(operator_str, "&", len) == 0) 49 : { 50 4 : return BACKGROUND; 51 : } 52 : 53 399 : if (strncmp(operator_str, ">", len) == 0) 54 : { 55 4 : return REDIRECTION_OUTPUT; 56 : } 57 : 58 395 : if (strncmp(operator_str, "<", len) == 0) 59 : { 60 4 : return REDIRECTION_INPUT; 61 : } 62 : 63 391 : return UNKNOWN; 64 : } 65 : 66 24 : const char *get_operator_string(OperatorType operator_type) 67 : { 68 : 69 24 : switch (operator_type) 70 : { 71 4 : case AND: 72 4 : return "&&"; 73 2 : case OR: 74 2 : return "||"; 75 2 : case REDIRECTION_APPEND_OUTPUT: 76 2 : return ">>"; 77 2 : case REDIRECTION_APPEND_INPUT: 78 2 : return "<<"; 79 6 : case SEMICOLON: 80 6 : return ";"; 81 2 : case PIPE: 82 2 : return "|"; 83 2 : case BACKGROUND: 84 2 : return "&"; 85 2 : case REDIRECTION_OUTPUT: 86 2 : return ">"; 87 2 : case REDIRECTION_INPUT: 88 2 : return "<"; 89 0 : default: 90 0 : return "UNKNOWN"; 91 : } 92 : }