Przeglądaj źródła

pv: transformation to escape/unescape cr lf

- {s.escape.crlf}, {s.unescape.crlf}
Daniel-Constantin Mierla 1 rok temu
rodzic
commit
ed60be1629
2 zmienionych plików z 34 dodań i 0 usunięć
  1. 32 0
      src/modules/pv/pv_trans.c
  2. 2 0
      src/modules/pv/pv_trans.h

+ 32 - 0
src/modules/pv/pv_trans.c

@@ -566,6 +566,32 @@ int tr_eval_string(
 			val->rs.s = _tr_buffer;
 			val->rs.s = _tr_buffer;
 			val->rs.len = i;
 			val->rs.len = i;
 			break;
 			break;
+		case TR_S_ESCAPECRLF:
+			if(!(val->flags & PV_VAL_STR))
+				val->rs.s = int2str(val->ri, &val->rs.len);
+			if(val->rs.len > TR_BUFFER_SIZE / 2 - 1)
+				return -1;
+			st.s = _tr_buffer;
+			st.len = TR_BUFFER_SIZE;
+			if(escape_crlf(&val->rs, &st))
+				return -1;
+			memset(val, 0, sizeof(pv_value_t));
+			val->flags = PV_VAL_STR;
+			val->rs = st;
+			break;
+		case TR_S_UNESCAPECRLF:
+			if(!(val->flags & PV_VAL_STR))
+				val->rs.s = int2str(val->ri, &val->rs.len);
+			if(val->rs.len > TR_BUFFER_SIZE - 1)
+				return -1;
+			st.s = _tr_buffer;
+			st.len = TR_BUFFER_SIZE;
+			if(unescape_crlf(&val->rs, &st))
+				return -1;
+			memset(val, 0, sizeof(pv_value_t));
+			val->flags = PV_VAL_STR;
+			val->rs = st;
+			break;
 		case TR_S_ESCAPEUSER:
 		case TR_S_ESCAPEUSER:
 			if(!(val->flags & PV_VAL_STR))
 			if(!(val->flags & PV_VAL_STR))
 				val->rs.s = int2str(val->ri, &val->rs.len);
 				val->rs.s = int2str(val->ri, &val->rs.len);
@@ -2768,6 +2794,12 @@ char *tr_parse_string(str *in, trans_t *t)
 			  && strncasecmp(name.s, "unescape.common", 15) == 0) {
 			  && strncasecmp(name.s, "unescape.common", 15) == 0) {
 		t->subtype = TR_S_UNESCAPECOMMON;
 		t->subtype = TR_S_UNESCAPECOMMON;
 		goto done;
 		goto done;
+	} else if(name.len == 11 && strncasecmp(name.s, "escape.crlf", 11) == 0) {
+		t->subtype = TR_S_ESCAPECRLF;
+		goto done;
+	} else if(name.len == 13 && strncasecmp(name.s, "unescape.crlf", 13) == 0) {
+		t->subtype = TR_S_UNESCAPECRLF;
+		goto done;
 	} else if(name.len == 11 && strncasecmp(name.s, "escape.user", 11) == 0) {
 	} else if(name.len == 11 && strncasecmp(name.s, "escape.user", 11) == 0) {
 		t->subtype = TR_S_ESCAPEUSER;
 		t->subtype = TR_S_ESCAPEUSER;
 		goto done;
 		goto done;

+ 2 - 0
src/modules/pv/pv_trans.h

@@ -60,6 +60,8 @@ enum _tr_s_subtype
 	TR_S_DECODEBASE64,
 	TR_S_DECODEBASE64,
 	TR_S_ESCAPECOMMON,
 	TR_S_ESCAPECOMMON,
 	TR_S_UNESCAPECOMMON,
 	TR_S_UNESCAPECOMMON,
+	TR_S_ESCAPECRLF,
+	TR_S_UNESCAPECRLF,
 	TR_S_ESCAPEUSER,
 	TR_S_ESCAPEUSER,
 	TR_S_UNESCAPEUSER,
 	TR_S_UNESCAPEUSER,
 	TR_S_ESCAPEPARAM,
 	TR_S_ESCAPEPARAM,