1 /* 2 * Drizzle Client & Protocol Library 3 * 4 * Copyright (C) 2008 Eric Day (eday@oddments.org) 5 * All rights reserved. 6 * 7 * Use and distribution licensed under the BSD license. See 8 * the COPYING file in this directory for full text. 9 */ 10 11 /** 12 * @file 13 * @brief Defines, typedefs, enums, and macros 14 */ 15 16 #ifndef __DRIZZLE_CONSTANTS_H 17 #define __DRIZZLE_CONSTANTS_H 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 /** 24 * @addtogroup drizzle_constants Constants 25 * @ingroup drizzle_client_interface 26 * @ingroup drizzle_server_interface 27 * @{ 28 */ 29 30 /** 31 * @todo Remove these with next major API change. 32 */ 33 #define DRIZZLE_RETURN_SERVER_GONE DRIZZLE_RETURN_LOST_CONNECTION 34 #define DRIZZLE_RETURN_EOF DRIZZLE_RETURN_LOST_CONNECTION 35 #define DRIZZLE_COLUMN_TYPE_VIRTUAL 17 36 37 /* Defines. */ 38 #define DRIZZLE_DEFAULT_TCP_HOST "127.0.0.1" 39 #define DRIZZLE_DEFAULT_TCP_PORT 4427 40 #define DRIZZLE_DEFAULT_TCP_PORT_MYSQL 3306 41 #define DRIZZLE_DEFAULT_UDS "/tmp/drizzle.sock" 42 #define DRIZZLE_DEFAULT_UDS_MYSQL "/tmp/mysql.sock" 43 #define DRIZZLE_DEFAULT_BACKLOG 64 44 #define DRIZZLE_MAX_ERROR_SIZE 2048 45 #define DRIZZLE_MAX_USER_SIZE 64 46 #define DRIZZLE_MAX_PASSWORD_SIZE 32 47 #define DRIZZLE_MAX_DB_SIZE 64 48 #define DRIZZLE_MAX_INFO_SIZE 2048 49 #define DRIZZLE_MAX_SQLSTATE_SIZE 5 50 #define DRIZZLE_MAX_CATALOG_SIZE 128 51 #define DRIZZLE_MAX_TABLE_SIZE 128 52 #define DRIZZLE_MAX_COLUMN_NAME_SIZE 2048 53 #define DRIZZLE_MAX_DEFAULT_VALUE_SIZE 2048 54 #define DRIZZLE_MAX_PACKET_SIZE UINT32_MAX 55 #define DRIZZLE_MAX_BUFFER_SIZE 32768 56 #define DRIZZLE_BUFFER_COPY_THRESHOLD 8192 57 #define DRIZZLE_MAX_SERVER_VERSION_SIZE 32 58 #define DRIZZLE_MAX_SCRAMBLE_SIZE 20 59 #define DRIZZLE_STATE_STACK_SIZE 8 60 #define DRIZZLE_ROW_GROW_SIZE 8192 61 #define DRIZZLE_DEFAULT_SOCKET_TIMEOUT 10 62 #define DRIZZLE_DEFAULT_SOCKET_SEND_SIZE 32768 63 #define DRIZZLE_DEFAULT_SOCKET_RECV_SIZE 32768 64 65 /** 66 * Return codes. 67 */ 68 typedef enum 69 { 70 DRIZZLE_RETURN_OK, 71 DRIZZLE_RETURN_IO_WAIT, 72 DRIZZLE_RETURN_PAUSE, 73 DRIZZLE_RETURN_ROW_BREAK, 74 DRIZZLE_RETURN_MEMORY, 75 DRIZZLE_RETURN_ERRNO, 76 DRIZZLE_RETURN_INTERNAL_ERROR, 77 DRIZZLE_RETURN_GETADDRINFO, 78 DRIZZLE_RETURN_NOT_READY, 79 DRIZZLE_RETURN_BAD_PACKET_NUMBER, 80 DRIZZLE_RETURN_BAD_HANDSHAKE_PACKET, 81 DRIZZLE_RETURN_BAD_PACKET, 82 DRIZZLE_RETURN_PROTOCOL_NOT_SUPPORTED, 83 DRIZZLE_RETURN_UNEXPECTED_DATA, 84 DRIZZLE_RETURN_NO_SCRAMBLE, 85 DRIZZLE_RETURN_AUTH_FAILED, 86 DRIZZLE_RETURN_NULL_SIZE, 87 DRIZZLE_RETURN_ERROR_CODE, 88 DRIZZLE_RETURN_TOO_MANY_COLUMNS, 89 DRIZZLE_RETURN_ROW_END, 90 DRIZZLE_RETURN_LOST_CONNECTION, 91 DRIZZLE_RETURN_COULD_NOT_CONNECT, 92 DRIZZLE_RETURN_NO_ACTIVE_CONNECTIONS, 93 DRIZZLE_RETURN_HANDSHAKE_FAILED, 94 DRIZZLE_RETURN_TIMEOUT, 95 DRIZZLE_RETURN_MAX /* Always add new codes to the end before this one. */ 96 } drizzle_return_t; 97 98 /** 99 * Verbosity levels. 100 */ 101 typedef enum 102 { 103 DRIZZLE_VERBOSE_NEVER, 104 DRIZZLE_VERBOSE_FATAL, 105 DRIZZLE_VERBOSE_ERROR, 106 DRIZZLE_VERBOSE_INFO, 107 DRIZZLE_VERBOSE_DEBUG, 108 DRIZZLE_VERBOSE_CRAZY, 109 DRIZZLE_VERBOSE_MAX 110 } drizzle_verbose_t; 111 112 /** @} */ 113 114 /** 115 * @ingroup drizzle 116 * Options for drizzle_st. 117 */ 118 typedef enum 119 { 120 DRIZZLE_NONE= 0, 121 DRIZZLE_ALLOCATED= (1 << 0), 122 DRIZZLE_NON_BLOCKING= (1 << 1), 123 DRIZZLE_FREE_OBJECTS= (1 << 2), 124 DRIZZLE_ASSERT_DANGLING= (1 << 3) 125 } drizzle_options_t; 126 127 /** 128 * @ingroup drizzle_con 129 * Options for drizzle_con_st. 130 */ 131 typedef enum 132 { 133 DRIZZLE_CON_NONE= 0, 134 DRIZZLE_CON_ALLOCATED= (1 << 0), 135 DRIZZLE_CON_MYSQL= (1 << 1), 136 DRIZZLE_CON_RAW_PACKET= (1 << 2), 137 DRIZZLE_CON_RAW_SCRAMBLE= (1 << 3), 138 DRIZZLE_CON_READY= (1 << 4), 139 DRIZZLE_CON_NO_RESULT_READ= (1 << 5), 140 DRIZZLE_CON_IO_READY= (1 << 6), 141 DRIZZLE_CON_LISTEN= (1 << 7), 142 DRIZZLE_CON_EXPERIMENTAL= (1 << 8) 143 } drizzle_con_options_t; 144 145 /** 146 * @ingroup drizzle_con 147 * Socket types for drizzle_con_st. 148 */ 149 typedef enum 150 { 151 DRIZZLE_CON_SOCKET_TCP= 0, 152 DRIZZLE_CON_SOCKET_UDS= (1 << 0) 153 } drizzle_con_socket_t; 154 155 /** 156 * @ingroup drizzle_con 157 * Status flags for drizle_con_st. 158 */ 159 typedef enum 160 { 161 DRIZZLE_CON_STATUS_NONE= 0, 162 DRIZZLE_CON_STATUS_IN_TRANS= (1 << 0), 163 DRIZZLE_CON_STATUS_AUTOCOMMIT= (1 << 1), 164 DRIZZLE_CON_STATUS_MORE_RESULTS_EXISTS= (1 << 3), 165 DRIZZLE_CON_STATUS_QUERY_NO_GOOD_INDEX_USED= (1 << 4), 166 DRIZZLE_CON_STATUS_QUERY_NO_INDEX_USED= (1 << 5), 167 DRIZZLE_CON_STATUS_CURSOR_EXISTS= (1 << 6), 168 DRIZZLE_CON_STATUS_LAST_ROW_SENT= (1 << 7), 169 DRIZZLE_CON_STATUS_DB_DROPPED= (1 << 8), 170 DRIZZLE_CON_STATUS_NO_BACKSLASH_ESCAPES= (1 << 9), 171 DRIZZLE_CON_STATUS_QUERY_WAS_SLOW= (1 << 10) 172 } drizzle_con_status_t; 173 174 /** 175 * @ingroup drizzle_con 176 * Capabilities for drizzle_con_st. 177 */ 178 typedef enum 179 { 180 DRIZZLE_CAPABILITIES_NONE= 0, 181 DRIZZLE_CAPABILITIES_LONG_PASSWORD= (1 << 0), 182 DRIZZLE_CAPABILITIES_FOUND_ROWS= (1 << 1), 183 DRIZZLE_CAPABILITIES_LONG_FLAG= (1 << 2), 184 DRIZZLE_CAPABILITIES_CONNECT_WITH_DB= (1 << 3), 185 DRIZZLE_CAPABILITIES_NO_SCHEMA= (1 << 4), 186 DRIZZLE_CAPABILITIES_COMPRESS= (1 << 5), 187 DRIZZLE_CAPABILITIES_ODBC= (1 << 6), 188 DRIZZLE_CAPABILITIES_LOCAL_FILES= (1 << 7), 189 DRIZZLE_CAPABILITIES_IGNORE_SPACE= (1 << 8), 190 DRIZZLE_CAPABILITIES_PROTOCOL_41= (1 << 9), 191 DRIZZLE_CAPABILITIES_INTERACTIVE= (1 << 10), 192 DRIZZLE_CAPABILITIES_SSL= (1 << 11), 193 DRIZZLE_CAPABILITIES_IGNORE_SIGPIPE= (1 << 12), 194 DRIZZLE_CAPABILITIES_TRANSACTIONS= (1 << 13), 195 DRIZZLE_CAPABILITIES_RESERVED= (1 << 14), 196 DRIZZLE_CAPABILITIES_SECURE_CONNECTION= (1 << 15), 197 DRIZZLE_CAPABILITIES_MULTI_STATEMENTS= (1 << 16), 198 DRIZZLE_CAPABILITIES_MULTI_RESULTS= (1 << 17), 199 DRIZZLE_CAPABILITIES_SSL_VERIFY_SERVER_CERT= (1 << 30), 200 DRIZZLE_CAPABILITIES_REMEMBER_OPTIONS= (1 << 31), 201 DRIZZLE_CAPABILITIES_CLIENT= (DRIZZLE_CAPABILITIES_LONG_PASSWORD | 202 DRIZZLE_CAPABILITIES_LONG_FLAG | 203 DRIZZLE_CAPABILITIES_CONNECT_WITH_DB | 204 DRIZZLE_CAPABILITIES_TRANSACTIONS | 205 DRIZZLE_CAPABILITIES_PROTOCOL_41 | 206 DRIZZLE_CAPABILITIES_SECURE_CONNECTION) 207 } drizzle_capabilities_t; 208 209 /** 210 * @ingroup drizzle_command 211 * Commands for drizzle_command functions. 212 */ 213 typedef enum 214 { 215 DRIZZLE_COMMAND_SLEEP, /* Not used currently. */ 216 DRIZZLE_COMMAND_QUIT, 217 DRIZZLE_COMMAND_INIT_DB, 218 DRIZZLE_COMMAND_QUERY, 219 DRIZZLE_COMMAND_FIELD_LIST, /* Deprecated. */ 220 DRIZZLE_COMMAND_CREATE_DB, /* Deprecated. */ 221 DRIZZLE_COMMAND_DROP_DB, /* Deprecated. */ 222 DRIZZLE_COMMAND_REFRESH, 223 DRIZZLE_COMMAND_SHUTDOWN, 224 DRIZZLE_COMMAND_STATISTICS, 225 DRIZZLE_COMMAND_PROCESS_INFO, /* Deprecated. */ 226 DRIZZLE_COMMAND_CONNECT, /* Not used currently. */ 227 DRIZZLE_COMMAND_PROCESS_KILL, /* Deprecated. */ 228 DRIZZLE_COMMAND_DEBUG, 229 DRIZZLE_COMMAND_PING, 230 DRIZZLE_COMMAND_TIME, /* Not used currently. */ 231 DRIZZLE_COMMAND_DELAYED_INSERT, /* Not used currently. */ 232 DRIZZLE_COMMAND_CHANGE_USER, 233 DRIZZLE_COMMAND_BINLOG_DUMP, /* Not used currently. */ 234 DRIZZLE_COMMAND_TABLE_DUMP, /* Not used currently. */ 235 DRIZZLE_COMMAND_CONNECT_OUT, /* Not used currently. */ 236 DRIZZLE_COMMAND_REGISTER_SLAVE, /* Not used currently. */ 237 DRIZZLE_COMMAND_STMT_PREPARE, /* Not used currently. */ 238 DRIZZLE_COMMAND_STMT_EXECUTE, /* Not used currently. */ 239 DRIZZLE_COMMAND_STMT_SEND_LONG_DATA, /* Not used currently. */ 240 DRIZZLE_COMMAND_STMT_CLOSE, /* Not used currently. */ 241 DRIZZLE_COMMAND_STMT_RESET, /* Not used currently. */ 242 DRIZZLE_COMMAND_SET_OPTION, /* Not used currently. */ 243 DRIZZLE_COMMAND_STMT_FETCH, /* Not used currently. */ 244 DRIZZLE_COMMAND_DAEMON, /* Not used currently. */ 245 DRIZZLE_COMMAND_END /* Not used currently. */ 246 } drizzle_command_t; 247 248 /** 249 * @ingroup drizzle_command 250 * Commands for the Drizzle protocol functions. 251 */ 252 typedef enum 253 { 254 DRIZZLE_COMMAND_DRIZZLE_SLEEP, 255 DRIZZLE_COMMAND_DRIZZLE_QUIT, 256 DRIZZLE_COMMAND_DRIZZLE_INIT_DB, 257 DRIZZLE_COMMAND_DRIZZLE_QUERY, 258 DRIZZLE_COMMAND_DRIZZLE_SHUTDOWN, 259 DRIZZLE_COMMAND_DRIZZLE_CONNECT, 260 DRIZZLE_COMMAND_DRIZZLE_PING, 261 DRIZZLE_COMMAND_DRIZZLE_END 262 } drizzle_command_drizzle_t; 263 264 /** 265 * @ingroup drizzle_query 266 * Options for drizzle_query_st. 267 */ 268 typedef enum 269 { 270 DRIZZLE_QUERY_ALLOCATED= (1 << 0) 271 } drizzle_query_options_t; 272 273 /** 274 * @ingroup drizzle_query 275 * States for drizle_query_st. 276 */ 277 typedef enum 278 { 279 DRIZZLE_QUERY_STATE_INIT, 280 DRIZZLE_QUERY_STATE_QUERY, 281 DRIZZLE_QUERY_STATE_RESULT, 282 DRIZZLE_QUERY_STATE_DONE 283 } drizzle_query_state_t; 284 285 /** 286 * @ingroup drizzle_result 287 * Options for drizzle_result_st. 288 */ 289 typedef enum 290 { 291 DRIZZLE_RESULT_NONE= 0, 292 DRIZZLE_RESULT_ALLOCATED= (1 << 0), 293 DRIZZLE_RESULT_SKIP_COLUMN= (1 << 1), 294 DRIZZLE_RESULT_BUFFER_COLUMN= (1 << 2), 295 DRIZZLE_RESULT_BUFFER_ROW= (1 << 3), 296 DRIZZLE_RESULT_EOF_PACKET= (1 << 4), 297 DRIZZLE_RESULT_ROW_BREAK= (1 << 5) 298 } drizzle_result_options_t; 299 300 /** 301 * @ingroup drizzle_column 302 * Options for drizzle_column_st. 303 */ 304 typedef enum 305 { 306 DRIZZLE_COLUMN_ALLOCATED= (1 << 0) 307 } drizzle_column_options_t; 308 309 /** 310 * @ingroup drizzle_column 311 * Types for drizzle_column_st. 312 */ 313 typedef enum 314 { 315 DRIZZLE_COLUMN_TYPE_DECIMAL, 316 DRIZZLE_COLUMN_TYPE_TINY, 317 DRIZZLE_COLUMN_TYPE_SHORT, 318 DRIZZLE_COLUMN_TYPE_LONG, 319 DRIZZLE_COLUMN_TYPE_FLOAT, 320 DRIZZLE_COLUMN_TYPE_DOUBLE, 321 DRIZZLE_COLUMN_TYPE_NULL, 322 DRIZZLE_COLUMN_TYPE_TIMESTAMP, 323 DRIZZLE_COLUMN_TYPE_LONGLONG, 324 DRIZZLE_COLUMN_TYPE_INT24, 325 DRIZZLE_COLUMN_TYPE_DATE, 326 DRIZZLE_COLUMN_TYPE_TIME, 327 DRIZZLE_COLUMN_TYPE_DATETIME, 328 DRIZZLE_COLUMN_TYPE_YEAR, 329 DRIZZLE_COLUMN_TYPE_NEWDATE, 330 DRIZZLE_COLUMN_TYPE_VARCHAR, 331 DRIZZLE_COLUMN_TYPE_BIT, 332 DRIZZLE_COLUMN_TYPE_NEWDECIMAL= 246, 333 DRIZZLE_COLUMN_TYPE_ENUM= 247, 334 DRIZZLE_COLUMN_TYPE_SET= 248, 335 DRIZZLE_COLUMN_TYPE_TINY_BLOB= 249, 336 DRIZZLE_COLUMN_TYPE_MEDIUM_BLOB= 250, 337 DRIZZLE_COLUMN_TYPE_LONG_BLOB= 251, 338 DRIZZLE_COLUMN_TYPE_BLOB= 252, 339 DRIZZLE_COLUMN_TYPE_VAR_STRING= 253, 340 DRIZZLE_COLUMN_TYPE_STRING= 254, 341 DRIZZLE_COLUMN_TYPE_GEOMETRY= 255 342 } drizzle_column_type_t; 343 344 /** 345 * @ingroup drizzle_column 346 * Types for drizzle_column_st for Drizzle. 347 */ 348 typedef enum 349 { 350 DRIZZLE_COLUMN_TYPE_DRIZZLE_TINY, 351 DRIZZLE_COLUMN_TYPE_DRIZZLE_LONG, 352 DRIZZLE_COLUMN_TYPE_DRIZZLE_DOUBLE, 353 DRIZZLE_COLUMN_TYPE_DRIZZLE_NULL, 354 DRIZZLE_COLUMN_TYPE_DRIZZLE_TIMESTAMP, 355 DRIZZLE_COLUMN_TYPE_DRIZZLE_LONGLONG, 356 DRIZZLE_COLUMN_TYPE_DRIZZLE_DATETIME, 357 DRIZZLE_COLUMN_TYPE_DRIZZLE_DATE, 358 DRIZZLE_COLUMN_TYPE_DRIZZLE_VARCHAR, 359 DRIZZLE_COLUMN_TYPE_DRIZZLE_NEWDECIMAL, 360 DRIZZLE_COLUMN_TYPE_DRIZZLE_ENUM, 361 DRIZZLE_COLUMN_TYPE_DRIZZLE_BLOB, 362 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX=DRIZZLE_COLUMN_TYPE_DRIZZLE_BLOB 363 } drizzle_column_type_drizzle_t; 364 365 /** 366 * @ingroup drizzle_column 367 * Flags for drizzle_column_st. 368 */ 369 typedef enum 370 { 371 DRIZZLE_COLUMN_FLAGS_NONE= 0, 372 DRIZZLE_COLUMN_FLAGS_NOT_NULL= (1 << 0), 373 DRIZZLE_COLUMN_FLAGS_PRI_KEY= (1 << 1), 374 DRIZZLE_COLUMN_FLAGS_UNIQUE_KEY= (1 << 2), 375 DRIZZLE_COLUMN_FLAGS_MULTIPLE_KEY= (1 << 3), 376 DRIZZLE_COLUMN_FLAGS_BLOB= (1 << 4), 377 DRIZZLE_COLUMN_FLAGS_UNSIGNED= (1 << 5), 378 DRIZZLE_COLUMN_FLAGS_ZEROFILL= (1 << 6), 379 DRIZZLE_COLUMN_FLAGS_BINARY= (1 << 7), 380 DRIZZLE_COLUMN_FLAGS_ENUM= (1 << 8), 381 DRIZZLE_COLUMN_FLAGS_AUTO_INCREMENT= (1 << 9), 382 DRIZZLE_COLUMN_FLAGS_TIMESTAMP= (1 << 10), 383 DRIZZLE_COLUMN_FLAGS_SET= (1 << 11), 384 DRIZZLE_COLUMN_FLAGS_NO_DEFAULT_VALUE= (1 << 12), 385 DRIZZLE_COLUMN_FLAGS_ON_UPDATE_NOW= (1 << 13), 386 DRIZZLE_COLUMN_FLAGS_PART_KEY= (1 << 14), 387 DRIZZLE_COLUMN_FLAGS_NUM= (1 << 15), 388 DRIZZLE_COLUMN_FLAGS_GROUP= (1 << 15), /* NUM & GROUP the same. */ 389 DRIZZLE_COLUMN_FLAGS_UNIQUE= (1 << 16), 390 DRIZZLE_COLUMN_FLAGS_BINCMP= (1 << 17), 391 DRIZZLE_COLUMN_FLAGS_GET_FIXED_FIELDS= (1 << 18), 392 DRIZZLE_COLUMN_FLAGS_IN_PART_FUNC= (1 << 19), 393 DRIZZLE_COLUMN_FLAGS_IN_ADD_INDEX= (1 << 20), 394 DRIZZLE_COLUMN_FLAGS_RENAMED= (1 << 21) 395 } drizzle_column_flags_t; 396 397 /** 398 * @addtogroup drizzle_types Types 399 * @ingroup drizzle_client_interface 400 * @ingroup drizzle_server_interface 401 * @{ 402 */ 403 404 /* Types. */ 405 typedef struct drizzle_st drizzle_st; 406 typedef struct drizzle_con_tcp_st drizzle_con_tcp_st; 407 typedef struct drizzle_con_uds_st drizzle_con_uds_st; 408 typedef struct drizzle_con_st drizzle_con_st; 409 typedef struct drizzle_query_st drizzle_query_st; 410 typedef struct drizzle_result_st drizzle_result_st; 411 typedef struct drizzle_column_st drizzle_column_st; 412 typedef char *drizzle_field_t; 413 typedef drizzle_field_t *drizzle_row_t; 414 typedef uint8_t drizzle_charset_t; 415 416 /* Function types. */ 417 typedef void (drizzle_context_free_fn)(drizzle_st *drizzle, 418 void *context); 419 typedef void (drizzle_log_fn)(const char *line, drizzle_verbose_t verbose, 420 void *context); 421 typedef drizzle_return_t (drizzle_state_fn)(drizzle_con_st *con); 422 typedef void (drizzle_con_context_free_fn)(drizzle_con_st *con, 423 void *context); 424 typedef void (drizzle_query_context_free_fn)(drizzle_query_st *query, 425 void *context); 426 /** 427 * Custom function to register or deregister interest in file descriptor 428 * events. See drizzle_set_event_watch_fn(). 429 * 430 * @param[in] con Connection that has changed the events it is interested in. 431 * Use drizzle_con_fd() to get the file descriptor. 432 * @param[in] events A bit mask of POLLIN | POLLOUT, specifying if the 433 * connection is waiting for read or write events. 434 * @param[in] context Application context pointer registered with 435 * drizzle_set_event_watch_fn(). 436 * @return DRIZZLE_RETURN_OK if successful. 437 */ 438 typedef drizzle_return_t (drizzle_event_watch_fn)(drizzle_con_st *con, 439 short events, 440 void *context); 441 442 /** @} */ 443 444 /** 445 * @addtogroup drizzle_macros Macros 446 * @ingroup drizzle_client_interface 447 * @ingroup drizzle_server_interface 448 * @{ 449 */ 450 451 /* Protocol unpacking macros. */ 452 #define drizzle_get_byte2(__buffer) \ 453 (uint16_t)((__buffer)[0] | \ 454 ((__buffer)[1] << 8)) 455 #define drizzle_get_byte3(__buffer) \ 456 (uint32_t)((__buffer)[0] | \ 457 ((__buffer)[1] << 8) | \ 458 ((__buffer)[2] << 16)) 459 #define drizzle_get_byte4(__buffer) \ 460 (uint32_t)((__buffer)[0] | \ 461 ((__buffer)[1] << 8) | \ 462 ((__buffer)[2] << 16) | \ 463 ((__buffer)[3] << 24)) 464 #define drizzle_get_byte8(__buffer) \ 465 ((uint64_t)(__buffer)[0] | \ 466 ((uint64_t)(__buffer)[1] << 8) | \ 467 ((uint64_t)(__buffer)[2] << 16) | \ 468 ((uint64_t)(__buffer)[3] << 24) | \ 469 ((uint64_t)(__buffer)[4] << 32) | \ 470 ((uint64_t)(__buffer)[5] << 40) | \ 471 ((uint64_t)(__buffer)[6] << 48) | \ 472 ((uint64_t)(__buffer)[7] << 56)) 473 474 /* Protocol packing macros. */ 475 #define drizzle_set_byte2(__buffer, __int) do { \ 476 (__buffer)[0]= (uint8_t)((__int) & 0xFF); \ 477 (__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); } while (0) 478 #define drizzle_set_byte3(__buffer, __int) do { \ 479 (__buffer)[0]= (uint8_t)((__int) & 0xFF); \ 480 (__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); \ 481 (__buffer)[2]= (uint8_t)(((__int) >> 16) & 0xFF); } while (0) 482 #define drizzle_set_byte4(__buffer, __int) do { \ 483 (__buffer)[0]= (uint8_t)((__int) & 0xFF); \ 484 (__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); \ 485 (__buffer)[2]= (uint8_t)(((__int) >> 16) & 0xFF); \ 486 (__buffer)[3]= (uint8_t)(((__int) >> 24) & 0xFF); } while (0) 487 #define drizzle_set_byte8(__buffer, __int) do { \ 488 (__buffer)[0]= (uint8_t)((__int) & 0xFF); \ 489 (__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); \ 490 (__buffer)[2]= (uint8_t)(((__int) >> 16) & 0xFF); \ 491 (__buffer)[3]= (uint8_t)(((__int) >> 24) & 0xFF); \ 492 (__buffer)[4]= (uint8_t)(((__int) >> 32) & 0xFF); \ 493 (__buffer)[5]= (uint8_t)(((__int) >> 40) & 0xFF); \ 494 (__buffer)[6]= (uint8_t)(((__int) >> 48) & 0xFF); \ 495 (__buffer)[7]= (uint8_t)(((__int) >> 56) & 0xFF); } while (0) 496 497 /* Multi-byte character macros. */ 498 #define drizzle_mb_char(__c) (((__c) & 0x80) != 0) 499 #define drizzle_mb_length(__c) \ 500 ((uint32_t)(__c) <= 0x7f ? 1 : \ 501 ((uint32_t)(__c) <= 0x7ff ? 2 : \ 502 ((uint32_t)(__c) <= 0xd7ff ? 3 : \ 503 ((uint32_t)(__c) <= 0xdfff || (uint32_t)(__c) > 0x10ffff ? 0 : \ 504 ((uint32_t)(__c) <= 0xffff ? 3 : 4))))) 505 506 /** @} */ 507 508 #ifdef __cplusplus 509 } 510 #endif 511 512 #endif /* __DRIZZLE_CONSTANTS_H */ 513