瀏覽代碼

ZSW introduced to deal with solaris printf("%.*s",0,0) SF

Jiri Kuthan 22 年之前
父節點
當前提交
6b6f226fd0
共有 10 個文件被更改,包括 124 次插入95 次删除
  1. 4 2
      parser/hf.c
  2. 31 28
      parser/msg_parser.c
  3. 6 1
      parser/parse_event.c
  4. 6 1
      parser/parse_expires.c
  5. 5 3
      parser/parse_fline.c
  6. 4 2
      parser/parse_nameaddr.c
  7. 23 19
      parser/parse_to.c
  8. 29 28
      parser/parse_uri.c
  9. 7 6
      parser/parse_via.c
  10. 9 5
      ut.h

+ 4 - 2
parser/hf.c

@@ -27,6 +27,7 @@
  * History:
  * -------
  * 2003-03-26 Frees also hdr->parsed for Route & Record-Route (janakj)
+ * 2003-04-26 ZSW (jiri)
  */
 
 
@@ -42,6 +43,7 @@
 #include "parse_expires.h"
 #include "parse_rr.h"
 #include "contact/parse_contact.h"
+#include "../ut.h"
 
 
 /* 
@@ -122,8 +124,8 @@ void dump_hdr_field( struct hdr_field* hf )
 {
 	LOG(L_ERR, "DEBUG: dump_hdr_field: type=%d, name=%.*s, "
 		"body=%.*s, parsed=%p, next=%p\n",
-		hf->type, hf->name.len, hf->name.s,
-		hf->body.len, hf->body.s,
+		hf->type, hf->name.len, ZSW(hf->name.s),
+		hf->body.len, ZSW(hf->body.s),
 		hf->parsed, hf->next );
 }
 

+ 31 - 28
parser/msg_parser.c

@@ -33,6 +33,7 @@
  *  2003-01-29  scrathcpad removed (jiri)
  *  2003-01-27  next baby-step to removing ZT - PRESERVE_ZT (jiri)
  *  2003-03-31  removed msg->repl_add_rm (andrei)
+ *  2003-04-26 ZSW (jiri)
  */
 
 
@@ -139,8 +140,8 @@ char* get_hdr_field(char* buf, char* end, struct hdr_field* hdr)
 			hdr->parsed=cseq_b;
 			hdr->body.len=tmp-hdr->body.s;
 			DBG("get_hdr_field: cseq <%.*s>: <%.*s> <%.*s>\n",
-					hdr->name.len, hdr->name.s, 
-					cseq_b->number.len, cseq_b->number.s, 
+					hdr->name.len, ZSW(hdr->name.s), 
+					cseq_b->number.len, ZSW(cseq_b->number.s), 
 					cseq_b->method.len, cseq_b->method.s);
 			break;
 		case HDR_TO:
@@ -160,9 +161,10 @@ char* get_hdr_field(char* buf, char* end, struct hdr_field* hdr)
 			hdr->parsed=to_b;
 			hdr->body.len=tmp-hdr->body.s;
 			DBG("DEBUG: get_hdr_field: <%.*s> [%d]; uri=[%.*s] \n",
-				hdr->name.len, hdr->name.s, 
-				hdr->body.len, to_b->uri.len,to_b->uri.s);
-			DBG("DEBUG: to body [%.*s]\n",to_b->body.len,to_b->body.s);
+				hdr->name.len, ZSW(hdr->name.s), 
+				hdr->body.len, to_b->uri.len,ZSW(to_b->uri.s));
+			DBG("DEBUG: to body [%.*s]\n",to_b->body.len,
+				ZSW(to_b->body.s));
 			break;
 		case HDR_CONTENTLENGTH:
 			hdr->body.s=tmp;
@@ -398,8 +400,8 @@ int parse_headers(struct sip_msg* msg, int flags, int next)
 #ifdef EXTRA_DEBUG
 		DBG("header field type %d, name=<%.*s>, body=<%.*s>\n",
 			hf->type, 
-			hf->name.len, hf->name.s, 
-			hf->body.len, hf->body.s);
+			hf->name.len, ZSW(hf->name.s), 
+			hf->body.len, ZSW(hf->body.s));
 #endif
 		tmp=rest;
 	}
