summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2005-09-01 10:53:33 +0200
committerunknown <msvensson@neptunus.(none)>2005-09-01 10:53:33 +0200
commit772843ba41a7a10aaaed6d37a7544907be38d443 (patch)
treec9c4d317c11fe2b6421a62743b37e517715ad912 /client
parent50cc21ea3e5f4ebcd3f9185c5f64746d5b0b7a98 (diff)
downloadmariadb-git-772843ba41a7a10aaaed6d37a7544907be38d443.tar.gz
Bug #3131 mysqltest fails on $2=$1 assignment in test
client/mysqltest.c: Fix function var_copy to make it possible to assign one variable to another. ex: let $1=$2 mysql-test/r/mysqltest.result: Update test result mysql-test/t/mysqltest.test: Add test cases for variable to variable assignment
Diffstat (limited to 'client')
-rw-r--r--client/mysqltest.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 3b13084081e..6c7d51c393d 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -1147,16 +1147,24 @@ int var_query_set(VAR* v, const char *p, const char** p_end)
return 0;
}
-void var_copy(VAR* dest, VAR* src)
+void var_copy(VAR *dest, VAR *src)
{
- dest->int_val=src->int_val;
- dest->int_dirty=src->int_dirty;
+ dest->int_val= src->int_val;
+ dest->int_dirty= src->int_dirty;
+
+ /* Alloc/realloc data for str_val in dest */
if (dest->alloced_len < src->alloced_len &&
- !(dest->str_val=my_realloc(dest->str_val,src->alloced_len+1,
- MYF(MY_WME))))
+ !(dest->str_val= dest->str_val
+ ? my_realloc(dest->str_val, src->alloced_len, MYF(MY_WME))
+ : my_malloc(src->alloced_len, MYF(MY_WME))))
die("Out of memory");
- dest->str_val_len=src->str_val_len;
- memcpy(dest->str_val,src->str_val,src->str_val_len+1);
+ else
+ dest->alloced_len= src->alloced_len;
+
+ /* Copy str_val data to dest */
+ dest->str_val_len= src->str_val_len;
+ if (src->str_val_len)
+ memcpy(dest->str_val, src->str_val, src->str_val_len);
}
int eval_expr(VAR* v, const char *p, const char** p_end)