[asterisk-commits] kpfleming: branch 1.4 r46200 - in /branches/1.4: apps/ cdr/ channels/ main/ p...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Wed Oct 25 07:32:08 MST 2006


Author: kpfleming
Date: Wed Oct 25 09:32:08 2006
New Revision: 46200

URL: http://svn.digium.com/view/asterisk?rev=46200&view=rev
Log:
apparently developers are still not aware that they should be use ast_copy_string instead of strncpy... fix up many more users, and fix some bugs in the process

Modified:
    branches/1.4/apps/app_getcpeid.c
    branches/1.4/apps/app_ices.c
    branches/1.4/apps/app_parkandannounce.c
    branches/1.4/apps/app_queue.c
    branches/1.4/apps/app_record.c
    branches/1.4/apps/app_rpt.c
    branches/1.4/apps/app_sms.c
    branches/1.4/apps/app_softhangup.c
    branches/1.4/apps/app_voicemail.c
    branches/1.4/cdr/cdr_custom.c
    branches/1.4/channels/chan_alsa.c
    branches/1.4/channels/chan_features.c
    branches/1.4/channels/chan_h323.c
    branches/1.4/channels/chan_iax2.c
    branches/1.4/channels/chan_mgcp.c
    branches/1.4/channels/chan_nbs.c
    branches/1.4/channels/chan_phone.c
    branches/1.4/channels/chan_sip.c
    branches/1.4/main/cdr.c
    branches/1.4/main/cli.c
    branches/1.4/main/db.c
    branches/1.4/main/image.c
    branches/1.4/main/utils.c
    branches/1.4/pbx/dundi-parser.c
    branches/1.4/pbx/pbx_ael.c
    branches/1.4/pbx/pbx_realtime.c
    branches/1.4/pbx/pbx_spool.c
    branches/1.4/res/res_adsi.c

Modified: branches/1.4/apps/app_getcpeid.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_getcpeid.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_getcpeid.c (original)
+++ branches/1.4/apps/app_getcpeid.c Wed Oct 25 09:32:08 2006
@@ -71,21 +71,20 @@
 	int gotgeometry = 0;
 	int gotcpeid = 0;
 	int width, height, buttons;
-	char data[4][80];
-	char *stuff[4];
+	char *data[4];
+	unsigned int x;
 
 	u = ast_module_user_add(chan);
-	stuff[0] = data[0];
-	stuff[1] = data[1];
-	stuff[2] = data[2];
-	stuff[3] = data[3];
-	memset(data, 0, sizeof(data));
-	strncpy(stuff[0], "** CPE Info **", sizeof(data[0]) - 1);
-	strncpy(stuff[1], "Identifying CPE...", sizeof(data[1]) - 1);
-	strncpy(stuff[2], "Please wait...", sizeof(data[2]) - 1);
+
+	for (x = 0; x < 4; x++)
+		data[x] = alloca(80);
+
+	strcpy(data[0], "** CPE Info **");
+	strcpy(data[1], "Identifying CPE...");
+	strcpy(data[2], "Please wait...");
 	res = ast_adsi_load_session(chan, NULL, 0, 1);
 	if (res > 0) {
-		cpeid_setstatus(chan, stuff, 0);
+		cpeid_setstatus(chan, data, 0);
 		res = ast_adsi_get_cpeid(chan, cpeid, 0);
 		if (res > 0) {
 			gotcpeid = 1;
@@ -93,9 +92,9 @@
 				ast_verbose(VERBOSE_PREFIX_3 "Got CPEID of '%02x:%02x:%02x:%02x' on '%s'\n", cpeid[0], cpeid[1], cpeid[2], cpeid[3], chan->name);
 		}
 		if (res > -1) {
-			strncpy(stuff[1], "Measuring CPE...", sizeof(data[1]) - 1);
-			strncpy(stuff[2], "Please wait...", sizeof(data[2]) - 1);
-			cpeid_setstatus(chan, stuff, 0);
+			strcpy(data[1], "Measuring CPE...");
+			strcpy(data[2], "Please wait...");
+			cpeid_setstatus(chan, data, 0);
 			res = ast_adsi_get_cpeinfo(chan, &width, &height, &buttons, 0);
 			if (res > -1) {
 				if (option_verbose > 2)
@@ -105,15 +104,15 @@
 		}
 		if (res > -1) {
 			if (gotcpeid)
-				snprintf(stuff[1], sizeof(data[1]), "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]);
+				snprintf(data[1], 80, "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]);
 			else
-				strncpy(stuff[1], "CPEID Unknown", sizeof(data[1]) - 1);
+				strcpy(data[1], "CPEID Unknown");
 			if (gotgeometry) 
-				snprintf(stuff[2], sizeof(data[2]), "Geom: %dx%d, %d buttons", width, height, buttons);
+				snprintf(data[2], 80, "Geom: %dx%d, %d buttons", width, height, buttons);
 			else
-				strncpy(stuff[2], "Geometry unknown", sizeof(data[2]) - 1);
-			strncpy(stuff[3], "Press # to exit", sizeof(data[3]) - 1);
-			cpeid_setstatus(chan, stuff, 1);
+				strcpy(data[2], "Geometry unknown");
+			strcpy(data[3], "Press # to exit");
+			cpeid_setstatus(chan, data, 1);
 			for(;;) {
 				res = ast_waitfordigit(chan, 1000);
 				if (res < 0)

Modified: branches/1.4/apps/app_ices.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_ices.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_ices.c (original)
+++ branches/1.4/apps/app_ices.c Wed Oct 25 09:32:08 2006
@@ -141,7 +141,7 @@
 		return -1;
 	}
 	if (((char *)data)[0] == '/')
-		strncpy(filename, (char *)data, sizeof(filename) - 1);
+		ast_copy_string(filename, (char *) data, sizeof(filename));
 	else
 		snprintf(filename, sizeof(filename), "%s/%s", (char *)ast_config_AST_CONFIG_DIR, (char *)data);
 	/* Placeholder for options */		

Modified: branches/1.4/apps/app_parkandannounce.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_parkandannounce.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_parkandannounce.c (original)
+++ branches/1.4/apps/app_parkandannounce.c Wed Oct 25 09:32:08 2006
@@ -78,13 +78,13 @@
 {
 	int res=0;
 	char *return_context;
-	int l, lot, timeout = 0, dres;
+	int lot, timeout = 0, dres;
 	char *working, *context, *exten, *priority, *dial, *dialtech, *dialstr;
 	char *template, *tpl_working, *tpl_current;
 	char *tmp[100];
 	char buf[13];
 	int looptemp=0,i=0;
-	char *s,*orig_s;
+	char *s;
 
 	struct ast_channel *dchan;
 	struct outgoing_helper oh;
@@ -99,18 +99,11 @@
   
 	u = ast_module_user_add(chan);
 
-	l=strlen(data)+2;	
-	if (!(orig_s = ast_malloc(l))) {
-		ast_module_user_remove(u);
-		return -1;
-	}
-	s=orig_s;
-	strncpy(s,data,l);
+	s = ast_strdupa(data);
 
 	template=strsep(&s,"|");
 	if(! template) {
 		ast_log(LOG_WARNING, "PARK: An announce template must be defined\n");
-		free(orig_s);
 		ast_module_user_remove(u);
 		return -1;
 	}
@@ -122,7 +115,6 @@
 	dial=strsep(&s, "|");
 	if(!dial) {
 		ast_log(LOG_WARNING, "PARK: A dial resource must be specified i.e: Console/dsp or Zap/g1/5551212\n");
-		free(orig_s);
 		ast_module_user_remove(u);
 		return -1;
 	} else {
@@ -155,16 +147,15 @@
 	}
 	if(atoi(priority) < 0) {
 		ast_log(LOG_WARNING, "Priority '%s' must be a number > 0\n", priority);
-		free(orig_s);
 		ast_module_user_remove(u);
 		return -1;
 	}
 	/* At this point we have a priority and maybe an extension and a context */
 	chan->priority = atoi(priority);
 	if (exten)
-		strncpy(chan->exten, exten, sizeof(chan->exten)-1);
+		ast_copy_string(chan->exten, exten, sizeof(chan->exten));
 	if (context)
-		strncpy(chan->context, context, sizeof(chan->context)-1);
+		ast_copy_string(chan->context, context, sizeof(chan->context));
 	} else {  /* increment the priority by default*/
 		chan->priority++;
 	}
@@ -202,13 +193,11 @@
 				ast_verbose(VERBOSE_PREFIX_4 "Channel %s was never answered.\n", dchan->name);
         			ast_log(LOG_WARNING, "PARK: Channel %s was never answered for the announce.\n", dchan->name);
 			ast_hangup(dchan);
-			free(orig_s);
 			ast_module_user_remove(u);
 			return -1;
 		}
 	} else {
 		ast_log(LOG_WARNING, "PARK: Unable to allocate announce channel.\n");
-		free(orig_s);
 		ast_module_user_remove(u);
 		return -1; 
 	}
@@ -245,7 +234,6 @@
 
 	ast_stopstream(dchan);  
 	ast_hangup(dchan);
-	free(orig_s);
 	
 	ast_module_user_remove(u);
 	

Modified: branches/1.4/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_queue.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_queue.c (original)
+++ branches/1.4/apps/app_queue.c Wed Oct 25 09:32:08 2006
@@ -776,10 +776,6 @@
    extra fields in the tables. */
 static void queue_set_param(struct call_queue *q, const char *param, const char *val, int linenum, int failunknown)
 {
-	int i = 0;
-	char *c, *lastc;
-	char buff[80];
-
 	if (!strcasecmp(param, "musicclass") || 
 		!strcasecmp(param, "music") || !strcasecmp(param, "musiconhold")) {
 		ast_copy_string(q->moh, val, sizeof(q->moh));
@@ -840,22 +836,18 @@
 		else
 			q->announceholdtime = 0;
 	} else if (!strcasecmp(param, "periodic-announce")) {
-		if (strchr(val,'|')) {
-			lastc = (char *)val;
-			while ((c = strchr(lastc,'|'))) {
-				if (i > MAX_PERIODIC_ANNOUNCEMENTS)
+		if (strchr(val, '|')) {
+			char *s, *buf = ast_strdupa(val);
+			unsigned int i = 0;
+
+			while ((s = strsep(&buf, "|"))) {
+				ast_copy_string(q->sound_periodicannounce[i], s, sizeof(q->sound_periodicannounce[i]));
+				i++;
+				if (i == MAX_PERIODIC_ANNOUNCEMENTS)
 					break;
-				strncpy(buff, lastc, abs(lastc - c));
-				buff[abs(lastc - c)] = '\0';
-				ast_copy_string(q->sound_periodicannounce[i], buff, sizeof(q->sound_periodicannounce[i]));
-				lastc = (c + 1);
-				i++;
-			}
-			if (strlen(lastc)) {
-				ast_copy_string(q->sound_periodicannounce[i], lastc, sizeof(q->sound_periodicannounce[i]));
 			}
 		} else {
-			ast_copy_string(q->sound_periodicannounce[i], val, sizeof(q->sound_periodicannounce[i]));
+			ast_copy_string(q->sound_periodicannounce[0], val, sizeof(q->sound_periodicannounce[0]));
 		}
 	} else if (!strcasecmp(param, "periodic-announce-frequency")) {
 		q->periodicannouncefrequency = atoi(val);

Modified: branches/1.4/apps/app_record.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_record.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_record.c (original)
+++ branches/1.4/apps/app_record.c Wed Oct 25 09:32:08 2006
@@ -212,7 +212,7 @@
 		} while (ast_fileexists(tmp, ext, chan->language) > 0);
 		pbx_builtin_setvar_helper(chan, "RECORDED_FILE", tmp);
 	} else
-		strncpy(tmp, filename, sizeof(tmp)-1);
+		ast_copy_string(tmp, filename, sizeof(tmp));
 	/* end of routine mentioned */
 	
 	

Modified: branches/1.4/apps/app_rpt.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_rpt.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_rpt.c (original)
+++ branches/1.4/apps/app_rpt.c Wed Oct 25 09:32:08 2006
@@ -1425,7 +1425,7 @@
 					return RESULT_FAILURE;
 				}
 				memset(s, 0, sizeof(struct rpt_lstat));
-				strncpy(s->name, l->name, MAXREMSTR - 1);
+				ast_copy_string(s->name, l->name, MAXREMSTR);
 				pbx_substitute_variables_helper(l->chan, "${IAXPEER(CURRENTCHANNEL)}", s->peer, MAXPEERSTR - 1);
 				s->mode = l->mode;
 				s->outbound = l->outbound;
@@ -2606,8 +2606,7 @@
 		}
 	}
 	else if ((mode == ARB_ALPHA) || (mode == REV_PATCH)) {
-		strncpy(tele->param, (char *) data, TELEPARAMSIZE - 1);
-		tele->param[TELEPARAMSIZE - 1] = 0;
+		ast_copy_string(tele->param, (char *) data, TELEPARAMSIZE);
 	}
 	insque((struct qelem *)tele, (struct qelem *)myrpt->tele.next);
 	rpt_mutex_unlock(&myrpt->lock);
@@ -2782,11 +2781,11 @@
 		}
 	}
 
-	strncpy(mychannel->exten, myrpt->exten, sizeof(mychannel->exten) - 1);
-	strncpy(mychannel->context, myrpt->patchcontext, sizeof(mychannel->context) - 1);
+	ast_copy_string(mychannel->exten, myrpt->exten, sizeof(mychannel->exten));
+	ast_copy_string(mychannel->context, myrpt->patchcontext, sizeof(mychannel->context));
 	
 	if (myrpt->p.acctcode)
-		strncpy((char *)mychannel->accountcode, myrpt->p.acctcode, sizeof(mychannel->accountcode) - 1);
+		ast_string_field_set(mychannel, accountcode, myrpt->p.acctcode);
 	mychannel->priority = 1;
 	ast_channel_undefer_dtmf(mychannel);
 	if (ast_pbx_start(mychannel) < 0)
@@ -2938,7 +2937,7 @@
 	if (!myrpt->enable)
 		return DC_ERROR;
 
-	strncpy(digitbuf,digits,MAXNODESTR - 1);
+	ast_copy_string(digitbuf,digits,MAXNODESTR);
 
 	if(debug)
 		printf("@@@@ ilink param = %s, digitbuf = %s\n", (param)? param : "(null)", digitbuf);
@@ -2953,7 +2952,7 @@
 					return DC_ERROR;
 				break;
 			}
-			strncpy(tmp,val,sizeof(tmp) - 1);
+			ast_copy_string(tmp,val,sizeof(tmp));
 			s = tmp;
 			s1 = strsep(&s,",");
 			s2 = strsep(&s,",");
@@ -2973,7 +2972,7 @@
 			}
 			if (l != &myrpt->links){ /* if found */
 				struct	ast_frame wf;
-				strncpy(myrpt->lastlinknode,digitbuf,MAXNODESTR - 1);
+				ast_copy_string(myrpt->lastlinknode,digitbuf,MAXNODESTR);
 				l->retries = MAX_RETRIES + 1;
 				l->disced = 1;
 				rpt_mutex_unlock(&myrpt->lock);
@@ -3004,7 +3003,7 @@
 					return DC_ERROR;
 				break;
 			}
-			strncpy(tmp,val,sizeof(tmp) - 1);
+			ast_copy_string(tmp, val, sizeof(tmp));
 			s = tmp;
 			s1 = strsep(&s,",");
 			s2 = strsep(&s,",");
@@ -3040,7 +3039,7 @@
 				modechange = 1;
 			} else
 				rpt_mutex_unlock(&myrpt->lock);
-			strncpy(myrpt->lastlinknode,digitbuf,MAXNODESTR - 1);
+			ast_copy_string(myrpt->lastlinknode,digitbuf,MAXNODESTR);
 			/* establish call in monitor mode */
 			l = malloc(sizeof(struct rpt_link));
 			if (!l){
@@ -3057,7 +3056,7 @@
 			}
 			*tele++ = 0;
 			l->isremote = (s && ast_true(s));
-			strncpy(l->name, digitbuf, MAXNODESTR - 1);
+			ast_copy_string(l->name, digitbuf, MAXNODESTR);
 			l->chan = ast_request(deststr,AST_FORMAT_SLINEAR,tele,NULL);
 			if (modechange) l->connected = 1;
 			if (l->chan){
@@ -3122,7 +3121,7 @@
 					return DC_ERROR;
 				break;
 			}
-			strncpy(tmp,val,sizeof(tmp) - 1);
+			ast_copy_string(tmp,val,sizeof(tmp));
 			s = tmp;
 			s1 = strsep(&s,",");
 			s2 = strsep(&s,",");
@@ -3156,7 +3155,7 @@
 				modechange = 1;
 			} else
 				rpt_mutex_unlock(&myrpt->lock);
-			strncpy(myrpt->lastlinknode,digitbuf,MAXNODESTR - 1);
+			ast_copy_string(myrpt->lastlinknode,digitbuf,MAXNODESTR);
 			/* establish call in tranceive mode */
 			l = malloc(sizeof(struct rpt_link));
 			if (!l){
@@ -3167,7 +3166,7 @@
 			memset((char *)l,0,sizeof(struct rpt_link));
 			l->mode = 1;
 			l->outbound = 1;
-			strncpy(l->name, digitbuf, MAXNODESTR - 1);
+			ast_copy_string(l->name, digitbuf, MAXNODESTR);
 			l->isremote = (s && ast_true(s));
 			if (modechange) l->connected = 1;
 			snprintf(deststr, sizeof(deststr), "IAX2/%s", s1);
@@ -3255,7 +3254,7 @@
 			}
 			rpt_mutex_lock(&myrpt->lock);
 			strcpy(myrpt->lastlinknode,digitbuf);
-			strncpy(myrpt->cmdnode, digitbuf, sizeof(myrpt->cmdnode) - 1);
+			ast_copy_string(myrpt->cmdnode, digitbuf, sizeof(myrpt->cmdnode));
 			rpt_mutex_unlock(&myrpt->lock);
 			rpt_telemetry(myrpt, REMGO, NULL);	
 			return DC_COMPLETE;
@@ -3320,7 +3319,7 @@
 		myrpt->patchdialtime = 0;
 		myrpt->patchfarenddisconnect = 0;
 		myrpt->patchquiet = 0;
-		strncpy(myrpt->patchcontext, myrpt->p.ourcontext, MAXPATCHCONTEXT);
+		ast_copy_string(myrpt->patchcontext, myrpt->p.ourcontext, MAXPATCHCONTEXT);
 
 		if(param){
 			/* Process parameter list */
@@ -3337,7 +3336,7 @@
 				switch(index){
 
 					case 1: /* context */
-						strncpy(myrpt->patchcontext, value, MAXPATCHCONTEXT - 1) ;
+						ast_copy_string(myrpt->patchcontext, value, MAXPATCHCONTEXT) ;
 						break;
 						
 					case 2: /* dialtime */
@@ -3545,16 +3544,16 @@
 	
 	if (command_source == SOURCE_DPHONE) {
 		if (!myrpt->p.dphone_functions) return DC_INDETERMINATE;
-		strncpy(function_table_name, myrpt->p.dphone_functions, sizeof(function_table_name) - 1);
+		ast_copy_string(function_table_name, myrpt->p.dphone_functions, sizeof(function_table_name));
 		}
 	else if (command_source == SOURCE_PHONE) {
 		if (!myrpt->p.phone_functions) return DC_INDETERMINATE;
-		strncpy(function_table_name, myrpt->p.phone_functions, sizeof(function_table_name) - 1);
+		ast_copy_string(function_table_name, myrpt->p.phone_functions, sizeof(function_table_name));
 		}
 	else if (command_source == SOURCE_LNK)
-		strncpy(function_table_name, myrpt->p.link_functions, sizeof(function_table_name) - 1);
+		ast_copy_string(function_table_name, myrpt->p.link_functions, sizeof(function_table_name));
 	else
-		strncpy(function_table_name, myrpt->p.functions, sizeof(function_table_name) - 1);
+		ast_copy_string(function_table_name, myrpt->p.functions, sizeof(function_table_name));
 	vp = ast_variable_browse(myrpt->cfg, function_table_name);
 	while(vp) {
 		if(!strncasecmp(vp->name, digits, strlen(vp->name)))
@@ -3577,7 +3576,7 @@
 			return DC_INDETERMINATE;
 	}	
 	/* Found a match, retrieve value part and parse */
-	strncpy(workstring, vp->value, sizeof(workstring) - 1 );
+	ast_copy_string(workstring, vp->value, sizeof(workstring));
 	stringp = workstring;
 	action = strsep(&stringp, ",");
 	param = stringp;
@@ -3620,7 +3619,7 @@
 	wf.datalen = strlen(str) + 1;
 	wf.samples = 0;
  	/* put string in our buffer */
-	strncpy(tmp,str,sizeof(tmp) - 1);
+	ast_copy_string(tmp, str, sizeof(tmp));
 
         if (!strcmp(tmp,discstr))
         {
@@ -3743,7 +3742,7 @@
 			myrpt->rem_dtmfbuf[myrpt->rem_dtmfidx] = 0;
 			
 			rpt_mutex_unlock(&myrpt->lock);
-			strncpy(cmd, myrpt->rem_dtmfbuf, sizeof(cmd) - 1);
+			ast_copy_string(cmd, myrpt->rem_dtmfbuf, sizeof(cmd));
 			res = collect_function_digits(myrpt, cmd, SOURCE_LNK, mylink);
 			rpt_mutex_lock(&myrpt->lock);
 			
@@ -3761,7 +3760,7 @@
 				case DC_COMPLETE:
 					myrpt->totalexecdcommands++;
 					myrpt->dailyexecdcommands++;
-					strncpy(myrpt->lastdtmfcommand, cmd, MAXDTMF-1);
+					ast_copy_string(myrpt->lastdtmfcommand, cmd, MAXDTMF);
 					myrpt->lastdtmfcommand[MAXDTMF-1] = '\0';
 					myrpt->rem_dtmfbuf[0] = 0;
 					myrpt->rem_dtmfidx = -1;
@@ -3857,7 +3856,7 @@
 			myrpt->rem_dtmfbuf[myrpt->rem_dtmfidx] = 0;
 			
 			rpt_mutex_unlock(&myrpt->lock);
-			strncpy(cmd, myrpt->rem_dtmfbuf, sizeof(cmd) - 1);
+			ast_copy_string(cmd, myrpt->rem_dtmfbuf, sizeof(cmd));
 			switch(mylink->phonemode)
 			{
 			    case 1:
@@ -3894,7 +3893,7 @@
 				case DC_COMPLETE:
 					myrpt->totalexecdcommands++;
 					myrpt->dailyexecdcommands++;
-					strncpy(myrpt->lastdtmfcommand, cmd, MAXDTMF-1);
+					ast_copy_string(myrpt->lastdtmfcommand, cmd, MAXDTMF);
 					myrpt->lastdtmfcommand[MAXDTMF-1] = '\0';
 					myrpt->rem_dtmfbuf[0] = 0;
 					myrpt->rem_dtmfidx = -1;
@@ -4165,7 +4164,7 @@
 	if (!myrpt->remote) return(0);
 	/* must have rbi hardware */
 	if (strncmp(myrpt->remote,remote_rig_rbi,3)) return(0);
-	strncpy(tmp, myrpt->freq, sizeof(tmp) - 1);
+	ast_copy_string(tmp, myrpt->freq, sizeof(tmp));
 	s = strchr(tmp,'.');
 	/* if no decimal, is invalid */
 	
@@ -4293,16 +4292,14 @@
  
 static int split_freq(char *mhz, char *decimals, char *freq)
 {
-	char freq_copy[MAXREMSTR];
 	char *decp;
 
-	decp = strchr(strncpy(freq_copy, freq, MAXREMSTR),'.');
-	if(decp){
+	freq = ast_strdupa(freq);
+	if ((decp = strchr(freq, '.'))) {
 		*decp++ = 0;
-		strncpy(mhz, freq_copy, MAXREMSTR);
+		ast_copy_string(mhz, freq, MAXREMSTR);
 		strcpy(decimals, "00000");
-		strncpy(decimals, decp, strlen(decp));
-		decimals[5] = 0;
+		ast_copy_string(decimals, decp, 6);
 		return 0;
 	}
 	else
@@ -4316,15 +4313,13 @@
  
 static int split_ctcss_freq(char *hertz, char *decimal, char *freq)
 {
-	char freq_copy[MAXREMSTR];
 	char *decp;
 
-	decp = strchr(strncpy(freq_copy, freq, MAXREMSTR),'.');
-	if(decp){
+	freq = ast_strdupa(freq);
+	if ((decp = strchr(freq, '.'))) {
 		*decp++ = 0;
-		strncpy(hertz, freq_copy, MAXREMSTR);
-		strncpy(decimal, decp, strlen(decp));
-		decimal[strlen(decp)] = '\0';
+		ast_copy_string(hertz, freq, MAXREMSTR);
+		ast_copy_string(decimal, decp, sizeof(decimal));
 		return 0;
 	}
 	else
@@ -4966,9 +4961,9 @@
 			if (!s1)
 				return DC_ERROR;
 			*s1++ = 0;
-			strncpy(myrpt->freq, tmp, sizeof(myrpt->freq) - 1);
-			strncpy(myrpt->rxpl, s, sizeof(myrpt->rxpl) - 1);
-			strncpy(myrpt->txpl, s, sizeof(myrpt->rxpl) - 1);
+			ast_copy_string(myrpt->freq, tmp, sizeof(myrpt->freq));
+			ast_copy_string(myrpt->rxpl, s, sizeof(myrpt->rxpl));
+			ast_copy_string(myrpt->txpl, s, sizeof(myrpt->rxpl));
 			myrpt->remmode = REM_MODE_FM;
 			myrpt->offset = REM_SIMPLEX;
 			myrpt->powerlevel = REM_MEDPWR;
@@ -5082,7 +5077,7 @@
 
 			/* We have a frequency */
 
-			strncpy(tmp, digitbuf ,sizeof(tmp) - 1);
+			ast_copy_string(tmp, digitbuf ,sizeof(tmp));
 			
 			s = tmp;
 			s1 = strsep(&s, "*"); /* Pick off MHz */
@@ -5167,15 +5162,15 @@
 			}	
 			offsave = myrpt->offset;
 			modesave = myrpt->remmode;
-			strncpy(savestr, myrpt->freq, sizeof(savestr) - 1);
-			strncpy(myrpt->freq, freq, sizeof(myrpt->freq) - 1);
+			ast_copy_string(savestr, myrpt->freq, sizeof(savestr));
+			ast_copy_string(myrpt->freq, freq, sizeof(myrpt->freq));
 			myrpt->offset = offset;
 			myrpt->remmode = defmode;
 
 			if (setrem(myrpt) == -1){
 				myrpt->offset = offsave;
 				myrpt->remmode = modesave;
-				strncpy(myrpt->freq, savestr, sizeof(myrpt->freq) - 1);
+				ast_copy_string(myrpt->freq, savestr, sizeof(myrpt->freq));
 				goto invalid_freq;
 			}
 
@@ -5212,16 +5207,16 @@
 			if(debug)
 				printf("PL digits entered %s\n", digitbuf);
 	    		
-			strncpy(tmp, digitbuf, sizeof(tmp) - 1);
+			ast_copy_string(tmp, digitbuf, sizeof(tmp));
 			/* see if we have at least 1 */
 			s = strchr(tmp,'*');
 			if(s)
 				*s = '.';
-			strncpy(savestr, myrpt->rxpl, sizeof(savestr) - 1);
-			strncpy(myrpt->rxpl, tmp, sizeof(myrpt->rxpl) - 1);
+			ast_copy_string(savestr, myrpt->rxpl, sizeof(savestr));
+			ast_copy_string(myrpt->rxpl, tmp, sizeof(myrpt->rxpl));
 			
 			if (setrem(myrpt) == -1){
-				strncpy(myrpt->rxpl, savestr, sizeof(myrpt->rxpl) - 1);
+				ast_copy_string(myrpt->rxpl, savestr, sizeof(myrpt->rxpl));
 				return DC_ERROR;
 			}
 		
@@ -5252,16 +5247,16 @@
 			if(debug)
 				printf("PL digits entered %s\n", digitbuf);
 	    		
-			strncpy(tmp, digitbuf, sizeof(tmp) - 1);
+			ast_copy_string(tmp, digitbuf, sizeof(tmp));
 			/* see if we have at least 1 */
 			s = strchr(tmp,'*');
 			if(s)
 				*s = '.';
-			strncpy(savestr, myrpt->txpl, sizeof(savestr) - 1);
-			strncpy(myrpt->txpl, tmp, sizeof(myrpt->txpl) - 1);
+			ast_copy_string(savestr, myrpt->txpl, sizeof(savestr));
+			ast_copy_string(myrpt->txpl, tmp, sizeof(myrpt->txpl));
 			
 			if (setrem(myrpt) == -1){
-				strncpy(myrpt->txpl, savestr, sizeof(myrpt->txpl) - 1);
+				ast_copy_string(myrpt->txpl, savestr, sizeof(myrpt->txpl) - 1);
 				return DC_ERROR;
 			}
 		
@@ -5693,8 +5688,7 @@
 		case DC_COMPLETE:
 			myrpt->totalexecdcommands++;
 			myrpt->dailyexecdcommands++;
-			strncpy(myrpt->lastdtmfcommand, myrpt->dtmfbuf, MAXDTMF-1);
-			myrpt->lastdtmfcommand[MAXDTMF-1] = '\0';
+			ast_copy_string(myrpt->lastdtmfcommand, myrpt->dtmfbuf, MAXDTMF);
 			myrpt->dtmfbuf[0] = 0;
 			myrpt->dtmfidx = -1;
 			myrpt->dtmf_time_rem = 0;
@@ -5719,7 +5713,7 @@
 int	seq,res;
 
  	/* put string in our buffer */
-	strncpy(tmp,str,sizeof(tmp) - 1);
+	ast_copy_string(tmp,str,sizeof(tmp));
 	if (!strcmp(tmp,discstr)) return 0;
 	if (sscanf(tmp,"%s %s %s %d %c",cmd,dest,src,&seq,&c) != 5)
 	{
@@ -5791,7 +5785,7 @@
 	/* remove from queue */
 	remque((struct qelem *) l);
 	rpt_mutex_unlock(&myrpt->lock);
-	strncpy(tmp,val,sizeof(tmp) - 1);
+	ast_copy_string(tmp,val,sizeof(tmp));
 	s = tmp;
 	s1 = strsep(&s,",");
 	s2 = strsep(&s,",");
@@ -5891,7 +5885,7 @@
 				myrpt->dtmfbuf[myrpt->dtmfidx++] = c;
 				myrpt->dtmfbuf[myrpt->dtmfidx] = 0;
 				
-				strncpy(cmd, myrpt->dtmfbuf, sizeof(cmd) - 1);
+				ast_copy_string(cmd, myrpt->dtmfbuf, sizeof(cmd));
 				
 				rpt_mutex_unlock(&myrpt->lock);
 				res = collect_function_digits(myrpt, cmd, SOURCE_RPT, NULL);
@@ -5906,8 +5900,7 @@
 				    case DC_COMPLETE:
 					myrpt->totalexecdcommands++;
 					myrpt->dailyexecdcommands++;
-					strncpy(myrpt->lastdtmfcommand, cmd, MAXDTMF-1);
-					myrpt->lastdtmfcommand[MAXDTMF-1] = '\0';
+					ast_copy_string(myrpt->lastdtmfcommand, cmd, MAXDTMF);
 					myrpt->dtmfbuf[0] = 0;
 					myrpt->dtmfidx = -1;
 					myrpt->dtmf_time = 0;
@@ -5936,7 +5929,7 @@
 			myrpt->patchquiet = 0;
 			myrpt->patchfarenddisconnect = 0;
 			myrpt->patchdialtime = 0;
-			strncpy(myrpt->patchcontext, myrpt->p.ourcontext, MAXPATCHCONTEXT);
+			ast_copy_string(myrpt->patchcontext, myrpt->p.ourcontext, MAXPATCHCONTEXT);
 			myrpt->cidx = 0;
 			myrpt->exten[myrpt->cidx] = 0;
 			rpt_mutex_unlock(&myrpt->lock);
@@ -6051,7 +6044,7 @@
 		}
 	}
 	rpt_mutex_lock(&myrpt->lock);
-	strncpy(tmpstr,myrpt->rxchanname,sizeof(tmpstr) - 1);
+	ast_copy_string(tmpstr,myrpt->rxchanname,sizeof(tmpstr));
 	tele = strchr(tmpstr,'/');
 	if (!tele)
 	{
@@ -6098,7 +6091,7 @@
 	}
 	if (myrpt->txchanname)
 	{
-		strncpy(tmpstr,myrpt->txchanname,sizeof(tmpstr) - 1);
+		ast_copy_string(tmpstr,myrpt->txchanname,sizeof(tmpstr));
 		tele = strchr(tmpstr,'/');
 		if (!tele)
 		{
@@ -7209,10 +7202,9 @@
 		/* if is a remote, dont start one for it */
 		if (rpt_vars[i].remote)
 		{
-			strncpy(rpt_vars[i].freq, "146.580", sizeof(rpt_vars[i].freq) - 1);
-			strncpy(rpt_vars[i].rxpl, "100.0", sizeof(rpt_vars[i].rxpl) - 1);
-
-			strncpy(rpt_vars[i].txpl, "100.0", sizeof(rpt_vars[i].txpl) - 1);
+			strcpy(rpt_vars[i].freq, "146.580");
+			strcpy(rpt_vars[i].rxpl, "100.0");
+			strcpy(rpt_vars[i].txpl, "100.0");
 			rpt_vars[i].remmode = REM_MODE_FM;
 			rpt_vars[i].offset = REM_SIMPLEX;
 			rpt_vars[i].powerlevel = REM_MEDPWR;
@@ -7291,7 +7283,7 @@
 		ast_log(LOG_WARNING, "Rpt requires an argument (system node)\n");
 		return -1;
 	}
-	strncpy(tmp, (char *)data, sizeof(tmp)-1);
+	ast_copy_string(tmp, (char *)data, sizeof(tmp));
 	stringp=tmp;
 	strsep(&stringp, "|");
 	options = stringp;
@@ -7364,7 +7356,7 @@
 			return -1;
 		}
 		s=orig_s;
-		strncpy(s,options,l);
+		ast_copy_string(s,options,l);
 
 		template=strsep(&s,"|");
 		if(!template) {
@@ -7412,9 +7404,9 @@
 #else
 		if(exten)
 #endif
-			strncpy(chan->exten, exten, sizeof(chan->exten)-1);
+			ast_copy_string(chan->exten, exten, sizeof(chan->exten));
 		if(context)
-			strncpy(chan->context, context, sizeof(chan->context)-1);
+			ast_copy_string(chan->context, context, sizeof(chan->context));
 		} else {  /* increment the priority by default*/
 			chan->priority++;
 		}
@@ -7490,7 +7482,7 @@
 			ast_log(LOG_WARNING, "Reported node %s cannot be found!!\n",b1);
 			return -1;
 		}
-		strncpy(tmp,val,sizeof(tmp) - 1);
+		ast_copy_string(tmp,val,sizeof(tmp));
 		s = tmp;
 		s1 = strsep(&s,",");
 		s2 = strsep(&s,",");
@@ -7588,7 +7580,7 @@
 		/* zero the silly thing */
 		memset((char *)l,0,sizeof(struct rpt_link));
 		l->mode = 1;
-		strncpy(l->name,b1,MAXNODESTR - 1);
+		ast_copy_string(l->name,b1,MAXNODESTR);
 		l->isremote = 0;
 		l->chan = chan;
 		l->connected = 1;

Modified: branches/1.4/apps/app_sms.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_sms.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_sms.c (original)
+++ branches/1.4/apps/app_sms.c Wed Oct 25 09:32:08 2006
@@ -1389,7 +1389,7 @@
 			ast_module_user_remove(u);
 			return -1;
 		}
-		strncpy (h.queue, (char *)d, p - d);
+		strncpy(h.queue, (char *)d, p - d);
 		if (*p == '|')
 			p++;
 		d = p;

Modified: branches/1.4/apps/app_softhangup.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_softhangup.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_softhangup.c (original)
+++ branches/1.4/apps/app_softhangup.c Wed Oct 25 09:32:08 2006
@@ -74,7 +74,7 @@
 	all = options && strchr(options,'a');
 	c = ast_channel_walk_locked(NULL);
 	while (c) {
-		strncpy(name, c->name, sizeof(name)-1);
+		ast_copy_string(name, c->name, sizeof(name));
 		ast_mutex_unlock(&c->lock);
 		/* XXX watch out, i think it is wrong to access c-> after unlocking! */
 		if (all) {

Modified: branches/1.4/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_voicemail.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/apps/app_voicemail.c (original)
+++ branches/1.4/apps/app_voicemail.c Wed Oct 25 09:32:08 2006
@@ -7236,23 +7236,22 @@
 			char *tmpread, *tmpwrite;
 			emailbody = ast_strdup(s);
 
-			/* substitute strings \t and \n into the apropriate characters */
+			/* substitute strings \t and \n into the appropriate characters */
 			tmpread = tmpwrite = emailbody;
 			while ((tmpwrite = strchr(tmpread,'\\'))) {
-				int len = strlen("\n");
 				switch (tmpwrite[1]) {
 				case 'n':
-					strncpy(tmpwrite + len, tmpwrite + 2, strlen(tmpwrite + 2) + 1);
-					strncpy(tmpwrite, "\n", len);
+					*tmpwrite++ = '\n';
+					memmove(tmpwrite, tmpwrite + 1, strlen(tmpwrite + 1) + 1);
 					break;
 				case 't':
-					strncpy(tmpwrite + len, tmpwrite + 2, strlen(tmpwrite + 2) + 1);
-					strncpy(tmpwrite, "\t", len);
+					*tmpwrite++ = '\t';
+					memmove(tmpwrite, tmpwrite + 1, strlen(tmpwrite + 1) + 1);
 					break;
 				default:
 					ast_log(LOG_NOTICE, "Substitution routine does not support this character: %c\n", tmpwrite[1]);
 				}
-				tmpread = tmpwrite + len;
+				tmpread = tmpwrite + 1;
 			}
 		}
 		if ((s = ast_variable_retrieve(cfg, "general", "pagersubject")))
@@ -7261,23 +7260,22 @@
 			char *tmpread, *tmpwrite;
 			pagerbody = ast_strdup(s);
 
-			/* substitute strings \t and \n into the apropriate characters */
+			/* substitute strings \t and \n into the appropriate characters */
 			tmpread = tmpwrite = pagerbody;
 			while ((tmpwrite = strchr(tmpread, '\\'))) {
-				int len = strlen("\n");
 				switch (tmpwrite[1]) {
-					case 'n':
-						strncpy(tmpwrite + len, tmpwrite + 2, strlen(tmpwrite + 2) + 1);
-						strncpy(tmpwrite, "\n", len);
-						break;
-					case 't':
-						strncpy(tmpwrite + len, tmpwrite + 2, strlen(tmpwrite + 2) + 1);
-						strncpy(tmpwrite, "\t", len);
-						break;
-					default:
-						ast_log(LOG_NOTICE, "Substitution routine does not support this character: %c\n", tmpwrite[1]);
+				case 'n':
+					*tmpwrite++ = '\n';
+					memmove(tmpwrite, tmpwrite + 1, strlen(tmpwrite + 1) + 1);
+					break;
+				case 't':
+					*tmpwrite++ = '\t';
+					memmove(tmpwrite, tmpwrite + 1, strlen(tmpwrite + 1) + 1);
+					break;
+				default:
+					ast_log(LOG_NOTICE, "Substitution routine does not support this character: %c\n", tmpwrite[1]);
 				}
-				tmpread = tmpwrite + len;
+				tmpread = tmpwrite + 1;
 			}
 		}
 		AST_LIST_UNLOCK(&users);

Modified: branches/1.4/cdr/cdr_custom.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/cdr/cdr_custom.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/cdr/cdr_custom.c (original)
+++ branches/1.4/cdr/cdr_custom.c Wed Oct 25 09:32:08 2006
@@ -77,9 +77,9 @@
 		while(var) {
 			ast_mutex_lock(&lock);
 			if (!ast_strlen_zero(var->name) && !ast_strlen_zero(var->value)) {
-				if (strlen(var->value) > (sizeof(format) - 2))
+				if (strlen(var->value) > (sizeof(format) - 1))
 					ast_log(LOG_WARNING, "Format string too long, will be truncated, at line %d\n", var->lineno);
-				strncpy(format, var->value, sizeof(format) - 2);
+				ast_copy_string(format, var->value, sizeof(format) - 1);
 				strcat(format,"\n");
 				snprintf(master, sizeof(master),"%s/%s/%s", ast_config_AST_LOG_DIR, name, var->name);
 				ast_mutex_unlock(&lock);

Modified: branches/1.4/channels/chan_alsa.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_alsa.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/channels/chan_alsa.c (original)
+++ branches/1.4/channels/chan_alsa.c Wed Oct 25 09:32:08 2006
@@ -1158,7 +1158,7 @@
 		myc = context;
 		if (argc == 2) {
 			char *stringp = NULL;
-			strncpy(tmp, argv[1], sizeof(tmp) - 1);
+			ast_copy_string(tmp, argv[1], sizeof(tmp));
 			stringp = tmp;
 			strsep(&stringp, "@");
 			tmp2 = strsep(&stringp, "@");
@@ -1168,8 +1168,8 @@
 				myc = tmp2;
 		}
 		if (ast_exists_extension(NULL, myc, mye, 1, NULL)) {
-			strncpy(alsa.exten, mye, sizeof(alsa.exten) - 1);
-			strncpy(alsa.context, myc, sizeof(alsa.context) - 1);
+			ast_copy_string(alsa.exten, mye, sizeof(alsa.exten));
+			ast_copy_string(alsa.context, myc, sizeof(alsa.context));
 			hookstate = 1;
 			alsa_new(&alsa, AST_STATE_RINGING);
 		} else
@@ -1215,7 +1215,7 @@
 		myc = context;
 		if (argc == 3) {
 			char *stringp = NULL;
-			strncpy(tmp, argv[2], sizeof(tmp) - 1);
+			ast_copy_string(tmp, argv[2], sizeof(tmp));
 			stringp = tmp;
 			strsep(&stringp, "@");
 			tmp2 = strsep(&stringp, "@");
@@ -1225,8 +1225,8 @@
 				myc = tmp2;
 		}
 		if (ast_exists_extension(NULL, myc, mye, 1, NULL)) {
-			strncpy(alsa.exten, mye, sizeof(alsa.exten) - 1);
-			strncpy(alsa.context, myc, sizeof(alsa.context) - 1);
+			ast_copy_string(alsa.exten, mye, sizeof(alsa.exten));
+			ast_copy_string(alsa.context, myc, sizeof(alsa.context));
 			hookstate = 1;
 			alsa_new(&alsa, AST_STATE_RINGING);
 		} else

Modified: branches/1.4/channels/chan_features.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_features.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/channels/chan_features.c (original)
+++ branches/1.4/channels/chan_features.c Wed Oct 25 09:32:08 2006
@@ -436,8 +436,8 @@
 			for (x=0;x<3;x++)
 				init_sub(tmp->subs + x);
 			ast_mutex_init(&tmp->lock);
-			strncpy(tmp->tech, tech, sizeof(tmp->tech) - 1);
-			strncpy(tmp->dest, dest, sizeof(tmp->dest) - 1);
+			ast_copy_string(tmp->tech, tech, sizeof(tmp->tech));
+			ast_copy_string(tmp->dest, dest, sizeof(tmp->dest));
 			tmp->subchan = chan;
 			AST_LIST_LOCK(&features);
 			AST_LIST_INSERT_HEAD(&features, tmp, list);

Modified: branches/1.4/channels/chan_h323.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_h323.c?rev=46200&r1=46199&r2=46200&view=diff
==============================================================================
--- branches/1.4/channels/chan_h323.c (original)
+++ branches/1.4/channels/chan_h323.c Wed Oct 25 09:32:08 2006
@@ -601,7 +601,7 @@
 	ast_mutex_lock(&pvt->lock);
 	if (!gatekeeper_disable) {
 		if (ast_strlen_zero(pvt->exten)) {
-			strncpy(called_addr, dest, sizeof(called_addr));
+			ast_copy_string(called_addr, dest, sizeof(called_addr));
 		} else {
 			snprintf(called_addr, sizeof(called_addr), "%s@%s", pvt->exten, dest);
 		}
@@ -618,13 +618,13 @@
 	called_addr[sizeof(called_addr) - 1] = '\0';
 
 	if (c->cid.cid_num)
-		strncpy(pvt->options.cid_num, c->cid.cid_num, sizeof(pvt->options.cid_num));
+		ast_copy_string(pvt->options.cid_num, c->cid.cid_num, sizeof(pvt->options.cid_num));
 
 	if (c->cid.cid_name)
-		strncpy(pvt->options.cid_name, c->cid.cid_name, sizeof(pvt->options.cid_name));
+		ast_copy_string(pvt->options.cid_name, c->cid.cid_name, sizeof(pvt->options.cid_name));
 
 	if (c->cid.cid_rdnis) {
-		strncpy(pvt->options.cid_rdnis, c->cid.cid_rdnis, sizeof(pvt->options.cid_rdnis));
+		ast_copy_string(pvt->options.cid_rdnis, c->cid.cid_rdnis, sizeof(pvt->options.cid_rdnis));
 	}
 
 	pvt->options.presentation = c->cid.cid_pres;
@@ -1046,8 +1046,8 @@
 		/* Set the owner of this channel */
 		pvt->owner = ch;
 
-		strncpy(ch->context, pvt->context, sizeof(ch->context) - 1);
-		strncpy(ch->exten, pvt->exten, sizeof(ch->exten) - 1);
+		ast_copy_string(ch->context, pvt->context, sizeof(ch->context));
+		ast_copy_string(ch->exten, pvt->exten, sizeof(ch->exten));
 		ch->priority = 1;
 		if (!ast_strlen_zero(pvt->accountcode)) {
 			ast_string_field_set(ch, accountcode, pvt->accountcode);
@@ -1128,7 +1128,7 @@
 	} else {
 		pvt->nonCodecCapability &= ~AST_RTP_DTMF;
 	}
-	strncpy(pvt->context, default_context, sizeof(pvt->context) - 1);
+	ast_copy_string(pvt->context, default_context, sizeof(pvt->context));
 	pvt->newstate = pvt->newcontrol = pvt->newdigit = pvt->update_rtp_info = pvt->DTMFsched = -1;
 	ast_mutex_init(&pvt->lock);
 	/* Add to interface list */
@@ -1201,16 +1201,16 @@
 		ASTOBJ_INIT(alias);
 	}
 	if (!found && name)
-		strncpy(alias->name, name, sizeof(alias->name) - 1);
+		ast_copy_string(alias->name, name, sizeof(alias->name));
 	for (; v || ((v = alt) && !(alt = NULL)); v = v->next) {
 		if (!strcasecmp(v->name, "e164")) {
-			strncpy(alias->e164, v->value, sizeof(alias->e164) - 1);
+			ast_copy_string(alias->e164, v->value, sizeof(alias->e164));
 		} else if (!strcasecmp(v->name, "prefix")) {
-			strncpy(alias->prefix, v->value, sizeof(alias->prefix) - 1);
+			ast_copy_string(alias->prefix, v->value, sizeof(alias->prefix));
 		} else if (!strcasecmp(v->name, "context")) {
-			strncpy(alias->context, v->value, sizeof(alias->context) - 1);
+			ast_copy_string(alias->context, v->value, sizeof(alias->context));
 		} else if (!strcasecmp(v->name, "secret")) {
-			strncpy(alias->secret, v->value, sizeof(alias->secret) - 1);
+			ast_copy_string(alias->secret, v->value, sizeof(alias->secret));
 		} else {
 			if (strcasecmp(v->value, "h323")) {
 				ast_log(LOG_WARNING, "Keyword %s does not make sense in type=h323\n", v->name);
@@ -1349,9 +1349,9 @@
 	user->ha = (struct ast_ha *)NULL;
 	memcpy(&user->options, &global_options, sizeof(user->options));
 	/* Set default context */
-	strncpy(user->context, default_context, sizeof(user->context) - 1);
+	ast_copy_string(user->context, default_context, sizeof(user->context));
 	if (user && !found)
-		strncpy(user->name, name, sizeof(user->name) - 1);
+		ast_copy_string(user->name, name, sizeof(user->name));
 
 #if 0 /* XXX Port channel variables functionality from chan_sip XXX */
 	if (user->chanvars) {
@@ -1364,11 +1364,11 @@
 		if (!update_common_options(v, &user->options))
 			continue;
 		if (!strcasecmp(v->name, "context")) {
-			strncpy(user->context, v->value, sizeof(user->context) - 1);
+			ast_copy_string(user->context, v->value, sizeof(user->context));
 		} else if (!strcasecmp(v->name, "secret")) {
-			strncpy(user->secret, v->value, sizeof(user->secret) - 1);
+			ast_copy_string(user->secret, v->value, sizeof(user->secret));
 		} else if (!strcasecmp(v->name, "accountcode")) {
-			strncpy(user->accountcode, v->value, sizeof(user->accountcode) - 1);
+			ast_copy_string(user->accountcode, v->value, sizeof(user->accountcode));
 		} else if (!strcasecmp(v->name, "host")) {
 			if (!strcasecmp(v->value, "dynamic")) {
 				ast_log(LOG_ERROR, "A dynamic host on a type=user does not make any sense\n");
@@ -1456,7 +1456,7 @@
 	peer->addr.sin_port = htons(h323_signalling_port);
 	peer->addr.sin_family = AF_INET;
 	if (!found && name)
-		strncpy(peer->name, name, sizeof(peer->name) - 1);
+		ast_copy_string(peer->name, name, sizeof(peer->name));
 
 #if 0 /* XXX Port channel variables functionality from chan_sip XXX */
 	if (peer->chanvars) {
@@ -1602,7 +1602,7 @@
 	char *hostn;
 	char peer[256] = "";
 
-	strncpy(peer, opeer, sizeof(peer) - 1);
+	ast_copy_string(peer, opeer, sizeof(peer));
 	port = strchr(peer, ':');
 	if (port) {
 		*port = '\0';
@@ -1690,7 +1690,7 @@
 			*cause = AST_CAUSE_INCOMPATIBLE_DESTINATION;
 		return NULL;
 	}
-	strncpy(tmp, dest, sizeof(tmp) - 1);
+	ast_copy_string(tmp, dest, sizeof(tmp));
 	host = strchr(tmp, '@');
 	if (host) {
 		*host = '\0';
@@ -1707,7 +1707,7 @@
 		h323_set_id(h323id);
 	}
 	if (ext) {
-		strncpy(pvt->exten, ext, sizeof(pvt->exten) - 1);
+		ast_copy_string(pvt->exten, ext, sizeof(pvt->exten));
 	}
 	if (h323debug)
 		ast_log(LOG_DEBUG, "Extension: %s Host: %s\n", pvt->exten, host);
@@ -1858,8 +1858,7 @@
 	ast_rtp_get_us(pvt->rtp, &us);
 	ast_mutex_unlock(&pvt->lock);
 
-	strncpy(info->addr, ast_inet_ntoa(us.sin_addr), sizeof(info->addr));
-	info->addr[sizeof(info->addr)-1] = '\0';
+	ast_copy_string(info->addr, ast_inet_ntoa(us.sin_addr), sizeof(info->addr));
 	info->port = ntohs(us.sin_port);
 	if (h323debug)
 		ast_log(LOG_DEBUG, "Sending RTP 'US' %s:%d\n", info->addr, info->port);
@@ -2077,8 +2076,8 @@
 	/* Decide if we are allowing Gatekeeper routed calls*/
 	if ((!strcasecmp(cd->sourceIp, gatekeeper)) && (gkroute == -1) && !gatekeeper_disable) {
 		if (!ast_strlen_zero(cd->call_dest_e164)) {
-			strncpy(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten) - 1);

[... 714 lines stripped ...]


More information about the asterisk-commits mailing list