Byte - in has now valguard

FossilOrigin-Name: 7926e93ff40c6f5f6b34190ed6591339025f1a23c93469370c1fa160176571e5
This commit is contained in:
7u83@mail.ru
2018-04-25 08:43:27 +00:00
parent 98c682e7e6
commit 1f68439fa7
32 changed files with 189 additions and 112 deletions

View File

@ -15,7 +15,7 @@ int cw_in_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams *
}
result = cw_ktv_add(params->conn->remote_cfg, handler->key,
handler->type, elem_data,elem_len);
handler->type,NULL, elem_data,elem_len);
params->elem=result;

View File

@ -9,6 +9,6 @@ int cw_in_generic_with_index(struct cw_ElemHandler *eh,
idx = cw_get_byte(data);
sprintf(key,"%s.%d",eh->key,idx);
cw_ktv_add(params->conn->remote_cfg,key,eh->type,data+1,len-1);
cw_ktv_add(params->conn->remote_cfg,key,eh->type,NULL,data+1,len-1);
return 1;
}

View File

@ -17,7 +17,7 @@ int cw_in_idx_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerPara
sprintf(key,handler->key,idx);
result = cw_ktv_add(params->conn->remote_cfg, key,
handler->type, elem_data+1,elem_len-1);
handler->type, NULL, elem_data+1,elem_len-1);
params->elem=result;

View File