@@ -449,21 +451,21 @@ int parse_msg(char* buf, unsigned int len, struct sip_msg* msg)
 		case SIP_REQUEST:
 			DBG("SIP Request:\n");
 			DBG(" method:  <%.*s>\n",fl->u.request.method.len,
-				fl->u.request.method.s);
+				ZSW(fl->u.request.method.s));
 			DBG(" uri:     <%.*s>\n",fl->u.request.uri.len,
-				fl->u.request.uri.s);
+				ZSW(fl->u.request.uri.s));
 			DBG(" version: <%.*s>\n",fl->u.request.version.len,
-				fl->u.request.version.s);
+				ZSW(fl->u.request.version.s));
 			flags=HDR_VIA;
 			break;
 		case SIP_REPLY:
 			DBG("SIP Reply  (status):\n");
 			DBG(" version: <%.*s>\n",fl->u.reply.version.len,
-					fl->u.reply.version.s);
+					ZSW(fl->u.reply.version.s));
 			DBG(" status:  <%.*s>\n", fl->u.reply.status.len,
-					fl->u.reply.status.s);
+					ZSW(fl->u.reply.status.s));
 			DBG(" reason:  <%.*s>\n", fl->u.reply.reason.len,
-					fl->u.reply.reason.s);
+					ZSW(fl->u.reply.reason.s));
 			/* flags=HDR_VIA | HDR_VIA2; */
 			/* we don't try to parse VIA2 for local messages; -Jiri */
 			flags=HDR_VIA;
@@ -483,40 +485,40 @@ int parse_msg(char* buf, unsigned int len, struct sip_msg* msg)
 	if (msg->via1){
 		DBG(" first  via: <%.*s/%.*s/%.*s> <%.*s:%.*s(%d)>",
 			msg->via1->name.len, 
-			msg->via1->name.s, 
+			ZSW(msg->via1->name.s), 
 			msg->via1->version.len,
-			msg->via1->version.s,
+			ZSW(msg->via1->version.s),
 			msg->via1->transport.len,
-			msg->via1->transport.s, 
+			ZSW(msg->via1->transport.s), 
 			msg->via1->host.len,
-			msg->via1->host.s,
+			ZSW(msg->via1->host.s),
 			msg->via1->port_str.len, 
-			msg->via1->port_str.s, 
+			ZSW(msg->via1->port_str.s), 
 			msg->via1->port);
 		if (msg->via1->params.s)  DBG(";<%.*s>", 
-				msg->via1->params.len, msg->via1->params.s);
+				msg->via1->params.len, ZSW(msg->via1->params.s));
 		if (msg->via1->comment.s) 
 				DBG(" <%.*s>", 
-					msg->via1->comment.len, msg->via1->comment.s);
+					msg->via1->comment.len, ZSW(msg->via1->comment.s));
 		DBG ("\n");
 	}
 	if (msg->via2){
 		DBG(" first  via: <%.*s/%.*s/%.*s> <%.*s:%.*s(%d)>",
 			msg->via2->name.len, 
-			msg->via2->name.s, 
+			ZSW(msg->via2->name.s), 
 			msg->via2->version.len,
-			msg->via2->version.s,
+			ZSW(msg->via2->version.s),
 			msg->via2->transport.len, 
-			msg->via2->transport.s, 
+			ZSW(msg->via2->transport.s), 
 			msg->via2->host.len,
-			msg->via2->host.s,
+			ZSW(msg->via2->host.s),
 			msg->via2->port_str.len, 
-			msg->via2->port_str.s, 
+			ZSW(msg->via2->port_str.s), 
 			msg->via2->port);
 		if (msg->via2->params.s)  DBG(";<%.*s>", 
-				msg->via2->params.len, msg->via2->params.s);
+				msg->via2->params.len, ZSW(msg->via2->params.s));
 		if (msg->via2->comment.s) DBG(" <%.*s>", 
-				msg->via2->comment.len, msg->via2->comment.s);
+				msg->via2->comment.len, ZSW(msg->via2->comment.s));
 		DBG ("\n");
 	}
 #endif
