mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
Merge mysqldev@production.mysql.com:my/mysql-5.0-release
into mysql.com:/opt/local/work/mysql-5.0-root BitKeeper/etc/ignore: auto-union include/my_sys.h: Auto merged mysql-test/r/information_schema.result: Auto merged mysql-test/t/ctype_ujis.test: Auto merged sql/ha_federated.cc: Auto merged sql/handler.cc: Auto merged sql/item_func.h: Auto merged sql/log.cc: Auto merged sql/sp_head.cc: Auto merged sql/sp_head.h: Auto merged sql/sql_acl.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_lex.h: Auto merged sql/sql_prepare.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_view.cc: Auto merged sql/table.cc: Auto merged
This commit is contained in:
commit
38ebb6c638
58 changed files with 1785 additions and 982 deletions
|
|
@ -221,6 +221,57 @@ gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Allocate many pointers at the same time.
|
||||
|
||||
DESCRIPTION
|
||||
ptr1, ptr2, etc all point into big allocated memory area.
|
||||
|
||||
SYNOPSIS
|
||||
multi_alloc_root()
|
||||
root Memory root
|
||||
ptr1, length1 Multiple arguments terminated by a NULL pointer
|
||||
ptr2, length2 ...
|
||||
...
|
||||
NULL
|
||||
|
||||
RETURN VALUE
|
||||
A pointer to the beginning of the allocated memory block
|
||||
in case of success or NULL if out of memory.
|
||||
*/
|
||||
|
||||
gptr multi_alloc_root(MEM_ROOT *root, ...)
|
||||
{
|
||||
va_list args;
|
||||
char **ptr, *start, *res;
|
||||
uint tot_length, length;
|
||||
DBUG_ENTER("multi_alloc_root");
|
||||
|
||||
va_start(args, root);
|
||||
tot_length= 0;
|
||||
while ((ptr= va_arg(args, char **)))
|
||||
{
|
||||
length= va_arg(args, uint);
|
||||
tot_length+= ALIGN_SIZE(length);
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
if (!(start= (char*) alloc_root(root, tot_length)))
|
||||
DBUG_RETURN(0); /* purecov: inspected */
|
||||
|
||||
va_start(args, root);
|
||||
res= start;
|
||||
while ((ptr= va_arg(args, char **)))
|
||||
{
|
||||
*ptr= res;
|
||||
length= va_arg(args, uint);
|
||||
res+= ALIGN_SIZE(length);
|
||||
}
|
||||
va_end(args);
|
||||
DBUG_RETURN((gptr) start);
|
||||
}
|
||||
|
||||
#define TRASH_MEM(X) TRASH(((char*)(X) + ((X)->size-(X)->left)), (X)->left)
|
||||
|
||||
/* Mark all data in blocks free for reusage */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue