~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/set_var.h

  • Committer: Stewart Smith
  • Date: 2009-03-11 01:16:44 UTC
  • mto: (910.4.19 sparc) (937.2.1 sparc)
  • mto: This revision was merged to the branch mainline in revision 931.
  • Revision ID: stewart@flamingspork.com-20090311011644-sj4p2peox2405p7k
fix system variables for correct endian architectures.

- remove sys_var_long (replace with 32 or 64 bit)
- union { uint32_t, uint64_t } isn't endian portable for setting uint64 and reading from uint32
- start to have out of range variables throw error instead of truncating and setting

Show diffs side-by-side

added added

removed removed

Lines of Context:
145
145
};
146
146
 
147
147
 
148
 
/*
149
 
  A global-only uint64_t variable that requires its access to be
150
 
  protected with a mutex.
151
 
*/
152
 
 
153
 
class sys_var_long_ptr_global: public sys_var_global
154
 
{
155
 
  uint64_t *value;
156
 
public:
157
 
  sys_var_long_ptr_global(sys_var_chain *chain, const char *name_arg,
158
 
                          uint64_t *value_ptr_arg,
159
 
                          pthread_mutex_t *guard_arg,
160
 
                          sys_after_update_func after_update_arg= NULL)
161
 
    :sys_var_global(name_arg, after_update_arg, guard_arg),
162
 
    value(value_ptr_arg)
163
 
  { chain_sys_var(chain); }
164
 
  bool check(Session *session, set_var *var);
165
 
  bool update(Session *session, set_var *var);
166
 
  void set_default(Session *session, enum_var_type type);
167
 
  SHOW_TYPE show_type() { return SHOW_LONG; }
168
 
  unsigned char *value_ptr(Session *, enum_var_type, const LEX_STRING *)
169
 
  { return (unsigned char*) value; }
170
 
};
171
 
 
172
 
 
173
 
/*
174
 
  A global uint64_t variable that is protected by LOCK_global_system_variables
175
 
*/
176
 
 
177
 
class sys_var_long_ptr :public sys_var_long_ptr_global
178
 
{
179
 
public:
180
 
  sys_var_long_ptr(sys_var_chain *chain, const char *name_arg, uint64_t *value_ptr,
181
 
                   sys_after_update_func after_update_arg= NULL);
182
 
};
183
 
 
184
 
 
185
148
class sys_var_uint32_t_ptr :public sys_var
186
149
{
187
150
  uint32_t *value;
195
158
                       sys_after_update_func func)
196
159
    :sys_var(name_arg,func), value(value_ptr_arg)
197
160
  { chain_sys_var(chain); }
 
161
  bool check(Session *session, set_var *var);
198
162
  bool update(Session *session, set_var *var);
199
163
  void set_default(Session *session, enum_var_type type);
200
164
  SHOW_TYPE show_type() { return SHOW_LONG; }