@@ -530,7 +532,8 @@ int parse_msg(char* buf, unsigned int len, struct sip_msg* msg)
 	
 error:
 	/* more debugging, msg->orig is/should be null terminated*/
-	LOG(L_ERR, "ERROR: parse_msg: message=<%.*s>\n", (int)msg->len, msg->buf);
+	LOG(L_ERR, "ERROR: parse_msg: message=<%.*s>\n", 
+			(int)msg->len, ZSW(msg->buf));
 	return -1;
 }
 

+ 6 - 1
parser/parse_event.c

@@ -29,6 +29,10 @@
  * You should have received a copy of the GNU General Public License 
  * along with this program; if not, write to the Free Software 
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * History:
+ * --------
+ * 2003-04-26 ZSW (jiri)
  */
 
 
@@ -38,6 +42,7 @@
 #include <string.h>        /* memset */
 #include "../trim.h"       /* trim_leading */
 #include <stdio.h>         /* printf */
+#include "../ut.h"
 
 
 #define PRES_STR "presence"
@@ -142,7 +147,7 @@ void free_event(event_t** _e)
 void print_event(event_t* _e)
 {
 	printf("===Event===\n");
-	printf("text  : \'%.*s\'\n", _e->text.len, _e->text.s);
+	printf("text  : \'%.*s\'\n", _e->text.len, ZSW(_e->text.s));
 	printf("parsed: %s\n", 
 	       (_e->parsed == EVENT_PRESENCE) ? ("EVENT_PRESENCE") : ("EVENT_OTHER"));
 	printf("===/Event===\n");

+ 6 - 1
parser/parse_expires.c

@@ -25,6 +25,10 @@
  * You should have received a copy of the GNU General Public License 
  * along with this program; if not, write to the Free Software 
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * History:
+ * --------
+ * 2003-04-26 ZSW (jiri)
  */
 
 
@@ -34,6 +38,7 @@
 #include "../dprint.h"
 #include "../trim.h"        /* trim_leading */
 #include <string.h>         /* memset */
+#include "../ut.h"
 
 
 static inline int expires_parser(char* _s, int _l, exp_body_t* _e)
@@ -134,7 +139,7 @@ void free_expires(exp_body_t** _e)
 void print_expires(exp_body_t* _e)
 {
 	printf("===Expires===\n");
-	printf("text: \'%.*s\'\n", _e->text.len, _e->text.s);
+	printf("text: \'%.*s\'\n", _e->text.len, ZSW(_e->text.s));
 	printf("val : %d\n", _e->val);
 	printf("===/Expires===\n");
 }

+ 5 - 3
parser/parse_fline.c

@@ -31,6 +31,7 @@
  * ---------
  * 2003-02-28 scratchpad compatibility abandoned (jiri)
  * 2003-01-28: removed 0-terminators from first line (jiri)
+ * 2003-04-26 ZSW (jiri)
  */
 
 
@@ -39,6 +40,7 @@
 #include "msg_parser.h"
 #include "parser_f.h"
 #include "../mem/mem.h"
+#include "../ut.h"
 
 /* grammar:
 	request  =  method SP uri SP version CRLF
@@ -1242,7 +1244,7 @@ char* parse_first_line(char* buffer, unsigned int len, struct msg_start * fl)
 	if (fl->type==SIP_REPLY) {
 		if (fl->u.request.uri.len!=3) {
 			LOG(L_INFO, "ERROR:parse_first_line: len(status code)!=3: %.*s\n",
-				fl->u.request.uri.len, second );
+				fl->u.request.uri.len, ZSW(second) );
 			goto error;
 		}
 		s1=*second; s2=*(second+1);s3=*(second+2);
@@ -1252,7 +1254,7 @@ char* parse_first_line(char* buffer, unsigned int len, struct msg_start * fl)
 			fl->u.reply.statuscode=(s1-'0')*100+10*(s2-'0')+(s3-'0');
 		} else {
 			LOG(L_INFO, "ERROR:parse_first_line: status_code non-numerical: %.*s\n",
-				fl->u.request.uri.len, second );
+				fl->u.request.uri.len, ZSW(second) );
 			goto error;
 		}
 	}
@@ -1298,7 +1300,7 @@ error:
 		for (t=0; t<offset; t++)
 			if (*(buffer+t)) *(prn+t)=*(buffer+t);
 			else *(prn+t)='°';
-		LOG(L_INFO, "ERROR: parsed so far: %.*s\n", offset, prn );
+		LOG(L_INFO, "ERROR: parsed so far: %.*s\n", offset, ZSW(prn) );
 		pkg_free( prn );
 	};
 error1:

+ 4 - 2
parser/parse_nameaddr.c

@@ -27,12 +27,14 @@
  * History
  * --------
  * 2003-03-24 Created by janakj
+ * 2003-04-26 ZSW (jiri)
  */
 
 #include <string.h>
 #include "../dprint.h"
 #include "parse_nameaddr.h"
 #include "parser_f.h"
+#include "../ut.h"
 
 
 /*
@@ -81,7 +83,7 @@ int parse_nameaddr(str* _s, name_addr_t* _a)
 void print_nameaddr(FILE* _o, name_addr_t* _a)
 {
 	fprintf(_o, "---name-addr---\n");
-	fprintf(_o, "name: '%.*s'\n", _a->name.len, _a->name.s);
-	fprintf(_o, "uri : '%.*s'\n", _a->uri.len, _a->uri.s);
+	fprintf(_o, "name: '%.*s'\n", _a->name.len, ZSW(_a->name.s));
+	fprintf(_o, "uri : '%.*s'\n", _a->uri.len, ZSW(_a->uri.s));
 	fprintf(_o, "---/name-addr---\n");
 }

+ 23 - 19
parser/parse_to.c

@@ -23,6 +23,10 @@
  * You should have received a copy of the GNU General Public License 
  * along with this program; if not, write to the Free Software 
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * History:
+ * ---------
+ * 2003-04-26 ZSW (jiri)
  */
 
 
@@ -51,8 +55,8 @@ enum {
 
 #define add_param( _param , _body ) \
 	do{\
-		DBG("DEBUG: add_param: %.*s=%.*s\n",param->name.len,param->name.s,\
-			param->value.len,param->value.s);\
+		DBG("DEBUG: add_param: %.*s=%.*s\n",param->name.len,ZSW(param->name.s),\
+			param->value.len,ZSW(param->value.s));\
 		if (!(_body)->param_lst)  (_body)->param_lst=(_param);\
 		else (_body)->last_param->next=(_param);\
 		(_body)->last_param =(_param);\
@@ -140,7 +144,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param : "
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 				}
 				break;
 			case '\r':
@@ -176,7 +180,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param : "
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -204,7 +208,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param : "
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -223,7 +227,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param : "
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -247,7 +251,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param :"
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status,(int)(tmp-buffer), buffer);
+							*tmp,status,(int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -267,7 +271,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 						else {
 							LOG( L_ERR , "ERROR: parse_to_param : unexpected "
 								"char [%c] in status %d: <<%.*s>> .\n",
-								*tmp,status, (int)(tmp-buffer), buffer);
+								*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 							goto error;
 						}
 #endif
@@ -294,7 +298,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param :"
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -327,7 +331,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param :"
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -362,7 +366,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param : "
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -397,7 +401,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param : "
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -425,7 +429,7 @@ static /*inline*/ char* parse_to_param(char *buffer, char *end,
 					default:
 						LOG( L_ERR , "ERROR: parse_to_param : "
 							"unexpected char [%c] in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -545,7 +549,7 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
 					default:
 						LOG( L_ERR , "ERROR: parse_to : unexpected char [%c] "
 							"in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 				}
 				break;
 			case '\r':
@@ -569,7 +573,7 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
 					default:
 						LOG( L_ERR , "ERROR: parse_to : unexpected char [%c] "
 							"in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -585,7 +589,7 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
 					default:
 						LOG( L_ERR , "ERROR: parse_to : unexpected char [%c] "
 							"in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -604,7 +608,7 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
 					default:
 						LOG( L_ERR , "ERROR: parse_to : unexpected char [%c] "
 							"in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -631,7 +635,7 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
 					default:
 						LOG( L_ERR , "ERROR: parse_to : unexpected char [%c] "
 							"in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;
@@ -654,7 +658,7 @@ char* parse_to(char* buffer, char *end, struct to_body *to_b)
 					default:
 						LOG( L_ERR , "ERROR: parse_to : unexpected char [%c] "
 							"in status %d: <<%.*s>> .\n",
-							*tmp,status, (int)(tmp-buffer), buffer);
+							*tmp,status, (int)(tmp-buffer), ZSW(buffer));
 						goto error;
 				}
 				break;

+ 29 - 28
parser/parse_uri.c

@@ -31,15 +31,16 @@
  * 2003-04-11  new parse_uri introduced (better, parses also some parameters,
  *              works in one pass) (andrei)
  * 2003-04-11  ser_error is now set in parse_uri (andrei)
+ * 2003-04-26 ZSW (jiri)
  */
 
 
 #include "parse_uri.h"
 #include <string.h>
 #include "../dprint.h"
-#ifdef PARSE_URI_OLD
+/* #ifdef PARSE_URI_OLD */ /* ZSW */
 #include "../ut.h"   /* q_memchr */
-#endif
+/* #endif */
 #include "../error.h"
 
 /* buf= pointer to begining of uri (sip:[email protected]:5060;a=b?h=i)
@@ -875,70 +876,70 @@ int parse_uri(char* buf, int len, struct sip_uri* uri)
 	/* do stuff */
 	DBG("parsed uri:\n user=<%.*s>(%d)\n passwd=<%.*s>(%d)\n host=<%.*s>(%d)\n"
 			" port=<%.*s>(%d): %d\n params=<%.*s>(%d)\n headers=<%.*s>(%d)\n",
-			uri->user.len, uri->user.s, uri->user.len,
-			uri->passwd.len, uri->passwd.s, uri->passwd.len,
-			uri->host.len, uri->host.s, uri->host.len,
-			uri->port.len, uri->port.s, uri->port.len, uri->port_no,
-			uri->params.len, uri->params.s, uri->params.len,
-			uri->headers.len, uri->headers.s, uri->headers.len
+			uri->user.len, ZSW(uri->user.s), uri->user.len,
+			uri->passwd.len, ZSW(uri->passwd.s), uri->passwd.len,
+			uri->host.len, ZSW(uri->host.s), uri->host.len,
+			uri->port.len, ZSW(uri->port.s), uri->port.len, uri->port_no,
+			uri->params.len, ZSW(uri->params.s), uri->params.len,
+			uri->headers.len, ZSW(uri->headers.s), uri->headers.len
 		);
 	DBG(" uri params:\n   transport=<%.*s>, val=<%.*s>, proto=%d\n",
-			uri->transport.len, uri->transport.s, uri->transport_val.len,
+			uri->transport.len, ZSW(uri->transport.s), uri->transport_val.len,
 			uri->transport_val.s, uri->proto);
 	DBG("   user-param=<%.*s>, val=<%.*s>\n",
-			uri->user_param.len, uri->user_param.s, uri->user_param_val.len,
-			uri->user_param_val.s);
+			uri->user_param.len, ZSW(uri->user_param.s), 
+			uri->user_param_val.len, ZSW(uri->user_param_val.s));
 	DBG("   method=<%.*s>, val=<%.*s>\n",
-			uri->method.len, uri->method.s, uri->method_val.len,
-			uri->method_val.s);
+			uri->method.len, ZSW(uri->method.s), 
+			uri->method_val.len, ZSW(uri->method_val.s));
 	DBG("   ttl=<%.*s>, val=<%.*s>\n",
-			uri->ttl.len, uri->ttl.s, uri->ttl_val.len,
-			uri->ttl_val.s);
+			uri->ttl.len, ZSW(uri->ttl.s), 
+			uri->ttl_val.len, ZSW(uri->ttl_val.s));
 	DBG("   maddr=<%.*s>, val=<%.*s>\n",
-			uri->maddr.len, uri->maddr.s, uri->maddr_val.len,
-			uri->maddr_val.s);
-	DBG("   lr=<%.*s>\n", uri->lr.len, uri->lr.s); 
+			uri->maddr.len, ZSW(uri->maddr.s), 
+			uri->maddr_val.len, ZSW(uri->maddr_val.s));
+	DBG("   lr=<%.*s>\n", uri->lr.len, ZSW(uri->lr.s)); 
 	return 0;
 	
 error_too_short:
 	LOG(L_ERR, "ERROR: parse_uri: uri too short: <%.*s> (%d)\n",
-			len, buf, len);
+			len, ZSW(buf), len);
 	ser_error=E_BAD_URI;
 	return E_BAD_URI;
 error_bad_char:
 	LOG(L_ERR, "ERROR: parse_uri: bad char '%c' in state %d"
 			" parsed: <%.*s> (%d) / <%.*s> (%d)\n",
-			*p, state, (int)(p-buf), buf, (int)(p-buf), len, buf, len);
+			*p, state, (int)(p-buf), ZSW(buf), (int)(p-buf), len, ZSW(buf), len);
 	return E_BAD_URI;
 error_bad_host:
 	LOG(L_ERR, "ERROR: parse_uri: bad host in uri (error at char %c in"
 			" state %d) parsed: <%.*s>(%d) /<%.*s> (%d)\n",
-			*p, state, (int)(p-buf), buf, (int)(p-buf), len, buf, len);
+			*p, state, (int)(p-buf), ZSW(buf), (int)(p-buf), len, ZSW(buf), len);
 	ser_error=E_BAD_URI;
 	return E_BAD_URI;
 error_bad_port:
 	LOG(L_ERR, "ERROR: parse_uri: bad port in uri (error at char %c in"
 			" state %d) parsed: <%.*s>(%d) /<%.*s> (%d)\n",
-			*p, state, (int)(p-buf), buf, (int)(p-buf), len, buf, len);
+			*p, state, (int)(p-buf), ZSW(buf), (int)(p-buf), len, ZSW(buf), len);
 	ser_error=E_BAD_URI;
 	return E_BAD_URI;
 error_bad_uri:
 	LOG(L_ERR, "ERROR: parse_uri: bad uri,  state %d"
 			" parsed: <%.*s> (%d) / <%.*s> (%d)\n",
-			 state, (int)(p-buf), buf, (int)(p-buf), len, buf, len);
+			 state, (int)(p-buf), ZSW(buf), (int)(p-buf), len, ZSW(buf), len);
 	ser_error=E_BAD_URI;
 	return E_BAD_URI;
 error_headers:
 	LOG(L_ERR, "ERROR: parse_uri: bad uri headers: <%.*s>(%d)"
 			" / <%.*s>(%d)\n",
-			uri->headers.len, uri->headers.s, uri->headers.len,
-			len, buf, len);
+			uri->headers.len, ZSW(uri->headers.s), uri->headers.len,
+			len, ZSW(buf), len);
 	ser_error=E_BAD_URI;
 	return E_BAD_URI;
 error_bug:
 	LOG(L_CRIT, "BUG: parse_uri: bad  state %d"
 			" parsed: <%.*s> (%d) / <%.*s> (%d)\n",
-			 state, (int)(p-buf), buf, (int)(p-buf), len, buf, len);
+			 state, (int)(p-buf), ZSW(buf), (int)(p-buf), len, ZSW(buf), len);
 	ser_error=E_BAD_URI;
 	return E_BAD_URI;
 }
