MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mach0data.cc
Go to the documentation of this file.
1 /*****************************************************************************
2 
3 Copyright (c) 1995, 2009, Oracle and/or its affiliates. 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.,
15 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
16 
17 *****************************************************************************/
18 
19 /******************************************************************/
27 #include "mach0data.h"
28 
29 #ifdef UNIV_NONINL
30 #include "mach0data.ic"
31 #endif
32 
33 /*********************************************************/
36 UNIV_INTERN
37 byte*
39 /*==================*/
40  byte* ptr,
41  byte* end_ptr,
42  ulint* val)
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 }