~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/thr_malloc.cc

  • Committer: Brian Aker
  • Date: 2009-07-11 19:23:04 UTC
  • mfrom: (1089.1.14 merge)
  • Revision ID: brian@gaz-20090711192304-ootijyl5yf9jq9kd
Merge Brian

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
/* Mallocs for used in threads */
18
18
 
19
19
#include <drizzled/server_includes.h>
20
 
#include <drizzled/drizzled_error_messages.h>
 
20
#include <drizzled/current_session.h>
 
21
#include <drizzled/error.h>
21
22
 
22
23
extern "C" {
23
 
  void sql_alloc_error_handler(void)
24
 
  {
25
 
    sql_print_error(ER(ER_OUT_OF_RESOURCES));
26
 
  }
27
 
}
28
 
 
29
 
void init_sql_alloc(MEM_ROOT *mem_root, uint block_size, uint pre_alloc)
 
24
  void sql_alloc_error_handler(void);
 
25
}
 
26
 
 
27
void sql_alloc_error_handler(void)
 
28
{
 
29
  errmsg_printf(ERRMSG_LVL_ERROR, "%s",ER(ER_OUT_OF_RESOURCES));
 
30
}
 
31
 
 
32
void init_sql_alloc(MEM_ROOT *mem_root, size_t block_size, size_t pre_alloc)
30
33
{
31
34
  init_alloc_root(mem_root, block_size, pre_alloc);
32
 
  mem_root->error_handler=sql_alloc_error_handler;
 
35
  mem_root->error_handler= sql_alloc_error_handler;
33
36
}
34
37
 
35
38
 
36
39
void *sql_alloc(size_t Size)
37
40
{
38
 
  MEM_ROOT *root= *(MEM_ROOT **)pthread_getspecific(THR_MALLOC);
 
41
  MEM_ROOT *root= current_mem_root();
39
42
  return alloc_root(root,Size);
40
43
}
41
44
 
79
82
  return pos;
80
83
}
81
84
 
82
 
void sql_element_free(void *ptr __attribute__((unused)))
83
 
{} /* purecov: deadcode */
84
 
 
85
 
 
86
 
 
87
 
char *sql_strmake_with_convert(const char *str, size_t arg_length,
88
 
                               const CHARSET_INFO * const from_cs,
89
 
                               size_t max_res_length,
90
 
                               const CHARSET_INFO * const to_cs, size_t *result_length)
91
 
{
92
 
  char *pos;
93
 
  size_t new_length= to_cs->mbmaxlen*arg_length;
94
 
  max_res_length--;                             // Reserve place for end null
95
 
 
96
 
  set_if_smaller(new_length, max_res_length);
97
 
  if (!(pos= (char*) sql_alloc(new_length+1)))
98
 
    return pos;                                 // Error
99
 
 
100
 
  if ((from_cs == &my_charset_bin) || (to_cs == &my_charset_bin))
101
 
  {
102
 
    // Safety if to_cs->mbmaxlen > 0
103
 
    new_length= min(arg_length, max_res_length);
104
 
    memcpy(pos, str, new_length);
105
 
  }
106
 
  else
107
 
  {
108
 
    uint dummy_errors;
109
 
    new_length= copy_and_convert((char*) pos, new_length, to_cs, str,
110
 
                                 arg_length, from_cs, &dummy_errors);
111
 
  }
112
 
  pos[new_length]= 0;
113
 
  *result_length= new_length;
114
 
  return pos;
115
 
}
116