@@ -1073,7 +1074,7 @@ int parse_uri(char *buf, int len, struct sip_uri* uri)
 	if (uri->port.s) uri->port_no=str2s(uri->port.s, uri->port.len, &err);
 	if (err){
 		LOG(L_DBG, "ERROR: parse_uri: bad port number in sip uri: %.*s\n",
-				uri->port.len, uri->port.s);
+				uri->port.len, ZSW(uri->port.s));
 		ser_error=ret=E_BAD_URI;
 		return ret;
 	}
@@ -1092,7 +1093,7 @@ static inline int _parse_ruri(str *uri,
 
 	if (parse_uri(uri->s, uri->len, parsed_uri)<0) {
 		LOG(L_ERR, "ERROR: _parse_ruri: bad uri <%.*s>\n", 
-				uri->len, uri->s);
+				uri->len, ZSW(uri->s));
 		*status=0;
 		return -1;
 	}

+ 7 - 6
parser/parse_via.c

@@ -41,6 +41,7 @@
  *               via->params.s (andrei)
  *  2003-01-28  zero-terminations replaced with VIA_ZT (jiri)
  *  2003-02-28 scratchpad compatibility abandoned (jiri)
+ *  2003-04-26 ZSW (jiri)
  */
 
 
@@ -906,7 +907,7 @@ normal_exit:
 	*pstate=state;
 	*psaved_state=saved_state;
 	DBG("Found param type %d, <%.*s> = <%.*s>; state=%d\n", param->type,
-			param->name.len, param->name.s, 
+			param->name.len, ZSW(param->name.s), 
 			(param->value.len?param->value.len:3),
 			(param->value.len?param->value.s:"n/a"), state);
 	return tmp;
