ast_copy_string conversion
authorKevin P. Fleming <kpfleming@digium.com>
Thu, 7 Jul 2005 23:17:22 +0000 (23:17 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Thu, 7 Jul 2005 23:17:22 +0000 (23:17 +0000)
replace unnecessary length-limited copies with direct copies

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6052 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c

index 64bee7b..2d33d55 100755 (executable)
@@ -350,11 +350,11 @@ static void populate_defaults(struct ast_vm_user *vmu)
        if (saydurationminfo>0)
                vmu->saydurationm = saydurationminfo;
        if (callcontext)
-               strncpy(vmu->callback, callcontext, sizeof(vmu->callback) -1);
+               ast_copy_string(vmu->callback, callcontext, sizeof(vmu->callback));
        if (dialcontext)
-               strncpy(vmu->dialout, dialcontext, sizeof(vmu->dialout) -1);
+               ast_copy_string(vmu->dialout, dialcontext, sizeof(vmu->dialout));
        if (exitcontext)
-               strncpy(vmu->exit, exitcontext, sizeof(vmu->exit) -1);
+               ast_copy_string(vmu->exit, exitcontext, sizeof(vmu->exit));
 }
 
 static void apply_option(struct ast_vm_user *vmu, const char *var, const char *value)
@@ -363,11 +363,11 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
        if (!strcasecmp(var, "attach")) {
                ast_set2_flag(vmu, ast_true(value), VM_ATTACH); 
        } else if (!strcasecmp(var, "serveremail")) {
-               strncpy(vmu->serveremail, value, sizeof(vmu->serveremail) - 1);
+               ast_copy_string(vmu->serveremail, value, sizeof(vmu->serveremail));
        } else if (!strcasecmp(var, "language")) {
-               strncpy(vmu->language, value, sizeof(vmu->language) - 1);
+               ast_copy_string(vmu->language, value, sizeof(vmu->language));
        } else if (!strcasecmp(var, "tz")) {
-               strncpy(vmu->zonetag, value, sizeof(vmu->zonetag) - 1);
+               ast_copy_string(vmu->zonetag, value, sizeof(vmu->zonetag));
        } else if (!strcasecmp(var, "delete")) {
                ast_set2_flag(vmu, ast_true(value), VM_DELETE); 
        } else if (!strcasecmp(var, "saycid")){
@@ -393,11 +393,11 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
        } else if (!strcasecmp(var, "forcegreetings")){
                ast_set2_flag(vmu, ast_true(value), VM_FORCEGREET);     
        } else if (!strcasecmp(var, "callback")) {
-               strncpy(vmu->callback, value, sizeof(vmu->callback) -1);
+               ast_copy_string(vmu->callback, value, sizeof(vmu->callback));
        } else if (!strcasecmp(var, "dialout")) {
-               strncpy(vmu->dialout, value, sizeof(vmu->dialout) -1);
+               ast_copy_string(vmu->dialout, value, sizeof(vmu->dialout));
        } else if (!strcasecmp(var, "exitcontext")) {
-               strncpy(vmu->exit, value, sizeof(vmu->exit) -1);
+               ast_copy_string(vmu->exit, value, sizeof(vmu->exit));
        } else if (!strcasecmp(var, "options")) {
                apply_options(vmu, value);
        }
@@ -409,7 +409,7 @@ static int change_password_realtime(struct ast_vm_user *vmu, const char *passwor
        if (!ast_strlen_zero(vmu->uniqueid)) {
                res = ast_update_realtime("voicemail", "uniqueid", vmu->uniqueid, "password", password, NULL);
                if (!res)
-                       strncpy(vmu->password, password, sizeof(vmu->password) - 1);
+                       ast_copy_string(vmu->password, password, sizeof(vmu->password));
                return res;
        }
        return -1;
@@ -444,11 +444,11 @@ static struct ast_vm_user *find_user_realtime(struct ast_vm_user *ivm, const cha
                if (!ivm)
                        ast_set_flag(retval, VM_ALLOCED);       
                if (mailbox) 
-                       strncpy(retval->mailbox, mailbox, sizeof(retval->mailbox) - 1);
+                       ast_copy_string(retval->mailbox, mailbox, sizeof(retval->mailbox));
                if (context) 
-                       strncpy(retval->context, context, sizeof(retval->context) - 1);
+                       ast_copy_string(retval->context, context, sizeof(retval->context));
                else
-                       strncpy(retval->context, "default", sizeof(retval->context) - 1);
+                       strcpy(retval->context, "default");
                populate_defaults(retval);
                var = ast_load_realtime("voicemail", "mailbox", mailbox, "context", retval->context, NULL);
                if (var) {
@@ -456,15 +456,15 @@ static struct ast_vm_user *find_user_realtime(struct ast_vm_user *ivm, const cha
                        while(tmp) {
                                printf("%s => %s\n", tmp->name, tmp->value);
                                if (!strcasecmp(tmp->name, "password")) {
-                                       strncpy(retval->password, tmp->value, sizeof(retval->password) - 1);
+                                       ast_copy_string(retval->password, tmp->value, sizeof(retval->password));
                                } else if (!strcasecmp(tmp->name, "uniqueid")) {
-                                       strncpy(retval->uniqueid, tmp->value, sizeof(retval->uniqueid) - 1);
+                                       ast_copy_string(retval->uniqueid, tmp->value, sizeof(retval->uniqueid));
                                } else if (!strcasecmp(tmp->name, "pager")) {
-                                       strncpy(retval->pager, tmp->value, sizeof(retval->pager) - 1);
+                                       ast_copy_string(retval->pager, tmp->value, sizeof(retval->pager));
                                } else if (!strcasecmp(tmp->name, "email")) {
-                                       strncpy(retval->email, tmp->value, sizeof(retval->email) - 1);
+                                       ast_copy_string(retval->email, tmp->value, sizeof(retval->email));
                                } else if (!strcasecmp(tmp->name, "fullname")) {
-                                       strncpy(retval->fullname, tmp->value, sizeof(retval->fullname) - 1);
+                                       ast_copy_string(retval->fullname, tmp->value, sizeof(retval->fullname));
                                } else
                                        apply_option(retval, tmp->name, tmp->value);
                                tmp = tmp->next;
@@ -521,7 +521,7 @@ static int reset_user_pw(const char *context, const char *mailbox, const char *n
                cur=cur->next;
        }
        if (cur) {
-               strncpy(cur->password, newpass, sizeof(cur->password) - 1);
+               ast_copy_string(cur->password, newpass, sizeof(cur->password));
                res = 0;
        }
        ast_mutex_unlock(&vmlock);
@@ -586,7 +586,7 @@ static void vm_change_password(struct ast_vm_user *vmu, const char *newpassword)
                        /* check for '[' (opening of context name ) */
                        tempcontext = strchr(user, '[');
                        if (tempcontext) {
-                               strncpy(currcontext, tempcontext +1, sizeof(currcontext) - 1);
+                               ast_copy_string(currcontext, tempcontext +1, sizeof(currcontext));
                                /* now check for ']' */
                                tempcontext = strchr(currcontext, ']');
                                if (tempcontext) 
@@ -644,7 +644,7 @@ static void vm_change_password(struct ast_vm_user *vmu, const char *newpassword)
        unlink((char *)tmpin);
        rename((char *)tmpout,(char *)tmpin);
        reset_user_pw(vmu->context, vmu->mailbox, newpassword);
-       strncpy(vmu->password, newpassword, sizeof(vmu->password) - 1);
+       ast_copy_string(vmu->password, newpassword, sizeof(vmu->password));
 }
 
 static void vm_change_password_shell(struct ast_vm_user *vmu, char *newpassword)
@@ -694,17 +694,17 @@ static int retrieve_file(char *dir, int msgnum)
        odbc_obj *obj;
        obj = fetch_odbc_obj(odbc_database, 0);
        if (obj) {
-               strncpy(fmt, vmfmts, sizeof(fmt) - 1);
+               ast_copy_string(fmt, vmfmts, sizeof(fmt));
                c = strchr(fmt, '|');
                if (c)
                        *c = '\0';
                if (!strcasecmp(fmt, "wav49"))
-                       strncpy(fmt, "WAV", sizeof(fmt));
+                       strcpy(fmt, "WAV");
                snprintf(msgnums, sizeof(msgnums),"%d", msgnum);
                if (msgnum > -1)
                        make_file(fn, sizeof(fn), dir, msgnum);
                else
-                       strncpy(fn, dir, sizeof(fn) - 1);
+                       ast_copy_string(fn, dir, sizeof(fn));
                snprintf(full_fn, sizeof(full_fn), "%s.txt", fn);
                f = fopen(full_fn, "w+");
                snprintf(full_fn, sizeof(full_fn), "%s.%s", fn, fmt);
@@ -823,7 +823,7 @@ static int remove_file(char *dir, int msgnum)
                snprintf(msgnums, sizeof(msgnums), "%d", msgnum);
                make_file(fn, sizeof(fn), dir, msgnum);
        } else
-               strncpy(fn, dir, sizeof(fn) - 1);
+               ast_copy_string(fn, dir, sizeof(fn));
        ast_filedelete(fn, NULL);       
        snprintf(full_fn, sizeof(full_fn), "%s.txt", fn);
        unlink(full_fn);
@@ -1073,17 +1073,17 @@ static int store_file(char *dir, int msgnum)
        delete_file(dir, msgnum);
        obj = fetch_odbc_obj(odbc_database, 0);
        if (obj) {
-               strncpy(fmt, vmfmts, sizeof(fmt) - 1);
+               ast_copy_string(fmt, vmfmts, sizeof(fmt));
                c = strchr(fmt, '|');
                if (c)
                        *c = '\0';
                if (!strcasecmp(fmt, "wav49"))
-                       strncpy(fmt, "WAV", sizeof(fmt));
+                       strcpy(fmt, "WAV");
                snprintf(msgnums, sizeof(msgnums),"%d", msgnum);
                if (msgnum > -1)
                        make_file(fn, sizeof(fn), dir, msgnum);
                else
-                       strncpy(fn, dir, sizeof(fn) - 1);
+                       ast_copy_string(fn, dir, sizeof(fn));
                snprintf(full_fn, sizeof(full_fn), "%s.txt", fn);
                cfg = ast_config_load(full_fn);
                snprintf(full_fn, sizeof(full_fn), "%s.%s", fn, fmt);
@@ -1513,7 +1513,7 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
        if (p) {
                gethostname(host, sizeof(host)-1);
                if (strchr(srcemail, '@'))
-                       strncpy(who, srcemail, sizeof(who)-1);
+                       ast_copy_string(who, srcemail, sizeof(who));
                else {
                        snprintf(who, sizeof(who), "%s@%s", srcemail, host);
                }
@@ -1661,7 +1661,7 @@ static int sendpage(char *srcemail, char *pager, int msgnum, char *context, char
        if (p) {
                gethostname(host, sizeof(host)-1);
                if (strchr(srcemail, '@'))
-                       strncpy(who, srcemail, sizeof(who)-1);
+                       ast_copy_string(who, srcemail, sizeof(who));
                else {
                        snprintf(who, sizeof(who), "%s@%s", srcemail, host);
                }
@@ -1825,7 +1825,7 @@ static int has_voicemail(const char *mailbox, const char *folder)
        if (ast_strlen_zero(mailbox))
                return 0;
        if (strchr(mailbox, ',')) {
-               strncpy(tmp, mailbox, sizeof(tmp) - 1);
+               ast_copy_string(tmp, mailbox, sizeof(tmp));
                mb = tmp;
                ret = 0;
                while((cur = strsep(&mb, ","))) {
@@ -1836,7 +1836,7 @@ static int has_voicemail(const char *mailbox, const char *folder)
                }
                return 0;
        }
-       strncpy(tmp, mailbox, sizeof(tmp) - 1);
+       ast_copy_string(tmp, mailbox, sizeof(tmp));
        context = strchr(tmp, '@');
        if (context) {
                *context = '\0';
@@ -1875,7 +1875,7 @@ static int messagecount(const char *mailbox, int *newmsgs, int *oldmsgs)
                return 0;
        if (strchr(mailbox, ',')) {
                int tmpnew, tmpold;
-               strncpy(tmp, mailbox, sizeof(tmp) - 1);
+               ast_copy_string(tmp, mailbox, sizeof(tmp));
                mb = tmp;
                ret = 0;
                while((cur = strsep(&mb, ", "))) {
@@ -1892,7 +1892,7 @@ static int messagecount(const char *mailbox, int *newmsgs, int *oldmsgs)
                }
                return 0;
        }
-       strncpy(tmp, mailbox, sizeof(tmp) - 1);
+       ast_copy_string(tmp, mailbox, sizeof(tmp));
        context = strchr(tmp, '@');
        if (context) {
                *context = '\0';
@@ -2010,7 +2010,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
        struct ast_vm_user svm;
        char *category = NULL;
 
-       strncpy(tmp, ext, sizeof(tmp) - 1);
+       ast_copy_string(tmp, ext, sizeof(tmp));
        ext = tmp;
        context = strchr(tmp, '@');
        if (context) {
@@ -2033,7 +2033,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
                if (strcmp(vmu->context, "default"))
                        snprintf(ext_context, sizeof(ext_context), "%s@%s", ext, vmu->context);
                else
-                       strncpy(ext_context, vmu->context, sizeof(ext_context) - 1);            
+                       ast_copy_string(ext_context, vmu->context, sizeof(ext_context));
                if (busy)
                        snprintf(prefile, sizeof(prefile), "%s%s/%s/busy", VM_SPOOL_DIR, vmu->context, ext);
                else if (unavail)
@@ -2041,7 +2041,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
                snprintf(tempfile, sizeof(tempfile), "%s%s/%s/temp", VM_SPOOL_DIR, vmu->context, ext);
                RETRIEVE(tempfile, -1);
                if (ast_fileexists(tempfile, NULL, NULL) > 0)
-                       strncpy(prefile, tempfile, sizeof(prefile) - 1);
+                       ast_copy_string(prefile, tempfile, sizeof(prefile));
                DISPOSE(tempfile, -1);
                make_dir(dir, sizeof(dir), vmu->context, "", "");
                /* It's easier just to try to make it than to check for its existence */
@@ -2113,11 +2113,12 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
                /* Check for a '*' here in case the caller wants to escape from voicemail to something
                other than the operator -- an automated attendant or mailbox login for example */
                if (res == '*') {
-                       strncpy(chan->exten, "a", sizeof(chan->exten) - 1);
+                       chan->exten[0] = 'a';
+                       chan->exten[1] = '\0';
                        if (!ast_strlen_zero(vmu->exit)) {
-                               strncpy(chan->context, vmu->exit, sizeof(chan->context) - 1);
+                               ast_copy_string(chan->context, vmu->exit, sizeof(chan->context));
                        } else if (ausemacro && !ast_strlen_zero(chan->macrocontext)) {
-                               strncpy(chan->context, chan->macrocontext, sizeof(chan->context) - 1);
+                               ast_copy_string(chan->context, chan->macrocontext, sizeof(chan->context));
                        }
                        chan->priority = 0;
                        free_user(vmu);
@@ -2127,11 +2128,12 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
                if (res == '0') {
                        transfer:
                        if (ast_test_flag(vmu, VM_OPERATOR)) {
-                               strncpy(chan->exten, "o", sizeof(chan->exten) - 1);
+                               chan->exten[0] = 'o';
+                               chan->exten[1] = '\0';
                                if (!ast_strlen_zero(vmu->exit)) {
-                                       strncpy(chan->context, vmu->exit, sizeof(chan->context) - 1);
+                                       ast_copy_string(chan->context, vmu->exit, sizeof(chan->context));
                                } else if (ousemacro && !ast_strlen_zero(chan->macrocontext)) {
-                                       strncpy(chan->context, chan->macrocontext, sizeof(chan->context) - 1);
+                                       ast_copy_string(chan->context, chan->macrocontext, sizeof(chan->context));
                                }
                                ast_play_and_wait(chan, "transfer");
                                chan->priority = 0;
@@ -2147,7 +2149,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
                        return -1;
                }
                /* The meat of recording the message...  All the announcements and beeps have been played*/
-               strncpy(fmt, vmfmts, sizeof(fmt) - 1);
+               ast_copy_string(fmt, vmfmts, sizeof(fmt));
                if (!ast_strlen_zero(fmt)) {
                        msgnum = 0;
                        if (res >= 0) {
@@ -2584,9 +2586,9 @@ static void adsi_message(struct ast_channel *chan, struct vm_state *vms)
                                val = strsep(&stringp, "=");
                                if (val && !ast_strlen_zero(val)) {
                                        if (!strcmp(buf, "callerid"))
-                                               strncpy(cid, val, sizeof(cid) - 1);
+                                               ast_copy_string(cid, val, sizeof(cid));
                                        if (!strcmp(buf, "origdate"))
-                                               strncpy(datetime, val, sizeof(datetime) - 1);
+                                               ast_copy_string(datetime, val, sizeof(datetime));
                                }
                        }
                }
@@ -2712,7 +2714,7 @@ static void adsi_status(struct ast_channel *chan, struct vm_state *vms)
                snprintf(buf1, sizeof(buf1), "You have %d old", vms->oldmessages);
                snprintf(buf2, sizeof(buf2), "%s.", oldm);
        } else {
-               strncpy(buf1, "You have no messages.", sizeof(buf1) - 1);
+               strcpy(buf1, "You have no messages.");
                buf2[0] = ' ';
                buf2[1] = '\0';
        }
@@ -2763,7 +2765,7 @@ static void adsi_status2(struct ast_channel *chan, struct vm_state *vms)
        if (vms->lastmsg + 1)
                snprintf(buf2, sizeof(buf2), "%d %s.", vms->lastmsg + 1, mess);
        else
-               strncpy(buf2, "no messages.", sizeof(buf2) - 1);
+               strcpy(buf2, "no messages.");
        bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 1, ADSI_JUST_LEFT, 0, buf1, "");
        bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 2, ADSI_JUST_LEFT, 0, buf2, "");
        bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 3, ADSI_JUST_LEFT, 0, "", "");
@@ -3020,7 +3022,7 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
                                /* call the the Directory, changes the channel */
                                res = pbx_exec(chan, app, ((context)?context:chan->context), 1);
                                
-                               strncpy(username, chan->exten, sizeof(username)-1);
+                               ast_copy_string(username, chan->exten, sizeof(username));
                                
                                /* restore the old context, exten, and priority */
                                memcpy(chan->context, old_context, sizeof(chan->context));
@@ -3091,7 +3093,7 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
                                ast_safe_system(sys);
                
                                todircount = count_messages(todir);
-                               strncpy(tmp, fmt, sizeof(tmp) - 1);
+                               ast_copy_string(tmp, fmt, sizeof(tmp));
                                stringp = tmp;
                                while ((s = strsep(&stringp, "|"))) {
                                        /* XXX This is a hack -- we should use build_filename or similar XXX */
@@ -3415,7 +3417,7 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc
 
 static void open_mailbox(struct vm_state *vms, struct ast_vm_user *vmu,int box)
 {
-       strncpy(vms->curbox, mbox(box), sizeof(vms->curbox) - 1);
+       ast_copy_string(vms->curbox, mbox(box), sizeof(vms->curbox));
        make_dir(vms->curdir, sizeof(vms->curdir), vmu->context, vms->username, vms->curbox);
        vms->lastmsg = count_messages(vms->curdir) - 1;
 
@@ -4521,7 +4523,7 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
                }
                if (ast_strlen_zero(mailbox)) {
                        if (chan->cid.cid_num) {
-                               strncpy(mailbox, chan->cid.cid_num, mailbox_size);
+                               ast_copy_string(mailbox, chan->cid.cid_num, mailbox_size);
                        } else {
                                if (option_verbose > 2)
                                        ast_verbose(VERBOSE_PREFIX_3 "Username not entered\n"); 
@@ -4533,9 +4535,9 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
 
                if (prefix && !ast_strlen_zero(prefix)) {
                        char fullusername[80] = "";
-                       strncpy(fullusername, prefix, sizeof(fullusername) - 1);
+                       ast_copy_string(fullusername, prefix, sizeof(fullusername));
                        strncat(fullusername, mailbox, sizeof(fullusername) - 1 - strlen(fullusername));
-                       strncpy(mailbox, fullusername, mailbox_size - 1);
+                       ast_copy_string(mailbox, fullusername, mailbox_size);
                }
 
                vmu = find_user(&vmus, context, mailbox);
@@ -4563,7 +4565,7 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
                        if (option_verbose > 2)
                                ast_verbose( VERBOSE_PREFIX_3 "Incorrect password '%s' for user '%s' (context = %s)\n", password, mailbox, context ? context : "<any>");
                        if (prefix && !ast_strlen_zero(prefix))
-                               strncpy(mailbox, "", mailbox_size -1);
+                               mailbox[0] = '\0';
                }
                logretries++;
                if (!valid) {
@@ -4621,12 +4623,12 @@ static int vm_execmain(struct ast_channel *chan, void *data)
        LOCAL_USER_ADD(u);
        memset(&vms, 0, sizeof(vms));
        memset(&vmus, 0, sizeof(vmus));
-       strncpy(fmtc, vmfmts, sizeof(fmtc) - 1);
+       ast_copy_string(fmtc, vmfmts, sizeof(fmtc));
        if (chan->_state != AST_STATE_UP)
                ast_answer(chan);
 
        if (data && !ast_strlen_zero(data)) {
-               strncpy(tmp, data, sizeof(tmp) - 1);
+               ast_copy_string(tmp, data, sizeof(tmp));
                ext = tmp;
 
                /* option 's': don't request a password */
@@ -4664,9 +4666,9 @@ static int vm_execmain(struct ast_channel *chan, void *data)
                }
 
                if (prefix)
-                       strncpy(prefixstr, ext, sizeof(prefixstr) - 1);
+                       ast_copy_string(prefixstr, ext, sizeof(prefixstr));
                else
-                       strncpy(vms.username, ext, sizeof(vms.username) - 1);
+                       ast_copy_string(vms.username, ext, sizeof(vms.username));
                if (!ast_strlen_zero(vms.username) && (vmu = find_user(&vmus, context ,vms.username)))
                        skipuser++;
                else
@@ -4692,7 +4694,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
        if (valid) {
                /* Set language from config to override channel language */
                if (vmu->language && !ast_strlen_zero(vmu->language))
-                       strncpy(chan->language, vmu->language, sizeof(chan->language)-1);
+                       ast_copy_string(chan->language, vmu->language, sizeof(chan->language));
                snprintf(vms.curdir, sizeof(vms.curdir), "%s/%s", VM_SPOOL_DIR, vmu->context);
                mkdir(vms.curdir, 0700);
                snprintf(vms.curdir, sizeof(vms.curdir), "%s/%s/%s", VM_SPOOL_DIR, vmu->context, vms.username);
@@ -5003,7 +5005,7 @@ static int vm_exec(struct ast_channel *chan, void *data)
        if (chan->_state != AST_STATE_UP)
                ast_answer(chan);
        if (data && !ast_strlen_zero(data))
-               strncpy(tmp, data, sizeof(tmp) - 1);
+               ast_copy_string(tmp, data, sizeof(tmp));
        else {
                res = ast_app_getdata(chan, "vm-whichbox", tmp, sizeof(tmp) - 1, 0);
                if (res < 0)
@@ -5058,22 +5060,23 @@ static int append_mailbox(char *context, char *mbox, char *data)
        char *stringp;
        char *s;
        struct ast_vm_user *vmu;
-       strncpy(tmp, data, sizeof(tmp) - 1);
+
+       ast_copy_string(tmp, data, sizeof(tmp));
        vmu = malloc(sizeof(struct ast_vm_user));
        if (vmu) {
                memset(vmu, 0, sizeof(struct ast_vm_user));
-               strncpy(vmu->context, context, sizeof(vmu->context) - 1);
-               strncpy(vmu->mailbox, mbox, sizeof(vmu->mailbox) - 1);
+               ast_copy_string(vmu->context, context, sizeof(vmu->context));
+               ast_copy_string(vmu->mailbox, mbox, sizeof(vmu->mailbox));
                populate_defaults(vmu);
                stringp = tmp;
                if ((s = strsep(&stringp, ","))) 
-                       strncpy(vmu->password, s, sizeof(vmu->password) - 1);
+                       ast_copy_string(vmu->password, s, sizeof(vmu->password));
                if (stringp && (s = strsep(&stringp, ","))) 
-                       strncpy(vmu->fullname, s, sizeof(vmu->fullname) - 1);
+                       ast_copy_string(vmu->fullname, s, sizeof(vmu->fullname));
                if (stringp && (s = strsep(&stringp, ","))) 
-                       strncpy(vmu->email, s, sizeof(vmu->email) - 1);
+                       ast_copy_string(vmu->email, s, sizeof(vmu->email));
                if (stringp && (s = strsep(&stringp, ","))) 
-                       strncpy(vmu->pager, s, sizeof(vmu->pager) - 1);
+                       ast_copy_string(vmu->pager, s, sizeof(vmu->pager));
                if (stringp && (s = strsep(&stringp, ","))) 
                        apply_options(vmu, s);
                vmu->next = NULL;
@@ -5336,15 +5339,15 @@ static int load_config(void)
                ast_set2_flag((&globalflags), ast_true(astattach), VM_ATTACH);  
 
 #ifdef USE_ODBC_STORAGE
-               strncpy(odbc_database, "asterisk", sizeof(odbc_database) - 1);
+               strcpy(odbc_database, "asterisk");
                if ((thresholdstr = ast_variable_retrieve(cfg, "general", "odbcstorage"))) {
-                       strncpy(odbc_database, thresholdstr, sizeof(odbc_database) - 1);
+                       ast_copy_string(odbc_database, thresholdstr, sizeof(odbc_database));
                }
 #endif         
                /* Mail command */
-               strncpy(mailcmd, SENDMAIL, sizeof(mailcmd) - 1); /* Default */
+               strcpy(mailcmd, SENDMAIL);
                if ((astmailcmd = ast_variable_retrieve(cfg, "general", "mailcmd")))
-                       strncpy(mailcmd, astmailcmd, sizeof(mailcmd) - 1); /* User setting */
+                       ast_copy_string(mailcmd, astmailcmd, sizeof(mailcmd)); /* User setting */
 
                maxsilence = 0;
                if ((silencestr = ast_variable_retrieve(cfg, "general", "maxsilence"))) {
@@ -5355,18 +5358,18 @@ static int load_config(void)
 
                /* Load date format config for voicemail mail */
                if ((emaildateformatstr = ast_variable_retrieve(cfg, "general", "emaildateformat"))) {
-                       strncpy(emaildateformat, emaildateformatstr, sizeof(emaildateformat) - 1);
+                       ast_copy_string(emaildateformat, emaildateformatstr, sizeof(emaildateformat));
                }
 
                /* External password changing command */
                if ((extpc = ast_variable_retrieve(cfg, "general", "externpass"))) {
-                       strncpy(ext_pass_cmd,extpc,sizeof(ext_pass_cmd) - 1);
+                       ast_copy_string(ext_pass_cmd,extpc,sizeof(ext_pass_cmd));
                }
 
                /* External voicemail notify application */
                
                if ((notifystr = ast_variable_retrieve(cfg, "general", "externnotify"))) {
-                       strncpy(externnotify, notifystr, sizeof(externnotify) - 1);
+                       ast_copy_string(externnotify, notifystr, sizeof(externnotify));
                        ast_log(LOG_DEBUG, "found externnotify: %s\n", externnotify);
                } else {
                        externnotify[0] = '\0';
@@ -5379,7 +5382,7 @@ static int load_config(void)
                
                if (!(astemail = ast_variable_retrieve(cfg, "general", "serveremail"))) 
                        astemail = ASTERISK_USERNAME;
-               strncpy(serveremail, astemail, sizeof(serveremail) - 1);
+               ast_copy_string(serveremail, astemail, sizeof(serveremail));
                
                vmmaxmessage = 0;
                if ((s = ast_variable_retrieve(cfg, "general", "maxmessage"))) {
@@ -5403,7 +5406,7 @@ static int load_config(void)
                fmt = ast_variable_retrieve(cfg, "general", "format");
                if (!fmt)
                        fmt = "wav";    
-               strncpy(vmfmts, fmt, sizeof(vmfmts) - 1);
+               ast_copy_string(vmfmts, fmt, sizeof(vmfmts));
 
                skipms = 3000;
                if ((s = ast_variable_retrieve(cfg, "general", "maxgreet"))) {
@@ -5449,7 +5452,7 @@ static int load_config(void)
                                        q = strsep(&stringp,",");
                                        while ((*q == ' ')||(*q == '\t')) /* Eat white space between contexts */
                                                q++;
-                                       strncpy(cidinternalcontexts[x], q, sizeof(cidinternalcontexts[x]) - 1);
+                                       ast_copy_string(cidinternalcontexts[x], q, sizeof(cidinternalcontexts[x]));
                                        ast_log(LOG_DEBUG,"VM_CID Internal context %d: %s\n", x, cidinternalcontexts[x]);
                                } else {
                                        cidinternalcontexts[x][0] = '\0';
@@ -5508,21 +5511,21 @@ static int load_config(void)
                ast_set2_flag((&globalflags), ast_true(astskipcmd), VM_SKIPAFTERCMD);
 
                if ((dialoutcxt = ast_variable_retrieve(cfg, "general", "dialout"))) {
-                       strncpy(dialcontext, dialoutcxt, sizeof(dialcontext) - 1);
+                       ast_copy_string(dialcontext, dialoutcxt, sizeof(dialcontext));
                        ast_log(LOG_DEBUG, "found dialout context: %s\n", dialcontext);
                } else {
                        dialcontext[0] = '\0';  
                }
                
                if ((callbackcxt = ast_variable_retrieve(cfg, "general", "callback"))) {
-                       strncpy(callcontext, callbackcxt, sizeof(callcontext) -1);
+                       ast_copy_string(callcontext, callbackcxt, sizeof(callcontext));
                        ast_log(LOG_DEBUG, "found callback context: %s\n", callcontext);
                } else {
                        callcontext[0] = '\0';
                }
 
                if ((exitcxt = ast_variable_retrieve(cfg, "general", "exitcontext"))) {
-                       strncpy(exitcontext, exitcxt, sizeof(exitcontext) - 1);
+                       ast_copy_string(exitcontext, exitcxt, sizeof(exitcontext));
                        ast_log(LOG_DEBUG, "found operator context: %s\n", exitcontext);
                } else {
                        exitcontext[0] = '\0';
@@ -5553,9 +5556,9 @@ static int load_config(void)
                                                        if (msg_format != NULL) {
                                                                timezone = strsep(&msg_format, "|");
                                                                if (msg_format) {
-                                                                       strncpy(z->name, var->name, sizeof(z->name) - 1);
-                                                                       strncpy(z->timezone, timezone, sizeof(z->timezone) - 1);
-                                                                       strncpy(z->msg_format, msg_format, sizeof(z->msg_format) - 1);
+                                                                       ast_copy_string(z->name, var->name, sizeof(z->name));
+                                                                       ast_copy_string(z->timezone, timezone, sizeof(z->timezone));
+                                                                       ast_copy_string(z->msg_format, msg_format, sizeof(z->msg_format));
                                                                        z->next = NULL;
                                                                        if (zones) {
                                                                                zonesl->next = z;
@@ -5586,7 +5589,7 @@ static int load_config(void)
                memset(fromstring,0,sizeof(fromstring));
                memset(pagerfromstring,0,sizeof(pagerfromstring));
                memset(emailtitle,0,sizeof(emailtitle));
-               strncpy(charset, "ISO-8859-1", sizeof(charset) - 1);
+               strcpy(charset, "ISO-8859-1");
                if (emailbody) {
                        free(emailbody);
                        emailbody = NULL;
@@ -5598,11 +5601,11 @@ static int load_config(void)
                if ((s=ast_variable_retrieve(cfg, "general", "pbxskip")))
                        ast_set2_flag((&globalflags), ast_true(s), VM_PBXSKIP);
                if ((s=ast_variable_retrieve(cfg, "general", "fromstring")))
-                       strncpy(fromstring,s,sizeof(fromstring)-1);
+                       ast_copy_string(fromstring,s,sizeof(fromstring));
                if ((s=ast_variable_retrieve(cfg, "general", "pagerfromstring")))
-                       strncpy(pagerfromstring,s,sizeof(pagerfromstring)-1);   
+                       ast_copy_string(pagerfromstring,s,sizeof(pagerfromstring));
                if ((s=ast_variable_retrieve(cfg, "general", "charset")))
-                       strncpy(charset,s,sizeof(charset)-1);
+                       ast_copy_string(charset,s,sizeof(charset));
                if ((s=ast_variable_retrieve(cfg, "general", "adsifdn"))) {
                        sscanf(s, "%2x%2x%2x%2x", &tmpadsi[0], &tmpadsi[1], &tmpadsi[2], &tmpadsi[3]);
                        for (x=0; x<4; x++) {
@@ -5621,7 +5624,7 @@ static int load_config(void)
                        }
                if ((s=ast_variable_retrieve(cfg, "general", "emailtitle"))) {
                        ast_log(LOG_NOTICE, "Keyword 'emailtitle' is DEPRECATED, please use 'emailsubject' instead.\n");
-                       strncpy(emailtitle,s,sizeof(emailtitle)-1);
+                       ast_copy_string(emailtitle,s,sizeof(emailtitle));
                }
                if ((s=ast_variable_retrieve(cfg, "general", "emailsubject")))
                        emailsubject = strdup(s);
@@ -5749,15 +5752,15 @@ static int dialout(struct ast_channel *chan, struct ast_vm_user *vmu, char *num,
                
        } else {
                ast_verbose( VERBOSE_PREFIX_3 "Destination number is CID number '%s'\n", num);
-               strncpy(destination, num, sizeof(destination) -1);
+               ast_copy_string(destination, num, sizeof(destination));
        }
 
        if (!ast_strlen_zero(destination)) {
                if (destination[strlen(destination) -1 ] == '*')
                        return 0; 
                ast_verbose( VERBOSE_PREFIX_3 "Placing outgoing call to extension '%s' in context '%s' from context '%s'\n", destination, outgoing_context, chan->context);
-               strncpy(chan->exten, destination, sizeof(chan->exten) - 1);
-               strncpy(chan->context, outgoing_context, sizeof(chan->context) - 1);
+               ast_copy_string(chan->exten, destination, sizeof(chan->exten));
+               ast_copy_string(chan->context, outgoing_context, sizeof(chan->context));
                chan->priority = 0;
                return 9;
        }