@ -4,19 +4,23 @@
#include "log.h"
#include "dbg.h"
cw_KTV_t * cw_ktv_add(mavl_t kvtstore, const char *key, const struct cw_Type *type,
cw_KTV_t * cw_ktv_add(mavl_t kvtstore, const char *key, const struct cw_Type *type,
const void * valguard,
const uint8_t * data, int len)
{
cw_KTV_t mdata, *mresult;
int exists;
mdata.key=cw_strdup(key);
mdata.valguard=valguard;
if (!mdata.key){
cw_log(LOG_ERR, "Can't allocate memory for KTV key %s: %s",
key,strerror(errno));
return NULL;
}
mresult = type->get(&mdata,data,len);
if (!mresult){
cw_log(LOG_ERR, "Can't create kvstore element for key %s of type %s: %s",

View File

@ -6,6 +6,7 @@
const char * cw_ktv_add_from_str(mavl_t kvtstore, const char *key,
const struct cw_Type *type,
const void * valguard,
const char * str)
{
cw_KTV_t mdata, *mresult;
@ -15,6 +16,7 @@ const char * cw_ktv_add_from_str(mavl_t kvtstore, const char *key,
type->name, key );
*/
mdata.key=cw_strdup(key);
mdata.valguard=valguard;
if (!mdata.key){
cw_log(LOG_ERR, "Can't allocate memory for key %s: %s",
key,strerror(errno));

View File

@ -31,7 +31,7 @@ int cw_ktv_read_file(FILE * file, mavl_t ktv, mavl_t types)
continue;
}
cw_ktv_add_from_str(ktv,key,cwtype,val);
cw_ktv_add_from_str(ktv,key,cwtype,NULL,val);
}while(rc==0);

View File

@ -37,7 +37,7 @@ int cw_ktv_read_struct(mavl_t ktv,const cw_KTVStruct_t * stru, const char *pkey,
}
result = cw_ktv_add(ktv,key,stru[i].type,data+pos,l);
result = cw_ktv_add(ktv,key,stru[i].type,stru[i].valguard,data+pos,l);
stru[i].type->to_str(result,dbstr,100);
cw_dbg(DBG_ELEM_DETAIL, "Read (%d): %s: %s",pos,key,dbstr);

View File

@ -5,6 +5,7 @@
#include "dbg.h"
cw_KTV_t * cw_ktv_replace(mavl_t kvtstore, const char *key, const struct cw_Type *type,
const void * valguard,
const uint8_t * data, int len)
{
cw_KTV_t mdata, *mresult;

View File

@ -2,5 +2,5 @@
cw_KTV_t * cw_ktv_set_byte(mavl_t ktv,const char * key, uint8_t byte)
{
return cw_ktv_replace(ktv,key,CW_TYPE_BYTE,&byte,1);
return cw_ktv_replace(ktv,key,CW_TYPE_BYTE,NULL,&byte,1);
}

View File

@ -2,5 +2,5 @@
cw_KTV_t * cw_ktv_set_dword(mavl_t ktv,const char * key, uint32_t dword)
{
return cw_ktv_replace(ktv,key,CW_TYPE_DWORD,(void*)&dword,4);
return cw_ktv_replace(ktv,key,CW_TYPE_DWORD,NULL,(void*)&dword,4);
}

View File

@ -2,5 +2,5 @@
cw_KTV_t * cw_ktv_set_word(mavl_t ktv,const char * key, uint16_t word)
{
return cw_ktv_replace(ktv,key,CW_TYPE_WORD,(void*)&word,2);
return cw_ktv_replace(ktv,key,CW_TYPE_WORD,NULL,(void*)&word,2);
}

View File

@ -70,11 +70,11 @@ int cw_read_descriptor_subelems(mavl_t cfg, const char * parent_key,
/* vendor */
sprintf(key,"%s/%s/%s",parent_key,elems[i].key,CW_SKEY_VENDOR);
cw_ktv_add(cfg,key,CW_TYPE_DWORD,data + sub,4);
cw_ktv_add(cfg,key,CW_TYPE_DWORD,NULL,data + sub,4);
/* version */
sprintf(key,"%s/%s/%s",parent_key,elems[i].key,CW_SKEY_VERSION);
cw_ktv_add(cfg,key,CW_TYPE_BSTR16,data+sub+8,l);
cw_ktv_add(cfg,key,CW_TYPE_BSTR16,NULL,data+sub+8,l);
sprintf(dbgstr, "%s", key);
cw_dbg_version_subelem(DBG_SUBELEM, dbgstr, subtype, vendor_id, data+sub+8,l);

View File

@ -22,7 +22,7 @@ int cw_in_radio_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerPa
sprintf(key,"radio.%d/%s",radio,handler->key);
result = cw_ktv_add(params->conn->remote_cfg, key,
handler->type, elem_data+1,elem_len-1);
handler->type, NULL, elem_data+1,elem_len-1);
params->elem=result;

View File

@ -39,10 +39,10 @@ int cw_read_wtp_descriptor(mavl_t cfg, struct conn *conn,
}
sprintf(key,"%s/%s",eh->key, CW_SKEY_MAX_RADIOS);
cw_ktv_add(cfg,key,CW_TYPE_BYTE,data,1);
cw_ktv_add(cfg,key,CW_TYPE_BYTE,NULL,data,1);
sprintf(key,"%s/%s",eh->key, CW_SKEY_RADIOS_IN_USE);
cw_ktv_add(cfg,key,CW_TYPE_BYTE,data+1,1);
cw_ktv_add(cfg,key,CW_TYPE_BYTE,NULL,data+1,1);

View File

@ -30,10 +30,10 @@ int cw_read_wtp_descriptor_7(mavl_t cfg, struct conn *conn,
char key[64];
sprintf(key,"%s/%s",eh->key, CW_SKEY_MAX_RADIOS);
cw_ktv_add(cfg,key,CW_TYPE_BYTE,data,1);
cw_ktv_add(cfg,key,CW_TYPE_BYTE,NULL,data,1);
sprintf(key,"%s/%s",eh->key, CW_SKEY_RADIOS_IN_USE);
cw_ktv_add(cfg,key,CW_TYPE_BYTE,data+1,1);
cw_ktv_add(cfg,key,CW_TYPE_BYTE,NULL,data+1,1);
pos = 2;

View File

@ -79,6 +79,11 @@ static void * data( cw_KTV_t * data)
return & data->val.boolean;
}
static const char * get_type_name(cw_KTV_t *data)
{
return CW_TYPE_BOOL->name;
}
const struct cw_Type cw_type_bool = {
"Bool", /* name */
NULL, /* del */
@ -87,5 +92,6 @@ const struct cw_Type cw_type_bool = {
to_str, /* to_str */
from_str, /* from_str */
len, /* len */
data /* data */
data, /* data */
get_type_name /* get_type_name */
};

View File

@ -86,6 +86,11 @@ static void * data(cw_KTV_t * data)
return bstr16_data(data->val.ptr);
}
static const char * get_type_name(cw_KTV_t *data)
{
return CW_TYPE_BSTR16->name;
}
const struct cw_Type cw_type_bstr16 = {
"Bstr16", /* name */
del, /* del */
@ -94,5 +99,6 @@ const struct cw_Type cw_type_bstr16 = {
to_str, /* to_str */
from_str, /* from_str */
len, /* len */
data /* data */
data, /* data */
get_type_name /* get_type_name */
};

View File

@ -33,12 +33,32 @@ static int put(const cw_KTV_t *data, uint8_t * dst)
return cw_put_byte(dst, data->val.byte);
}
static const char * get_guardstr(int val, const cw_KTVValRange_t * valrange)
{
while(valrange->name!=NULL){
if(val>=valrange->min && val<=valrange->max)
return valrange->name;
valrange++;
}
return NULL;
}
static int to_str(const cw_KTV_t *data, char *dst, int max_len)
{
/*if (max_len<3){
return 0;
}*/
if (data->valguard!=NULL){
const char * name;
name = get_guardstr(data->val.byte,data->valguard);
if (name != NULL){
return sprintf(dst,"%s",name);
}
}
/*if (max_len<3){
return 0;
}*/
return sprintf(dst, "%d", data->val.byte);
}
static cw_KTV_t *from_str(cw_KTV_t * data, const char *src)
@ -50,7 +70,20 @@ static cw_KTV_t *from_str(cw_KTV_t * data, const char *src)
static int len (cw_KTV_t * data)
{
return sizeof(uint8_t);
return sizeof(data->val.byte);
}
static void * data(cw_KTV_t * data)
{
return &data->val.byte;
}
static const char * get_type_name(cw_KTV_t *data)
{
if (data->valguard != NULL){
return CW_TYPE_STR->name;
}
return CW_TYPE_BYTE->name;
}
const struct cw_Type cw_type_byte = {
@ -60,5 +93,7 @@ const struct cw_Type cw_type_byte = {
get, /* get */
to_str, /* to_str */
from_str, /* from_str */
len /* len */
len, /* len */
data, /* data */
get_type_name /* get_type_name */
};

View File

@ -45,12 +45,20 @@ static struct cw_KTV *from_str(struct cw_KTV * data, const char *src)
return data;
}
static const char * get_type_name(cw_KTV_t *data)
{
return CW_TYPE_DWORD->name;
}
const struct cw_Type cw_type_dword = {
"Dword", /* name */
NULL, /* del */
put, /* put */
get, /* get */
to_str, /* to_str */
from_str /* from_str */
from_str, /* from_str */
NULL, /* len */
NULL, /* data */
get_type_name /* get_type_name */
};

View File

@ -106,6 +106,10 @@ static void * data(cw_KTV_t * data)
{
return bstr_data(data->val.ptr);
}
static const char * get_type_name(cw_KTV_t *data)
{
return CW_TYPE_IPADDRESS->name;
}
const struct cw_Type cw_type_ipaddress = {
"IPAddress", /* name */
@ -115,7 +119,8 @@ const struct cw_Type cw_type_ipaddress = {
to_str, /* to_str */
from_str, /* from_str */
len, /* len */
data /* data */
data, /* data */
get_type_name
};

View File

@ -85,6 +85,13 @@ static int len ( struct cw_KTV * data ){
return strlen (data->val.str);
}
static const char * get_type_name(cw_KTV_t *data)
{
return CW_TYPE_STR->name;
}
const struct cw_Type cw_type_str = {
"Str", /* name */
del, /* del */
@ -92,5 +99,7 @@ const struct cw_Type cw_type_str = {
get, /* get */
to_str, /* to_str */
from_str, /* from_str */
len /* len */
len, /* len */
NULL, /* data */
get_type_name /* get_type_name */
};

View File

@ -64,6 +64,11 @@ static int len ( struct cw_KTV * data ){
return sizeof(void*);
}
static const char * get_type_name(cw_KTV_t *data)
{
return CW_TYPE_SYSPTR->name;
}
const struct cw_Type cw_type_sysptr = {
"Sysptr", /* name */
del, /* del */
@ -71,5 +76,7 @@ const struct cw_Type cw_type_sysptr = {
get, /* get */
to_str, /* to_str */
from_str, /* from_str */
len /* len */
len, /* len */
NULL, /* data */
get_type_name /* get_type_name */
};

View File

@ -46,12 +46,21 @@ static cw_KTV_t *from_str(cw_KTV_t * data, const char *src)
return data;
}
static const char * get_type_name(cw_KTV_t *data)
{
return CW_TYPE_WORD->name;
}
const struct cw_Type cw_type_word = {
"Word", /* name */
NULL, /* del */
put, /* put */
get, /* get */
to_str, /* to_str */
from_str /* from_str */
from_str, /* from_str */
NULL,
NULL,
get_type_name
};

View File

@ -521,7 +521,7 @@ void cw_dbg_ktv_dump(mavl_t ktv, uint32_t dbglevel,
type = data->type;
type->to_str(data,value,0);
cw_dbg(dbglevel,"%s%s :%s: %s",prefix,data->key,type->name, value);
cw_dbg(dbglevel,"%s%s :%s: %s",prefix,data->key,type->get_type_name(data), value);
}
if (footer != NULL)

View File

@ -41,6 +41,7 @@ struct cw_KTV {
int boolean;
float float_val;
} val;
const void * valguard;
};
typedef struct cw_KTV cw_KTV_t;
@ -84,45 +85,36 @@ struct cw_Type {
int (*len)(cw_KTV_t *);
void *(*data)(cw_KTV_t *);
const char * (*get_type_name)(cw_KTV_t*);
int (*cast)(cw_KTV_t *);
};
typedef struct cw_Type cw_Type_t;
struct cw_KTVStruct {
const struct cw_Type * type;
const char * key;
int len;
int position;
};
enum cw_Types {
CW_BYTE,
CW_WORD,
CW_DWORD,
CW_STR
};
struct cw_KTVValRange {
int min,max;
const char * name;
};
typedef struct cw_KTVValRange cw_KTVValRange_t;
struct cw_KTVData {
int position;
uint8_t type;
const char *key;
int len;
struct cw_KTVValRange *ranges;
};
typedef struct cw_KTVData cw_KTVData_t;
struct cw_KTVStruct {
const struct cw_Type * type;
const char * key;
int len;
int position;
const void * valguard;
};
typedef struct cw_KTVStruct cw_KTVStruct_t;
#define CW_KTVSTRUCT_L16 -2
#define CW_KTVSTRUCT_L8 -3
@ -169,15 +161,18 @@ extern const struct cw_Type cw_type_bool;
/*
void cw_kvstore_mavl_delete(const void *data);
*/
cw_KTV_t *cw_ktv_add(mavl_t kvstore, const char *key, const struct cw_Type *type,
cw_KTV_t *cw_ktv_add(mavl_t kvstore, const char *key, const struct cw_Type *type,
const void * valguard,
const uint8_t * data, int len);
void cw_ktv_del_sub(mavl_t ktvstore, const char *basekey);
cw_KTV_t * cw_ktv_replace(mavl_t kvtstore, const char *key, const struct cw_Type *type,
const void * valguard,
const uint8_t * data, int len);
const char * cw_ktv_add_from_str(mavl_t kvtstore, const char *key, const struct cw_Type *type,
const char * cw_ktv_add_from_str(mavl_t kvtstore, const char *key, const struct cw_Type *type,
const void * valguard,
const char * str);
int cw_ktv_mavlcmp(const void *v1, const void *v2);