mirror of https://github.com/yandex/odyssey.git
soprano: add parameter list
This commit is contained in:
parent
b2976adcde
commit
670dba2b92
|
@ -1,5 +1,5 @@
|
||||||
set(so_library soprano)
|
set(so_library soprano)
|
||||||
set(so_src so_md5.c so_password.c so_read.c so_beread.c so_feread.c)
|
set(so_src so_md5.c so_password.c so_param.c so_read.c so_beread.c so_feread.c)
|
||||||
|
|
||||||
add_library(so_library_shared SHARED ${so_src})
|
add_library(so_library_shared SHARED ${so_src})
|
||||||
set_target_properties(so_library_shared PROPERTIES OUTPUT_NAME ${so_library})
|
set_target_properties(so_library_shared PROPERTIES OUTPUT_NAME ${so_library})
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* soprano.
|
||||||
|
*
|
||||||
|
* Protocol-level PostgreSQL client library.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include <so_macro.h>
|
||||||
|
#include <so_stream.h>
|
||||||
|
#include <so_param.h>
|
||||||
|
|
||||||
|
int so_paramlist_add(so_paramlist_t *list,
|
||||||
|
uint8_t *name,
|
||||||
|
uint32_t name_len,
|
||||||
|
uint8_t *value,
|
||||||
|
uint32_t value_len)
|
||||||
|
{
|
||||||
|
int size = sizeof(so_param_t) + name_len + value_len;
|
||||||
|
int rc;
|
||||||
|
rc = so_stream_ensure(&list->buf, size);
|
||||||
|
if (so_unlikely(rc == -1))
|
||||||
|
return -1;
|
||||||
|
so_param_t *param = (so_param_t*)list->buf.p;
|
||||||
|
param->name_len = name_len;
|
||||||
|
param->value_len = value_len;
|
||||||
|
memcpy(param->data, name, name_len);
|
||||||
|
memcpy(param->data + name_len, value, value_len);
|
||||||
|
so_stream_advance(&list->buf, size);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
#ifndef SO_PARAM_H_
|
||||||
|
#define SO_PARAM_H_
|
||||||
|
|
||||||
|
/*
|
||||||
|
* soprano.
|
||||||
|
*
|
||||||
|
* Protocol-level PostgreSQL client library.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct so_param_t so_param_t;
|
||||||
|
typedef struct so_paramlist_t so_paramlist_t;
|
||||||
|
|
||||||
|
struct so_param_t {
|
||||||
|
uint32_t name_len;
|
||||||
|
uint32_t value_len;
|
||||||
|
char data[];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct so_paramlist_t {
|
||||||
|
so_stream_t buf;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline char*
|
||||||
|
so_param_name(so_param_t *param) {
|
||||||
|
return param->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline char*
|
||||||
|
so_param_value(so_param_t *param) {
|
||||||
|
return param->data + param->name_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
so_paramlist_init(so_paramlist_t *list)
|
||||||
|
{
|
||||||
|
so_stream_init(&list->buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
so_paramlist_free(so_paramlist_t *list)
|
||||||
|
{
|
||||||
|
so_stream_free(&list->buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int so_paramlist_add(so_paramlist_t*, uint8_t*, uint32_t,
|
||||||
|
uint8_t*, uint32_t);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue