]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
apparently developers are still not aware that they should be use ast_copy_string...
authorKevin P. Fleming <kpfleming@digium.com>
Wed, 25 Oct 2006 14:32:08 +0000 (14:32 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Wed, 25 Oct 2006 14:32:08 +0000 (14:32 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@46200 65c4cc65-6c06-0410-ace0-fbb531ad65f3

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

index f0e39e036738a2d6eb9540f71dfd0f2bc5f4c820..f0c5d1b07af52d8754c8420f301f5ef6c088d64e 100644 (file)
@@ -71,21 +71,20 @@ static int cpeid_exec(struct ast_channel *chan, void *idata)
        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 @@ static int cpeid_exec(struct ast_channel *chan, void *idata)
                                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 @@ static int cpeid_exec(struct ast_channel *chan, void *idata)
                }
                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)
index 9d93dabdf4bd56aa1e1f2309fea5dc0bea0fbff2..c44b931364522258150a614c1e0854ca2bf6e9b7 100644 (file)
@@ -141,7 +141,7 @@ static int ices_exec(struct ast_channel *chan, void *data)
                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 */           
index 66203b1b04d98f60ef754f9277a2525c9caa8db7..b4e9006fb39b780a8b3812ec18a5a8139b053cce 100644 (file)
@@ -78,13 +78,13 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
 {
        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 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
   
        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 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
        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 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
        }
        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 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
                                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 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
 
        ast_stopstream(dchan);  
        ast_hangup(dchan);
-       free(orig_s);
        
        ast_module_user_remove(u);
        
index 6ad11be861510ef68a40a840ffde4bd798a18dc5..33a22262c09b018b094c5ad3aa0eee494901159f 100644 (file)
@@ -776,10 +776,6 @@ static void clear_and_free_interfaces(void)
    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 @@ static void queue_set_param(struct call_queue *q, const char *param, const char
                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)
-                                       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);
+               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 (strlen(lastc)) {
-                               ast_copy_string(q->sound_periodicannounce[i], lastc, sizeof(q->sound_periodicannounce[i]));
+                               if (i == MAX_PERIODIC_ANNOUNCEMENTS)
+                                       break;
                        }
                } 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);
index a51a8a5083f424e84b461b9f1712bd54c2b1b0ef..8de76c7ff0ae84bb82ace2ec4c23553a858927af 100644 (file)
@@ -212,7 +212,7 @@ static int record_exec(struct ast_channel *chan, void *data)
                } 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 */
        
        
index ac966e9bbb522e847745dacc49a65a6858f0c237..9872051cb3d5b18fcee91093379763fedf53e8a3 100644 (file)
@@ -1425,7 +1425,7 @@ static int rpt_do_lstats(int fd, int argc, char *argv[])
                                        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 @@ pthread_attr_t attr;
                }
        }
        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 @@ struct ast_channel *mychannel,*genchannel;
                }
        }
 
-       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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
        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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                                        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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                        }
                        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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                                        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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                                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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                        }
                        *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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                                        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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                                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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                        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 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm
                        }
                        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 @@ static int function_autopatchup(struct rpt *myrpt, char *param, char *digitbuf,
                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 @@ static int function_autopatchup(struct rpt *myrpt, char *param, char *digitbuf,
                                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 @@ static int collect_function_digits(struct rpt *myrpt, char *digits,
        
        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 @@ static int collect_function_digits(struct rpt *myrpt, char *digits,
                        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 @@ struct    ast_frame wf;
        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 @@ struct    ast_frame wf;
                        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 @@ struct    ast_frame wf;
                                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 @@ int       res;
                        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 @@ int       res;
                                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 @@ int       band,txoffset = 0,txpower = 0,txpl;
        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 check_freq_rbi(int m, int d, int *defmode)
  
 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_freq(char *mhz, char *decimals, char *freq)
  
 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 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c
                        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 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c
 
                        /* 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 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c
                        }       
                        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 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c
                        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 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c
                        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 @@ int       ret,res = 0,src;
                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 @@ char      tmp[300],cmd[300],dest[300],src[300],c;
 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 @@ static int attempt_reconnect(struct rpt *myrpt, struct rpt_link *l)
        /* 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 @@ char      cmd[MAXDTMF+1] = "";
                                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 @@ char      cmd[MAXDTMF+1] = "";
                                    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 @@ char      cmd[MAXDTMF+1] = "";
                        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 @@ char tmpstr[300];
                }
        }
        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 @@ char tmpstr[300];
        }
        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 @@ struct ast_config *cfg;
                /* 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 @@ static int rpt_exec(struct ast_channel *chan, void *data)
                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 @@ static int rpt_exec(struct ast_channel *chan, void *data)
                        return -1;
                }
                s=orig_s;
-               strncpy(s,options,l);
+               ast_copy_string(s,options,l);
 
                template=strsep(&s,"|");
                if(!template) {
@@ -7412,9 +7404,9 @@ static int rpt_exec(struct ast_channel *chan, void *data)
 #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 @@ static int rpt_exec(struct ast_channel *chan, void *data)
                        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 @@ static int rpt_exec(struct ast_channel *chan, void *data)
                /* 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;
index 8fd5ee617b65621b2b739bf31429e6e4f4760483..5bb076e81ee2401a457b3c9dab7712bc819a9d1d 100644 (file)
@@ -1389,7 +1389,7 @@ static int sms_exec (struct ast_channel *chan, void *data)
                        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;
index 46584c3e7bf4aef9f7c61f27278035794163e4be..018edc07d7066fbfa1d62d28d5cc6f284b8cef1e 100644 (file)
@@ -74,7 +74,7 @@ static int softhangup_exec(struct ast_channel *chan, void *data)
        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) {
index 429a92688f01d480abb8b786489c77f0ed05ecc1..7ec04e4806fbfeb36f185b3acfe22fb8bb54d2f0 100644 (file)
@@ -7236,23 +7236,22 @@ static int load_config(void)
                        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 @@ static int load_config(void)
                        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);
index 803c3d9b71b825b87871e097bace6297eef5d9f1..995531761b3fa6766180c160491d26080a728889 100644 (file)
@@ -77,9 +77,9 @@ static int load_config(int reload)
                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);
index 58b5e0ea8cb51a5cbda55c3c420b0d1b38b12ef7..6d4617a6cd44c53817f8f4ee50b469aa1937c228 100644 (file)
@@ -1158,7 +1158,7 @@ static int console_dial_deprecated(int fd, int argc, char *argv[])
                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 @@ static int console_dial_deprecated(int fd, int argc, char *argv[])
                                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 @@ static int console_dial(int fd, int argc, char *argv[])
                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 @@ static int console_dial(int fd, int argc, char *argv[])
                                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
index 5f01738d20154ead70db467d8fcea1ecdb3fbca0..0f239ce4b614f0caacbfa49eeba321131848b36f 100644 (file)
@@ -436,8 +436,8 @@ static struct feature_pvt *features_alloc(char *data, int format)
                        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);
index ef08d20bec68a608f38455247cf6b34f043289d8..861640be5a8ac5f8409b7f0570c1c5da97f1f3b6 100644 (file)
@@ -601,7 +601,7 @@ static int oh323_call(struct ast_channel *c, char *dest, int timeout)
        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 @@ static int oh323_call(struct ast_channel *c, char *dest, int timeout)
        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 @@ static struct ast_channel *__oh323_new(struct oh323_pvt *pvt, int state, const c
                /* 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 @@ static struct oh323_pvt *oh323_alloc(int callid)
        } 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 @@ static struct oh323_alias *build_alias(const char *name, struct ast_variable *v,
                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 @@ static struct oh323_user *build_user(char *name, struct ast_variable *v, struct
        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 @@ static struct oh323_user *build_user(char *name, struct ast_variable *v, struct
                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 @@ static struct oh323_peer *build_peer(const char *name, struct ast_variable *v, s
        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 @@ static int create_addr(struct oh323_pvt *pvt, char *opeer)
        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 @@ static struct ast_channel *oh323_request(const char *type, int format, void *dat
                        *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 @@ static struct ast_channel *oh323_request(const char *type, int format, void *dat
                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 @@ static struct rtp_info *external_rtp_create(unsigned call_reference, const char
        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 @@ static call_options_t *setup_incoming_call(call_details_t *cd)
        /* 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);
-                       strncpy(pvt->context, default_context, sizeof(pvt->context) - 1);
+                       ast_copy_string(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten));
+                       ast_copy_string(pvt->context, default_context, sizeof(pvt->context));
                } else {
                        alias = find_alias(cd->call_dest_alias, 1);
                        if (!alias) {
@@ -2086,8 +2085,8 @@ static call_options_t *setup_incoming_call(call_details_t *cd)
                                oh323_destroy(pvt);
                                return NULL;
                        }
-                       strncpy(pvt->exten, alias->name, sizeof(pvt->exten) - 1);
-                       strncpy(pvt->context, alias->context, sizeof(pvt->context) - 1);
+                       ast_copy_string(pvt->exten, alias->name, sizeof(pvt->exten));
+                       ast_copy_string(pvt->context, alias->context, sizeof(pvt->context));
                }
        } else {
                /* Either this call is not from the Gatekeeper
@@ -2104,11 +2103,11 @@ static call_options_t *setup_incoming_call(call_details_t *cd)
                                oh323_destroy(pvt);
                                return NULL;
                        }
-                       strncpy(pvt->context, default_context, sizeof(pvt->context) - 1);
+                       ast_copy_string(pvt->context, default_context, sizeof(pvt->context));
                        if (!ast_strlen_zero(pvt->cd.call_dest_e164)) {
-                               strncpy(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten) - 1);
+                               ast_copy_string(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten));
                        } else {
-                               strncpy(pvt->exten, cd->call_dest_alias, sizeof(pvt->exten) - 1);
+                               ast_copy_string(pvt->exten, cd->call_dest_alias, sizeof(pvt->exten));
                        }
                        if (h323debug)
                                ast_log(LOG_DEBUG, "Sending %s@%s to context [%s] extension %s\n", cd->call_source_aliases, cd->sourceIp, pvt->context, pvt->exten);
@@ -2122,9 +2121,9 @@ static call_options_t *setup_incoming_call(call_details_t *cd)
                                                        ASTOBJ_UNREF(user, oh323_destroy_user);
                                                        return NULL;
                                                }
-                                               strncpy(pvt->context, default_context, sizeof(pvt->context) - 1);
+                                               ast_copy_string(pvt->context, default_context, sizeof(pvt->context));
                                        } else {
-                                               strncpy(pvt->context, user->context, sizeof(pvt->context) - 1);
+                                               ast_copy_string(pvt->context, user->context, sizeof(pvt->context));
                                        }
                                        pvt->exten[0] = 'i';
                                        pvt->exten[1] = '\0';
@@ -2134,16 +2133,16 @@ static call_options_t *setup_incoming_call(call_details_t *cd)
                                        return NULL;    /* XXX: Hmmm... Why to setup context if we drop connection immediately??? */
                                }
                        }
-                       strncpy(pvt->context, user->context, sizeof(pvt->context) - 1);
+                       ast_copy_string(pvt->context, user->context, sizeof(pvt->context));
                        memcpy(&pvt->options, &user->options, sizeof(pvt->options));
                        pvt->jointcapability = pvt->options.capability;
                        if (!ast_strlen_zero(pvt->cd.call_dest_e164)) {
-                               strncpy(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten) - 1);
+                               ast_copy_string(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten));
                        } else {
-                               strncpy(pvt->exten, cd->call_dest_alias, sizeof(pvt->exten) - 1);
+                               ast_copy_string(pvt->exten, cd->call_dest_alias, sizeof(pvt->exten));
                        }
                        if (!ast_strlen_zero(user->accountcode)) {
-                               strncpy(pvt->accountcode, user->accountcode, sizeof(pvt->accountcode) - 1);
+                               ast_copy_string(pvt->accountcode, user->accountcode, sizeof(pvt->accountcode));
                        }
                        if (user->amaflags) {
                                pvt->amaflags = user->amaflags;
@@ -2176,7 +2175,7 @@ static int answer_call(unsigned call_reference, const char *token)
                return 0;
        }
        /* Check if requested extension@context pair exists in the dialplan */
-       strncpy(tmp_exten, pvt->exten, sizeof(tmp_exten));
+       ast_copy_string(tmp_exten, pvt->exten, sizeof(tmp_exten));
 
        /* Try to find best extension in specified context */
        if ((tmp_exten[0] != '\0') && (tmp_exten[1] == '\0')) {
@@ -2218,7 +2217,7 @@ static int answer_call(unsigned call_reference, const char *token)
        } else if ((try_exten != ext_original) && (strcmp(pvt->exten, tmp_exten) != 0)) {
                if (h323debug)
                        ast_log(LOG_DEBUG, "Going to extension %s@%s because %s@%s isn't exists\n", tmp_exten, pvt->context, pvt->exten, pvt->context);
-               strncpy(pvt->exten, tmp_exten, sizeof(pvt->exten));
+               ast_copy_string(pvt->exten, tmp_exten, sizeof(pvt->exten));
        }
 
        /* allocate a channel and tell asterisk about it */
@@ -2697,7 +2696,7 @@ static int reload_config(int is_reload)
        if (!h323_end_point_exist()) {
                h323_end_point_create();
        }
-       strncpy(_gatekeeper, gatekeeper, sizeof(_gatekeeper));
+       ast_copy_string(_gatekeeper, gatekeeper, sizeof(_gatekeeper));
        gk_discover = gatekeeper_discover;
        gk_disable = gatekeeper_disable;
        memset(&bindaddr, 0, sizeof(bindaddr));
@@ -2708,7 +2707,7 @@ static int reload_config(int is_reload)
        global_options.dtmfmode = H323_DTMF_RFC2833;
        global_options.capability = GLOBAL_CAPABILITY;
        global_options.bridge = 1;              /* Do native bridging by default */
-       strncpy(default_context, "default", sizeof(default_context) - 1);
+       strcpy(default_context, "default");
        h323_signalling_port = 1720;
        gatekeeper_disable = 1;
        gatekeeper_discover = 0;
@@ -2781,14 +2780,14 @@ static int reload_config(int is_reload)
                                gatekeeper_discover = 1;
                        } else {
                                gatekeeper_disable = 0;
-                               strncpy(gatekeeper, v->value, sizeof(gatekeeper) - 1);
+                               ast_copy_string(gatekeeper, v->value, sizeof(gatekeeper));
                        }
                } else if (!strcasecmp(v->name, "secret")) {
-                       strncpy(secret, v->value, sizeof(secret) - 1);
+                       ast_copy_string(secret, v->value, sizeof(secret));
                } else if (!strcasecmp(v->name, "AllowGKRouted")) {
                        gkroute = ast_true(v->value);
                } else if (!strcasecmp(v->name, "context")) {
-                       strncpy(default_context, v->value, sizeof(default_context) - 1);
+                       ast_copy_string(default_context, v->value, sizeof(default_context));
                        ast_verbose(VERBOSE_PREFIX_2 "Setting default context to %s\n", default_context);
                } else if (!strcasecmp(v->name, "UserByAlias")) {
                        userbyalias = ast_true(v->value);
index 5a4ed3cd40ffdf0abbdf9f7253fcadb07946d2d4..e2a0feddc0e2e6caf058eac6a92649afaf14213a 100644 (file)
@@ -8579,11 +8579,9 @@ static struct iax2_user *build_user(const char *name, struct ast_variable *v, st
                                ast_string_field_set(user, dbsecret, v->value);
                        } else if (!strcasecmp(v->name, "secret")) {
                                if (!ast_strlen_zero(user->secret)) {
-                                       char buf99[100];
-                                       strncpy(buf99,user->secret,100); /* just in case some weirdness happens in the string_field_build */
-                                       ast_string_field_build(user,secret,"%s;%s",buf99,v->value);
-                                       /* strncpy(user->secret + strlen(user->secret), ";", sizeof(user->secret) - strlen(user->secret) - 1);
-                                          strncpy(user->secret + strlen(user->secret), v->value, sizeof(user->secret) - strlen(user->secret) - 1); */
+                                       char *old = ast_strdupa(user->secret);
+
+                                       ast_string_field_build(user, secret, "%s;%s", old, v->value);
                                } else
                                        ast_string_field_set(user, secret, v->value);
                        } else if (!strcasecmp(v->name, "callerid")) {
index d53433ab6974c4456cba7c3daf155e54663cf8e7..778fd4ca7b2adbefaae9ce1b596333ae043ed5dd 100644 (file)
@@ -3651,7 +3651,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                        } else if (!strcasecmp(v->name, "port")) {
                                gw->addr.sin_port = htons(atoi(v->value));
                        } else if (!strcasecmp(v->name, "context")) {
-                               strncpy(context, v->value, sizeof(context) - 1);
+                               ast_copy_string(context, v->value, sizeof(context));
                        } else if (!strcasecmp(v->name, "dtmfmode")) {
                                if (!strcasecmp(v->value, "inband"))
                                        dtmfmode = MGCP_DTMF_INBAND;
@@ -3673,9 +3673,9 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                        ast_callerid_split(v->value, cid_name, sizeof(cid_name), cid_num, sizeof(cid_num));
                                }
                        } else if (!strcasecmp(v->name, "language")) {
-                               strncpy(language, v->value, sizeof(language)-1);
+                               ast_copy_string(language, v->value, sizeof(language));
                        } else if (!strcasecmp(v->name, "accountcode")) {
-                               strncpy(accountcode, v->value, sizeof(accountcode)-1);
+                               ast_copy_string(accountcode, v->value, sizeof(accountcode));
                        } else if (!strcasecmp(v->name, "amaflags")) {
                                y = ast_cdr_amaflags2int(v->value);
                                if (y < 0) {
@@ -3684,7 +3684,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                        amaflags = y;
                                }
                        } else if (!strcasecmp(v->name, "musiconhold")) {
-                               strncpy(musicclass, v->value, sizeof(musicclass)-1);
+                               ast_copy_string(musicclass, v->value, sizeof(musicclass));
                        } else if (!strcasecmp(v->name, "callgroup")) {
                                cur_callergroup = ast_get_group(v->value);
                        } else if (!strcasecmp(v->name, "pickupgroup")) {
@@ -3698,7 +3698,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                        } else if (!strcasecmp(v->name, "canreinvite")) {
                                canreinvite = ast_true(v->value);
                        } else if (!strcasecmp(v->name, "mailbox")) {
-                               strncpy(mailbox, v->value, sizeof(mailbox) -1);
+                               ast_copy_string(mailbox, v->value, sizeof(mailbox));
                        } else if (!strcasecmp(v->name, "adsi")) {
                                adsi = ast_true(v->value);
                        } else if (!strcasecmp(v->name, "callreturn")) {
@@ -3736,19 +3736,18 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                                ast_mutex_init(&e->lock);
                                                ast_mutex_init(&e->rqnt_queue_lock);
                                                ast_mutex_init(&e->cmd_queue_lock);
-                                               strncpy(e->name, v->value, sizeof(e->name) - 1);
+                                               ast_copy_string(e->name, v->value, sizeof(e->name));
                                                e->needaudit = 1;
                                        }
-                                       strncpy(gw->wcardep, v->value, sizeof(gw->wcardep) - 1);
-                                       /*strncpy(e->name, "aaln/" "*", sizeof(e->name) - 1);*/
+                                       ast_copy_string(gw->wcardep, v->value, sizeof(gw->wcardep));
                                        /* XXX Should we really check for uniqueness?? XXX */
-                                       strncpy(e->accountcode, accountcode, sizeof(e->accountcode) - 1);
-                                       strncpy(e->context, context, sizeof(e->context) - 1);
-                                       strncpy(e->cid_num, cid_num, sizeof(e->cid_num) - 1);
-                                       strncpy(e->cid_name, cid_name, sizeof(e->cid_name) - 1);
-                                       strncpy(e->language, language, sizeof(e->language) - 1);
-                                       strncpy(e->musicclass, musicclass, sizeof(e->musicclass) - 1);
-                                       strncpy(e->mailbox, mailbox, sizeof(e->mailbox) - 1);
+                                       ast_copy_string(e->accountcode, accountcode, sizeof(e->accountcode));
+                                       ast_copy_string(e->context, context, sizeof(e->context));
+                                       ast_copy_string(e->cid_num, cid_num, sizeof(e->cid_num));
+                                       ast_copy_string(e->cid_name, cid_name, sizeof(e->cid_name));
+                                       ast_copy_string(e->language, language, sizeof(e->language));
+                                       ast_copy_string(e->musicclass, musicclass, sizeof(e->musicclass));
+                                       ast_copy_string(e->mailbox, mailbox, sizeof(e->mailbox));
                                        snprintf(e->rqnt_ident, sizeof(e->rqnt_ident), "%08lx", ast_random());
                                        e->msgstate = -1;
                                        e->amaflags = amaflags;
@@ -3836,17 +3835,17 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                                ast_mutex_init(&e->lock);
                                                ast_mutex_init(&e->rqnt_queue_lock);
                                                ast_mutex_init(&e->cmd_queue_lock);
-                                               strncpy(e->name, v->value, sizeof(e->name) - 1);
+                                               ast_copy_string(e->name, v->value, sizeof(e->name));
                                                e->needaudit = 1;
                                        }
                                        /* XXX Should we really check for uniqueness?? XXX */
-                                       strncpy(e->accountcode, accountcode, sizeof(e->accountcode) - 1);
-                                       strncpy(e->context, context, sizeof(e->context) - 1);
-                                       strncpy(e->cid_num, cid_num, sizeof(e->cid_num) - 1);
-                                       strncpy(e->cid_name, cid_name, sizeof(e->cid_name) - 1);
-                                       strncpy(e->language, language, sizeof(e->language) - 1);
-                                       strncpy(e->musicclass, musicclass, sizeof(e->musicclass) - 1);
-                                       strncpy(e->mailbox, mailbox, sizeof(e->mailbox)-1);
+                                       ast_copy_string(e->accountcode, accountcode, sizeof(e->accountcode));
+                                       ast_copy_string(e->context, context, sizeof(e->context));
+                                       ast_copy_string(e->cid_num, cid_num, sizeof(e->cid_num));
+                                       ast_copy_string(e->cid_name, cid_name, sizeof(e->cid_name));
+                                       ast_copy_string(e->language, language, sizeof(e->language));
+                                       ast_copy_string(e->musicclass, musicclass, sizeof(e->musicclass));
+                                       ast_copy_string(e->mailbox, mailbox, sizeof(e->mailbox));
                                        if (!ast_strlen_zero(mailbox)) {
                                                ast_verbose(VERBOSE_PREFIX_3 "Setting mailbox '%s' on %s@%s\n", mailbox, gw->name, e->name);
                                        }
@@ -3899,7 +3898,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
                                                                memset(sub, 0, sizeof(struct mgcp_subchannel));
                                                                ast_mutex_init(&sub->lock);
                                                                ast_mutex_init(&sub->cx_queue_lock);
-                                                               strncpy(sub->magic, MGCP_SUBCHANNEL_MAGIC, sizeof(sub->magic) - 1);
+                                                               ast_copy_string(sub->magic, MGCP_SUBCHANNEL_MAGIC, sizeof(sub->magic));
                                                                sub->parent = e;
                                                                sub->id = i;
                                                                snprintf(sub->txident, sizeof(sub->txident), "%08lx", ast_random());
index 30ee32346324c347b8681bc47b4f196945e7669b..6b06529d6cb23b4b5bb9b738d18239d608909114 100644 (file)
@@ -129,10 +129,10 @@ static struct nbs_pvt *nbs_alloc(void *data)
 {
        struct nbs_pvt *p;
        int flags = 0;
-       char stream[256] = "";
+       char stream[256];
        char *opts;
 
-       strncpy(stream, data, sizeof(stream) - 1);
+       ast_copy_string(stream, data, sizeof(stream));
        if ((opts = strchr(stream, ':'))) {
                *opts = '\0';
                opts++;
@@ -153,7 +153,7 @@ static struct nbs_pvt *nbs_alloc(void *data)
                } else
                        flags = NBS_FLAG_OVERSPEAK;
                
-               strncpy(p->stream, stream, sizeof(p->stream) - 1);
+               ast_copy_string(p->stream, stream, sizeof(p->stream));
                p->nbs = nbs_newstream("asterisk", stream, flags);
                if (!p->nbs) {
                        ast_log(LOG_WARNING, "Unable to allocate new NBS stream '%s' with flags %d\n", stream, flags);
@@ -246,8 +246,8 @@ static struct ast_channel *nbs_new(struct nbs_pvt *i, int state)
                if (state == AST_STATE_RING)
                        tmp->rings = 1;
                tmp->tech_pvt = i;
-               strncpy(tmp->context, context, sizeof(tmp->context)-1);
-               strncpy(tmp->exten, "s",  sizeof(tmp->exten) - 1);
+               ast_copy_string(tmp->context, context, sizeof(tmp->context));
+               ast_copy_string(tmp->exten, "s",  sizeof(tmp->exten));
                ast_string_field_set(tmp, language, "");
                i->owner = tmp;
                i->u = ast_module_user_add(tmp);
index f6380ba63a05f2bb95f9249eb8949e9e3504ab5c..91854b7ad35927cae820afd487cfaac80b1f0ffb 100644 (file)
@@ -312,12 +312,12 @@ static int phone_call(struct ast_channel *ast, char *dest, int timeout)
        }
        /* the standard format of ast->callerid is:  "name" <number>, but not always complete */
        if (ast_strlen_zero(ast->cid.cid_name))
-               strncpy(cid.name, DEFAULT_CALLER_ID, sizeof(cid.name) - 1);
+               strcpy(cid.name, DEFAULT_CALLER_ID);
        else
-               strncpy(cid.name, ast->cid.cid_name, sizeof(cid.name) - 1);
+               ast_copy_string(cid.name, ast->cid.cid_name, sizeof(cid.name));
 
        if (ast->cid.cid_num) 
-               strncpy(cid.number, ast->cid.cid_num, sizeof(cid.number) - 1);
+               ast_copy_string(cid.number, ast->cid.cid_num, sizeof(cid.number));
 
        p = ast->tech_pvt;
 
@@ -866,11 +866,11 @@ static struct ast_channel *phone_new(struct phone_pvt *i, int state, char *conte
                if (state == AST_STATE_RING)
                        tmp->rings = 1;
                tmp->tech_pvt = i;
-               strncpy(tmp->context, context, sizeof(tmp->context)-1);
+               ast_copy_string(tmp->context, context, sizeof(tmp->context));
                if (!ast_strlen_zero(i->ext))
-                       strncpy(tmp->exten, i->ext, sizeof(tmp->exten)-1);
+                       ast_copy_string(tmp->exten, i->ext, sizeof(tmp->exten));
                else
-                       strncpy(tmp->exten, "s",  sizeof(tmp->exten) - 1);
+                       strcpy(tmp->exten, "s");
                if (!ast_strlen_zero(i->language))
                        ast_string_field_set(tmp, language, i->language);
 
@@ -1200,15 +1200,15 @@ static struct phone_pvt *mkif(char *iface, int mode, int txgain, int rxgain)
                tmp->lastinput = -1;
                tmp->ministate = 0;
                memset(tmp->ext, 0, sizeof(tmp->ext));
-               strncpy(tmp->language, language, sizeof(tmp->language)-1);
-               strncpy(tmp->dev, iface, sizeof(tmp->dev)-1);
-               strncpy(tmp->context, context, sizeof(tmp->context)-1);
+               ast_copy_string(tmp->language, language, sizeof(tmp->language));
+               ast_copy_string(tmp->dev, iface, sizeof(tmp->dev));
+               ast_copy_string(tmp->context, context, sizeof(tmp->context));
                tmp->next = NULL;
                tmp->obuflen = 0;
                tmp->dialtone = 0;
                tmp->cpt = 0;
-               strncpy(tmp->cid_num, cid_num, sizeof(tmp->cid_num)-1);
-               strncpy(tmp->cid_name, cid_name, sizeof(tmp->cid_name)-1);
+               ast_copy_string(tmp->cid_num, cid_num, sizeof(tmp->cid_num));
+               ast_copy_string(tmp->cid_name, cid_name, sizeof(tmp->cid_name));
                tmp->txgain = txgain;
                ioctl(tmp->fd, PHONE_PLAY_VOLUME, tmp->txgain);
                tmp->rxgain = rxgain;
@@ -1379,7 +1379,7 @@ static int load_module(void)
                } else if (!strcasecmp(v->name, "silencesupression")) {
                        silencesupression = ast_true(v->value);
                } else if (!strcasecmp(v->name, "language")) {
-                       strncpy(language, v->value, sizeof(language)-1);
+                       ast_copy_string(language, v->value, sizeof(language));
                } else if (!strcasecmp(v->name, "callerid")) {
                        ast_callerid_split(v->value, cid_name, sizeof(cid_name), cid_num, sizeof(cid_num));
                } else if (!strcasecmp(v->name, "mode")) {
@@ -1398,7 +1398,7 @@ static int load_module(void)
                        else
                                ast_log(LOG_WARNING, "Unknown mode: %s\n", v->value);
                } else if (!strcasecmp(v->name, "context")) {
-                       strncpy(context, v->value, sizeof(context)-1);
+                       ast_copy_string(context, v->value, sizeof(context));
                } else if (!strcasecmp(v->name, "format")) {
                        if (!strcasecmp(v->value, "g723.1")) {
                                prefformat = AST_FORMAT_G723_1;
index 039cc50925de5a441139e8b2f2a266d985789163..d449e4a23cca4f995e3dd4ac18f1d7e5f34151c5 100644 (file)
@@ -8485,7 +8485,7 @@ static int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoi
 
                        /* This is an attended transfer */
                        referdata->attendedtransfer = 1;
-                       strncpy(referdata->replaces_callid, ptr+9, sizeof(referdata->replaces_callid));
+                       ast_copy_string(referdata->replaces_callid, ptr+9, sizeof(referdata->replaces_callid));
                        ast_uri_decode(referdata->replaces_callid);
                        if ((ptr = strchr(referdata->replaces_callid, ';')))    /* Find options */ {
                                *ptr++ = '\0';
@@ -8532,9 +8532,9 @@ static int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoi
                if ((urioption = strchr(ptr, ';')))
                        *urioption++ = '\0';
                /* Save the domain for the dial plan */
-               strncpy(referdata->refer_to_domain, ptr, sizeof(referdata->refer_to_domain));
+               ast_copy_string(referdata->refer_to_domain, ptr, sizeof(referdata->refer_to_domain));
                if (urioption)
-                       strncpy(referdata->refer_to_urioption, urioption, sizeof(referdata->refer_to_urioption));
+                       ast_copy_string(referdata->refer_to_urioption, urioption, sizeof(referdata->refer_to_urioption));
        }
 
        if ((ptr = strchr(refer_to, ';')))      /* Remove options */
@@ -8559,7 +8559,7 @@ static int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoi
                                        S_OR(transferer->context, default_context));
        }
 
-       strncpy(referdata->refer_to_context, transfer_context, sizeof(referdata->refer_to_context));
+       ast_copy_string(referdata->refer_to_context, transfer_context, sizeof(referdata->refer_to_context));
        
        /* Either an existing extension or the parking extension */
        if (ast_exists_extension(NULL, transfer_context, refer_to, 1, NULL) ) {
index fb243ff4931f5ce3352c8f28acac8ea1e0dcc9fa..ce525e20b835c873f1dc52c5062b9c9c49f3957b 100644 (file)
@@ -678,7 +678,7 @@ int ast_cdr_appenduserfield(struct ast_channel *chan, const char *userfield)
                int len = strlen(cdr->userfield);
 
                if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED))
-                       strncpy(cdr->userfield+len, userfield, sizeof(cdr->userfield) - len - 1);
+                       ast_copy_string(cdr->userfield + len, userfield, sizeof(cdr->userfield) - len);
        }
 
        return 0;
index d80738d66e9ed3928aea4cf6aecb8364ae3e6441..5e2d2e1805e63504f8c19cf63eddb654ca35e92c 100644 (file)
@@ -1705,8 +1705,7 @@ char **ast_cli_completion_matches(const char *text, const char *word)
        if (!(retstr = ast_malloc(max_equal + 1)))
                return NULL;
        
-       strncpy(retstr, match_list[1], max_equal);
-       retstr[max_equal] = '\0';
+       ast_copy_string(retstr, match_list[1], max_equal + 1);
        match_list[0] = retstr;
 
        /* ensure that the array is NULL terminated */
index b9c9115c24b667b803175f8e7f45aa35e309d5f9..ed6fbc683c4a86c4529e881ad44cba4e7a4567bd 100644 (file)
--- a/main/db.c
+++ b/main/db.c
@@ -202,8 +202,7 @@ int ast_db_get(const char *family, const char *keys, char *value, int valuelen)
                if (data.size) {
                        ((char *)data.data)[data.size - 1] = '\0';
                        /* Make sure that we don't write too much to the dst pointer or we don't read too much from the source pointer */
-                       strncpy(value, data.data, (valuelen > data.size) ? data.size : valuelen);
-                       value[valuelen - 1] = '\0';
+                       ast_copy_string(value, data.data, (valuelen > data.size) ? data.size : valuelen);
                } else {
                        ast_log(LOG_NOTICE, "Strange, empty value for /%s/%s\n", family, keys);
                }
index 377ce920879de8882fd7c1eddfbc8316f28279b5..3d282428c2499a1848af84b2fe24b692b581c32d 100644 (file)
@@ -125,7 +125,7 @@ struct ast_frame *ast_read_image(char *filename, const char *preflang, int forma
        AST_LIST_TRAVERSE(&imagers, i, list) {
                if (i->format & format) {
                        char *stringp=NULL;
-                       strncpy(tmp, i->exts, sizeof(tmp)-1);
+                       ast_copy_string(tmp, i->exts, sizeof(tmp));
                        stringp=tmp;
                        e = strsep(&stringp, "|");
                        while(e) {
index ceb049f3a5a18b44de151156683ff80d6999d77a..6e1b4674f6521f7a0c094c73192e11f4feba69de 100644 (file)
@@ -449,7 +449,7 @@ char *ast_uri_encode(const char *string, char *outbuf, int buflen, int doreserve
        char *out = NULL;
        char *buf = NULL;
 
-       strncpy(outbuf, string, buflen);
+       ast_copy_string(outbuf, string, buflen);
 
        /* If there's no characters to convert, just go through and don't do anything */
        while (*ptr) {
index 786f0a2acb93764e724fce7e754b43af3900b12d..14ef9e740f4797e4f87509a0b4151a828812ad37 100644 (file)
@@ -129,7 +129,7 @@ static void dump_string(char *output, int maxlen, void *value, int len)
        maxlen--;
        if (maxlen > len)
                maxlen = len;
-       strncpy(output,value, maxlen);
+       strncpy(output, value, maxlen);
        output[maxlen] = '\0';
 }
 
index b68322726e0e33708078130c6fcdbe2c400259ef..4d32e456e3f628eb9544a8b6c6f981bab11e6085 100644 (file)
@@ -823,13 +823,13 @@ static void check_includes(pval *includes)
 
 static void check_timerange(pval *p)
 {
-       char times[200];
+       char *times;
        char *e;
        int s1, s2;
        int e1, e2;
 
+       times = ast_strdupa(p->u1.str);
 
-       strncpy(times, p->u1.str, sizeof(times));
        /* Star is all times */
        if (ast_strlen_zero(times) || !strcmp(times, "*")) {
                return;
@@ -891,13 +891,13 @@ static char *days[] =
 /*! \brief  get_dow: Get day of week */
 static void check_dow(pval *DOW)
 {
-       char dow[200];
+       char *dow;
        char *c;
        /* The following line is coincidence, really! */
        int s, e;
        
-       strncpy(dow,DOW->u1.str,sizeof(dow));
+       dow = ast_strdupa(DOW->u1.str);
+
        /* Check for all days */
        if (ast_strlen_zero(dow) || !strcmp(dow, "*"))
                return;
@@ -930,12 +930,13 @@ static void check_dow(pval *DOW)
 
 static void check_day(pval *DAY)
 {
-       char day[200];
+       char *day;
        char *c;
        /* The following line is coincidence, really! */
        int s, e;
 
-       strncpy(day,DAY->u1.str,sizeof(day));
+       day = ast_strdupa(DAY->u1.str);
+
        /* Check for all days */
        if (ast_strlen_zero(day) || !strcmp(day, "*")) {
                return;
@@ -992,12 +993,13 @@ static char *months[] =
 
 static void check_month(pval *MON)
 {
-       char mon[200];
+       char *mon;
        char *c;
        /* The following line is coincidence, really! */
        int s, e;
 
-       strncpy(mon,MON->u1.str,sizeof(mon));
+       mon = ast_strdupa(MON->u1.str);
+
        /* Check for all days */
        if (ast_strlen_zero(mon) || !strcmp(mon, "*")) 
                return ;
@@ -1876,14 +1878,14 @@ int is_empty(char *arg)
 int option_matches_j( struct argdesc *should, pval *is, struct argapp *app)
 {
        struct argchoice *ac;
-       char opcop[400],*q,*p;
+       char *opcop,*q,*p;
        
        switch (should->dtype) {
        case ARGD_OPTIONSET:
                if ( strstr(is->u1.str,"${") )
                        return 0;  /* no checking anything if there's a var reference in there! */
                        
-               strncpy(opcop,is->u1.str,sizeof(opcop));
+               opcop = ast_strdupa(is->u1.str);
 
                for (q=opcop;*q;q++) { /* erase the innards of X(innard) type arguments, so we don't get confused later */
                        if ( *q == '(' ) {
@@ -1938,7 +1940,7 @@ int option_matches_j( struct argdesc *should, pval *is, struct argapp *app)
 int option_matches( struct argdesc *should, pval *is, struct argapp *app)
 {
        struct argchoice *ac;
-       char opcop[400];
+       char *opcop;
        
        switch (should->dtype) {
        case ARGD_STRING:
@@ -1973,7 +1975,7 @@ int option_matches( struct argdesc *should, pval *is, struct argapp *app)
                break;
                
        case ARGD_OPTIONSET:
-               strncpy(opcop,is->u1.str,sizeof(opcop));
+               opcop = ast_strdupa(is->u1.str);
                
                for (ac=app->opts; ac; ac=ac->next) {
                        if (strlen(ac->name)>1  && strchr(ac->name,'(') == 0 && strcmp(ac->name,is->u1.str) == 0) /* multichar option, no parens, and a match? */
@@ -2065,7 +2067,7 @@ void check_switch_expr(pval *item, struct argapp *apps)
 {
 #ifdef AAL_ARGCHECK
        /* get and clean the variable name */
-       char buff1[1024],*p;
+       char *buff1, *p;
        struct argapp *a,*a2;
        struct appsetvar *v,*v2;
        struct argchoice *c;
@@ -2075,7 +2077,8 @@ void check_switch_expr(pval *item, struct argapp *apps)
        while (p && *p && (*p == ' ' || *p == '\t' || *p == '$' || *p == '{' ) )
                p++;
        
-       strncpy(buff1,p,sizeof(buff1));
+       buff1 = ast_strdupa(p);
+
        while (strlen(buff1) > 0 && ( buff1[strlen(buff1)-1] == '}' || buff1[strlen(buff1)-1] == ' ' || buff1[strlen(buff1)-1] == '\t'))
                buff1[strlen(buff1)-1] = 0;
        /* buff1 now contains the variable name */
index 31abe065f4a0eb2332355eb8924788b0b1ce874d..9ee770c99acc2960d131e5ad40233d8d5551f5d4 100644 (file)
@@ -97,7 +97,7 @@ static struct ast_variable *realtime_switch_common(const char *table, const char
        case MODE_MATCH:
        default:
                ematch = "exten";
-               strncpy(rexten, exten, sizeof(rexten) - 1);
+               ast_copy_string(rexten, exten, sizeof(rexten));
        }
        var = ast_load_realtime(table, ematch, rexten, "context", context, "priority", pri, NULL);
        if (!var) {
@@ -183,7 +183,7 @@ static int realtime_exec(struct ast_channel *chan, const char *context, const ch
 
                for (v = var; v ; v = v->next) {
                        if (!strcasecmp(v->name, "app"))
-                               strncpy(app, v->value, sizeof(app) -1 );
+                               ast_copy_string(app, v->value, sizeof(app));
                        else if (!strcasecmp(v->name, "appdata"))
                                tmp = ast_strdupa(v->value);
                }
index ec008280bd6070b8de84eaa1b730c08d46508971..d9b0eac6a48d503111872d9754bd2e59d1d28b90 100644 (file)
@@ -166,11 +166,11 @@ static int apply_outgoing(struct outgoing *o, char *fn, FILE *f)
                                printf("'%s' is '%s' at line %d\n", buf, c, lineno);
 #endif
                                if (!strcasecmp(buf, "channel")) {
-                                       strncpy(o->tech, c, sizeof(o->tech) - 1);
+                                       ast_copy_string(o->tech, c, sizeof(o->tech));
                                        if ((c2 = strchr(o->tech, '/'))) {
                                                *c2 = '\0';
                                                c2++;
-                                               strncpy(o->dest, c2, sizeof(o->dest) - 1);
+                                               ast_copy_string(o->dest, c2, sizeof(o->dest));
                                        } else {
                                                ast_log(LOG_NOTICE, "Channel should be in form Tech/Dest at line %d of %s\n", lineno, fn);
                                                o->tech[0] = '\0';
@@ -178,18 +178,18 @@ static int apply_outgoing(struct outgoing *o, char *fn, FILE *f)
                                } else if (!strcasecmp(buf, "callerid")) {
                                        ast_callerid_split(c, o->cid_name, sizeof(o->cid_name), o->cid_num, sizeof(o->cid_num));
                                } else if (!strcasecmp(buf, "application")) {
-                                       strncpy(o->app, c, sizeof(o->app) - 1);
+                                       ast_copy_string(o->app, c, sizeof(o->app));
                                } else if (!strcasecmp(buf, "data")) {
-                                       strncpy(o->data, c, sizeof(o->data) - 1);
+                                       ast_copy_string(o->data, c, sizeof(o->data));
                                } else if (!strcasecmp(buf, "maxretries")) {
                                        if (sscanf(c, "%d", &o->maxretries) != 1) {
                                                ast_log(LOG_WARNING, "Invalid max retries at line %d of %s\n", lineno, fn);
                                                o->maxretries = 0;
                                        }
                                } else if (!strcasecmp(buf, "context")) {
-                                       strncpy(o->context, c, sizeof(o->context) - 1);
+                                       ast_copy_string(o->context, c, sizeof(o->context));
                                } else if (!strcasecmp(buf, "extension")) {
-                                       strncpy(o->exten, c, sizeof(o->exten) - 1);
+                                       ast_copy_string(o->exten, c, sizeof(o->exten));
                                } else if (!strcasecmp(buf, "priority")) {
                                        if ((sscanf(c, "%d", &o->priority) != 1) || (o->priority < 1)) {
                                                ast_log(LOG_WARNING, "Invalid priority at line %d of %s\n", lineno, fn);
@@ -240,7 +240,7 @@ static int apply_outgoing(struct outgoing *o, char *fn, FILE *f)
                                ast_log(LOG_NOTICE, "Syntax error at line %d of %s\n", lineno, fn);
                }
        }
-       strncpy(o->fn, fn, sizeof(o->fn) - 1);
+       ast_copy_string(o->fn, fn, sizeof(o->fn));
        if (ast_strlen_zero(o->tech) || ast_strlen_zero(o->dest) || (ast_strlen_zero(o->app) && ast_strlen_zero(o->exten))) {
                ast_log(LOG_WARNING, "At least one of app or extension must be specified, along with tech and dest in file %s\n", fn);
                return -1;
index cea172767682a398afe3721ce32e1b3d8554b4b6..b8722123757c1d7b5f0d81392f565339ae6c9b8d 100644 (file)
@@ -1092,10 +1092,9 @@ static void adsi_load(void)
                        if (!sname) 
                                sname = name;
                        if (x < ADSI_MAX_SPEED_DIAL) {
-                               /* Up to 20 digits */
                                ast_copy_string(speeddial[x][0], v->name, sizeof(speeddial[x][0]));
-                               strncpy(speeddial[x][1], name, 18);
-                               strncpy(speeddial[x][2], sname, 7);
+                               ast_copy_string(speeddial[x][1], name, 18);
+                               ast_copy_string(speeddial[x][2], sname, 7);
                                x++;
                        }
                }