~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/innobase/mach/mach0data.cc

  • Committer: Stewart Smith
  • Date: 2008-10-15 04:21:24 UTC
  • mto: This revision was merged to the branch mainline in revision 516.
  • Revision ID: stewart@flamingspork.com-20081015042124-kdmb74bcbky1k1nz
remove my_pthread_[gs]etspecific

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
 
3
 
Copyright (C) 1995, 2009, Innobase Oy. All Rights Reserved.
4
 
 
5
 
This program is free software; you can redistribute it and/or modify it under
6
 
the terms of the GNU General Public License as published by the Free Software
7
 
Foundation; version 2 of the License.
8
 
 
9
 
This program is distributed in the hope that it will be useful, but WITHOUT
10
 
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
 
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
 
 
13
 
You should have received a copy of the GNU General Public License along with
14
 
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
15
 
St, Fifth Floor, Boston, MA 02110-1301 USA
16
 
 
17
 
*****************************************************************************/
18
 
 
19
 
/******************************************************************//**
20
 
@file mach/mach0data.c
21
 
Utilities for converting data from the database file
22
 
to the machine format.
23
 
 
24
 
Created 11/28/1995 Heikki Tuuri
25
 
***********************************************************************/
26
 
 
27
 
#include "mach0data.h"
28
 
 
29
 
#ifdef UNIV_NONINL
30
 
#include "mach0data.ic"
31
 
#endif
32
 
 
33
 
/*********************************************************//**
34
 
Reads a ulint in a compressed form if the log record fully contains it.
35
 
@return pointer to end of the stored field, NULL if not complete */
36
 
UNIV_INTERN
37
 
byte*
38
 
mach_parse_compressed(
39
 
/*==================*/
40
 
        byte*   ptr,    /*!< in: pointer to buffer from where to read */
41
 
        byte*   end_ptr,/*!< in: pointer to end of the buffer */
42
 
        ulint*  val)    /*!< out: read value (< 2^32) */
43
 
{
44
 
        ulint   flag;
45
 
 
46
 
        ut_ad(ptr && end_ptr && val);
47
 
 
48
 
        if (ptr >= end_ptr) {
49
 
 
50
 
                return(NULL);
51
 
        }
52
 
 
53
 
        flag = mach_read_from_1(ptr);
54
 
 
55
 
        if (flag < 0x80UL) {
56
 
                *val = flag;
57
 
                return(ptr + 1);
58
 
 
59
 
        } else if (flag < 0xC0UL) {
60
 
                if (end_ptr < ptr + 2) {
61
 
                        return(NULL);
62
 
                }
63
 
 
64
 
                *val = mach_read_from_2(ptr) & 0x7FFFUL;
65
 
 
66
 
                return(ptr + 2);
67
 
 
68
 
        } else if (flag < 0xE0UL) {
69
 
                if (end_ptr < ptr + 3) {
70
 
                        return(NULL);
71
 
                }
72
 
 
73
 
                *val = mach_read_from_3(ptr) & 0x3FFFFFUL;
74
 
 
75
 
                return(ptr + 3);
76
 
        } else if (flag < 0xF0UL) {
77
 
                if (end_ptr < ptr + 4) {
78
 
                        return(NULL);
79
 
                }
80
 
 
81
 
                *val = mach_read_from_4(ptr) & 0x1FFFFFFFUL;
82
 
 
83
 
                return(ptr + 4);
84
 
        } else {
85
 
                ut_ad(flag == 0xF0UL);
86
 
 
87
 
                if (end_ptr < ptr + 5) {
88
 
                        return(NULL);
89
 
                }
90
 
 
91
 
                *val = mach_read_from_4(ptr + 1);
92
 
                return(ptr + 5);
93
 
        }
94
 
}