@@ -925,7 +926,7 @@ normal_exit:
 	*pstate=state;
 	*psaved_state=saved_state;
 	DBG("Error on  param type %d, <%.*s>, state=%d, saved_state=%d\n",
-		param->type, param->name.len, param->name.s, state, saved_state);
+		param->type, param->name.len, ZSW(param->name.s), state, saved_state);
 
  error:
 	LOG(L_ERR, "error: parse_via_param\n");
@@ -1868,7 +1869,7 @@ endofpacket:
 		vb->port=str2s(vb->port_str.s, vb->port_str.len, &err);
 		if (err){
 					LOG(L_ERR, "ERROR: parse_via: invalid port number <%.*s>\n",
-						vb->port_str.len, vb->port_str.s);
+						vb->port_str.len, ZSW(vb->port_str.s));
 					goto error;
 		}
 	}
@@ -1881,7 +1882,7 @@ nextvia:
 		vb->port=str2s(vb->port_str.s, vb->port_str.len, &err);
 		if (err){
 					LOG(L_ERR, "ERROR: parse_via: invalid port number <%.*s>\n",
-						vb->port_str.len, vb->port_str.s);
+						vb->port_str.len, ZSW(vb->port_str.s));
 					goto error;
 		}
 	}
@@ -1897,11 +1898,11 @@ nextvia:
 
 error:
 	if (end>buffer){
-		LOG(L_ERR, "ERROR: parse_via on: <%.*s>\n", (int)(end-buffer), buffer);
+		LOG(L_ERR, "ERROR: parse_via on: <%.*s>\n", (int)(end-buffer), ZSW(buffer));
 	}
 	if ((tmp>buffer)&&(tmp<end)){
 		LOG(L_ERR, "ERROR: parse_via parse error, parsed so far:<%.*s>\n",
-				(int)(tmp-buffer), buffer );
+				(int)(tmp-buffer), ZSW(buffer) );
 	}else{
 		LOG(L_ERR, "ERROR: parse_via: via parse error\n");
 	}

+ 9 - 5
ut.h

@@ -28,13 +28,14 @@
  *
  * History
  * ------
- * 2003-03-30 str2int and str2float added (janakj)
- * 2003-02-28 scratchpad compatibility abandoned (jiri)
- * 2003-02-13 strlower added (janakj)
- * 2003-01-29 pathmax added (jiri)
- * 2003-01-28 scratchpad removed (jiri)
  * 2003-01-18 un_escape function introduced for convenience of code needing
  *            the complex&slow feature of unescaping
+ * 2003-01-28 scratchpad removed (jiri)
+ * 2003-01-29 pathmax added (jiri)
+ * 2003-02-13 strlower added (janakj)
+ * 2003-02-28 scratchpad compatibility abandoned (jiri)
+ * 2003-03-30 str2int and str2float added (janakj)
+ * 2003-04-26 ZSW (jiri)
  */
 
 
@@ -56,6 +57,9 @@
 
 struct sip_msg;
 
+/* zero-string wrapper */
+#define ZSW(_c) ((_c)?(_c):"")
+
 /* returns string beginning and length without insignificant chars */
 #define trim_len( _len, _begin, _mystr ) \
 	do{ 	static char _c; \