0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 #ifndef __UBF_INT_H
0035 #define __UBF_INT_H
0036
0037 #ifdef __cplusplus
0038 extern "C" {
0039 #endif
0040
0041
0042
0043 #include <ubf.h>
0044 #include <string.h>
0045 #include <stdio.h>
0046 #include <exhash.h>
0047 #include <ndrstandard.h>
0048 #include <ndrx_config.h>
0049 #include <fdatatype.h>
0050 #include <nstdutil.h>
0051
0052
0053
0054 #define UBF_BINARY_SEARCH_OK(bfldid) ((bfldid>>EFFECTIVE_BITS) < BFLD_STRING || (bfldid>>EFFECTIVE_BITS)==BFLD_PTR)
0055
0056
0057 #define UBF_BINSRCH_GET_LAST_NONE 0x00
0058 #define UBF_BINSRCH_GET_LAST 0x01
0059 #define UBF_BINSRCH_GET_LAST_CHG 0x02
0060
0061 #define UBF_CMP_MODE_STD 0x00000001
0062
0063
0064 #define UBFDEBUG(x) do { fprintf(stderr, x); } while(0);
0065
0066 #define UBFDEBUGLEV "UBF_E_"
0067
0068
0069
0070 #ifdef UBF_16
0071
0072
0073 #define EFFECTIVE_BITS ((sizeof(_UBF_INT)-2)*8-3)
0074
0075
0076
0077 #define EFFECTIVE_BITS_MASK 0x1fff
0078
0079 #else
0080
0081
0082
0083 #define EFFECTIVE_BITS 25
0084
0085 #define EFFECTIVE_BITS_MASK 0x1FFFFFF
0086
0087 #endif
0088
0089 #define BFLD_SHORT_SIZE sizeof(unsigned short)
0090 #define BFLD_LONG_SIZE sizeof(long)
0091 #define BFLD_CHAR_SIZE sizeof(char)
0092 #define BFLD_FLOAT_SIZE sizeof(float)
0093 #define BFLD_DOUBLE_SIZE sizeof(double)
0094 #define BFLD_STRING_SIZE 0
0095 #define BFLD_CARRAY_SIZE 0
0096 #define BFLD_INT_SIZE sizeof(int)
0097 #define BFLD_PTR_SIZE sizeof(char *)
0098 #define BFLD_UBF_SIZE sizeof(UBF_ubf_t)
0099
0100 #define BFLD_VIEW_SIZE (sizeof(UBF_view_t) - EX_ALIGNMENT_BYTES)
0101
0102
0103
0104
0105
0106 #define VALIDATE_MODE_NO_FLD 0x1
0107
0108 #define IS_TYPE_INVALID(T) (T<BFLD_MIN || T>BFLD_MAX)
0109
0110
0111
0112
0113
0114 #define IS_TYPE_COMPLEX(T) (BFLD_UBF==T||BFLD_VIEW==T)
0115
0116 #define CHECK_ALIGN(p, p_ub, hdr) (((long)p) > ((long)p_ub+hdr->bytes_used))
0117
0118
0119
0120
0121 #define PROJ_MODE_PROJ 0
0122 #define PROJ_MODE_DELETE 1
0123 #define PROJ_MODE_DELALL 2
0124
0125
0126
0127
0128 #define CB_MODE_DEFAULT 0
0129 #define CB_MODE_TEMPSPACE 1
0130 #define CB_MODE_ALLOC 2
0131
0132 #define DOUBLE_EQUAL 0.000001
0133 #define FLOAT_EQUAL 0.00001
0134
0135 #define DOUBLE_RESOLUTION 6
0136 #define FLOAT_RESOLUTION 5
0137
0138
0139 #define UBF_EOF(HDR, FIELD) ((char *)FIELD >= (((char *)HDR) + HDR->bytes_used))
0140
0141
0142
0143
0144 #define NDRX_USYSBUF_MALLOC_WERR_OUT(__buf, __p_bufsz, __ret) \
0145 {\
0146 int __buf_size__ = NDRX_MSGSIZEMAX;\
0147 __buf = NDRX_FPMALLOC(__buf_size__, NDRX_FPSYSBUF);\
0148 if (NULL==__buf)\
0149 {\
0150 int err = errno;\
0151 ndrx_Bset_error_fmt(BMALLOC, "%s: failed to allocate sysbuf: %s", __func__, strerror(errno));\
0152 NDRX_LOG(log_error, "%s: failed to allocate sysbuf: %s", __func__, strerror(errno));\
0153 userlog("%s: failed to allocate sysbuf: %s", __func__, strerror(errno));\
0154 errno = err;\
0155 EXFAIL_OUT(__ret);\
0156 }\
0157 __p_bufsz = __buf_size__;\
0158 }
0159
0160
0161 #define DEFAULT_ALIGN EX_ALIGNMENT_BYTES
0162
0163
0164 #if EX_ALIGNMENT_BYTES == 8
0165
0166 #define ALIGNED_SIZE(DSIZE) \
0167 ((sizeof(BFLDID)*2 + DSIZE + DEFAULT_ALIGN - 1) / DEFAULT_ALIGN * DEFAULT_ALIGN)
0168 #else
0169
0170 #define ALIGNED_SIZE(DSIZE) \
0171 ((sizeof(BFLDID) + DSIZE + DEFAULT_ALIGN -1 ) / DEFAULT_ALIGN * DEFAULT_ALIGN)
0172 #endif
0173
0174
0175
0176
0177
0178 #define ALIGNED_SIZE_T(TNAME, DSIZE) \
0179 ((sizeof(TNAME) + DSIZE + DEFAULT_ALIGN -1 ) / DEFAULT_ALIGN * DEFAULT_ALIGN)
0180
0181
0182
0183
0184
0185 #define ALIGNED_GEN(DSIZE) \
0186 ((DSIZE + DEFAULT_ALIGN -1 ) / DEFAULT_ALIGN * DEFAULT_ALIGN)
0187
0188 #define VIEW_ENTRY if (EXSUCCEED!=ndrx_view_init()) {EXFAIL_OUT(ret);}
0189 #define VIEW_ENTRY2 if (EXSUCCEED!=ndrx_view_init()) {ret=-2; goto out;}
0190 #define VIEW_ENTRY3 if (EXSUCCEED!=ndrx_view_init()) {return EXFAIL;}
0191
0192
0193
0194
0195
0196
0197 typedef struct
0198 {
0199 ndrx_growlist_t fldidocc;
0200 char *cname;
0201 BFLDOCC cname_occ;
0202
0203
0204 char *fldnm;
0205
0206
0207 BFLDID bfldid;
0208 BFLDOCC occ;
0209 int nrflds;
0210
0211 } ndrx_ubf_rfldid_t;
0212
0213
0214
0215
0216
0217 extern NDRX_API int ndrx_get_num_from_hex(char c);
0218 extern NDRX_API int ndrx_normalize_string(char *str, int *out_len);
0219
0220 extern NDRX_API void ndrx_build_printable_string(char *out, int out_len, char *in,
0221 int in_len);
0222
0223 extern NDRX_API int ndrx_get_nonprintable_char_tmpspace(char *str, int len);
0224
0225 extern char * get_fld_loc_binary_search(UBFH * p_ub, BFLDID bfldid, BFLDOCC occ,
0226 dtype_str_t **fld_dtype, int get_last, int *last_occ,
0227 char ** last_checked, char ** last_match);
0228 extern char * get_fld_loc(UBFH * p_ub, BFLDID bfldid, BFLDOCC occ,
0229 dtype_str_t **fld_dtype,
0230 char ** last_checked,
0231 char ** last_matched,
0232 int *last_occ,
0233 Bfld_loc_info_t *last_start);
0234 extern void ubf_cache_shift(UBFH *p_ub, BFLDID fldid, int size_diff);
0235 extern void ubf_cache_dump(UBFH *p_ub, char *msg);
0236 extern int ubf_cache_update(UBFH *p_ub);
0237
0238 extern int ndrx_Bget (UBFH * p_ub, BFLDID bfldid, BFLDOCC occ,
0239 char * buf, BFLDLEN * buflen);
0240 extern int ndrx_Badd (UBFH *p_ub, BFLDID bfldid, char *buf, BFLDLEN len,
0241 Bfld_loc_info_t *last_start,
0242 Bfld_loc_info_t *next_fld);
0243 extern int ndrx_Baddfast (UBFH *p_ub, BFLDID bfldid, char *buf, BFLDLEN len,
0244 Bfld_loc_info_t *next_fld);
0245 extern int ndrx_Bchg (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ,
0246 char * buf, BFLDLEN len, Bfld_loc_info_t *last_start,
0247 int upd_only);
0248 extern int have_buffer_size(UBFH *p_ub, int add_size, int set_err);
0249 extern int validate_entry(UBFH *p_ub, BFLDID bfldid, BFLDOCC occ, int mode);
0250 extern char * ndrx_Bfind (UBFH * p_ub, BFLDID bfldid,
0251 BFLDOCC occ, BFLDLEN * len,
0252 char **p_fld);
0253 extern BFLDOCC ndrx_Boccur (UBFH * p_ub, BFLDID bfldid);
0254 extern int _Bpres (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ);
0255
0256 extern char * ndrx_CBfind (UBFH *p_ub, BFLDID bfldid,
0257 BFLDOCC occ, BFLDLEN * len, int usrtype, int mode,
0258 int extralen);
0259 extern char * ndrx_Bgetalloc (UBFH * p_ub,
0260 BFLDID bfldid, BFLDOCC occ, BFLDLEN *extralen);
0261 extern char * ndrx_Bfindlast (UBFH * p_ub, BFLDID bfldid,
0262 BFLDOCC *occ,
0263 BFLDLEN * len);
0264 extern char * ndrx_Btypcvt (BFLDLEN * to_len, int to_type,
0265 char *from_buf, int from_type, BFLDLEN from_len);
0266
0267 extern int ndrx_Bfprint (UBFH *p_ub, FILE * outf,
0268 ndrx_plugin_tplogprintubf_hook_t p_writef, void *dataptr1, int level);
0269
0270 extern int ndrx_Bnext(Bnext_state_t *state, UBFH *p_ub, BFLDID *bfldid,
0271 BFLDOCC *occ, char *buf, BFLDLEN *len,
0272 char **d_ptr);
0273 extern int ndrx_Bproj (UBFH * p_ub, BFLDID * fldlist,
0274 int mode, int *processed);
0275
0276 extern int ndrx_Bprojcpy (UBFH * p_ub_dst, UBFH * p_ub_src,
0277 BFLDID * fldlist);
0278 extern int ndrx_Bupdate (UBFH *p_ub_dst, UBFH *p_ub_src);
0279 extern int ndrx_Bconcat (UBFH *p_ub_dst, UBFH *p_ub_src);
0280 extern BFLDOCC ndrx_Bfindocc (UBFH *p_ub, BFLDID bfldid, char * buf, BFLDLEN len);
0281 extern BFLDOCC ndrx_CBfindocc (UBFH *p_ub, BFLDID bfldid, char * value, BFLDLEN len, int usrtype);
0282 extern int ndrx_Bgetlast (UBFH *p_ub, BFLDID bfldid,
0283 BFLDOCC *occ, char *buf, BFLDLEN *len);
0284 extern int ndrx_Bextread (UBFH * p_ub, FILE *inf,
0285 long (*p_readf)(char *buffer, long bufsz, void *dataptr1), void *dataptr1,
0286 int level, char **p_readbuf_buffered);
0287 extern void ndrx_Bboolpr (char * tree, FILE *outf,
0288 int (*p_writef)(char *buffer, long datalen, void *dataptr1), void *dataptr1);
0289 extern int ndrx_Bread (UBFH * p_ub, FILE * inf,
0290 long (*p_readf)(char *buffer, long bufsz, void *dataptr1), void *dataptr1);
0291 extern int ndrx_Bwrite (UBFH *p_ub, FILE * outf,
0292 long (*p_writef)(char *buffer, long bufsz, void *dataptr1), void *dataptr1);
0293 extern int ndrx_Blen (UBFH *p_ub, BFLDID bfldid, BFLDOCC occ);
0294 extern int ndrx_Bboolsetcbf2 (char *funcname, void *funcptr, int functype);
0295
0296 extern int ndrx_Bcmp(UBFH *p_ubf1, UBFH *p_ubf2);
0297 extern int ndrx_Bsubset(UBFH *p_ubf1, UBFH *p_ubf2, int level);
0298
0299 extern BFLDOCC ndrx_Bnum(UBFH *p_ub);
0300
0301 extern int ndrx_Bjoin(UBFH *dest, UBFH *src);
0302 extern int ndrx_Bojoin(UBFH *dest, UBFH *src);
0303
0304 extern UBFH * ndrx_Balloc (BFLDOCC f, BFLDLEN v, long len_set);
0305 extern UBFH * ndrx_Brealloc (UBFH *p_ub, BFLDOCC f, BFLDLEN v, long len_set);
0306
0307 extern long ndrx_Bneeded(BFLDOCC nrfields, BFLDLEN totsize);
0308
0309
0310 extern NDRX_API int ndrx_cmp_ptr (struct dtype_ext1 *t, char *val1, BFLDLEN len1,
0311 char *val2, BFLDLEN len2, long mode);
0312 extern NDRX_API void ndrx_dump_ptr (struct dtype_ext1 *t, char *text, char *data, int *len);
0313
0314
0315
0316 extern NDRX_API int ndrx_get_fb_ubf_size(dtype_str_t *t, char *fb, int *payload_size);
0317 extern NDRX_API int ndrx_put_data_ubf(dtype_str_t *t, char *fb, BFLDID bfldid,
0318 char *data, int len);
0319 extern NDRX_API int ndrx_get_d_size_ubf (struct dtype_str *t, char *data,
0320 int len, int *payload_size);
0321 extern NDRX_API int ndrx_get_data_ubf (struct dtype_str *t, char *fb, char *buf, int *len);
0322 extern NDRX_API int ndrx_g_ubf_empty(struct dtype_ext1* t);
0323 extern NDRX_API int ndrx_put_empty_ubf(struct dtype_ext1* t, char *fb, BFLDID bfldid);
0324 extern NDRX_API void ndrx_dump_ubf(struct dtype_ext1 *t, char *text, char *data, int *len);
0325 extern NDRX_API int ndrx_cmp_ubf (struct dtype_ext1 *t, char *val1, BFLDLEN len1,
0326 char *val2, BFLDLEN len2, long mode);
0327 extern NDRX_API int ndrx_cmp_view (struct dtype_ext1 *t, char *val1, BFLDLEN len1,
0328 char *val2, BFLDLEN len2, long mode);
0329 extern NDRX_API char *ndrx_talloc_view (struct dtype_ext1 *t, int *len);
0330
0331
0332
0333
0334 extern NDRX_API int ndrx_get_fb_view_size(dtype_str_t *t, char *fb, int *payload_size);
0335 extern NDRX_API int ndrx_put_data_view(dtype_str_t *t, char *fb, BFLDID bfldid,
0336 char *data, int len);
0337 extern NDRX_API int ndrx_get_d_size_view (struct dtype_str *t, char *data,
0338 int len, int *payload_size);
0339 extern NDRX_API int ndrx_get_data_view (struct dtype_str *t, char *fb, char *buf, int *len);
0340 extern NDRX_API int ndrx_g_view_empty(struct dtype_ext1* t);
0341 extern NDRX_API int ndrx_put_empty_view(struct dtype_ext1* t, char *fb, BFLDID bfldid);
0342 extern NDRX_API void ndrx_dump_view(struct dtype_ext1 *t, char *text, char *data, int *len);
0343 extern NDRX_API int ndrx_cmp_view (struct dtype_ext1 *t, char *val1, BFLDLEN len1,
0344 char *val2, BFLDLEN len2, long mode);
0345 extern NDRX_API char *ndrx_talloc_view (struct dtype_ext1 *t, int *len);
0346
0347 extern NDRX_API char* ndrx_prep_viewp (struct dtype_ext1 *t,
0348 ndrx_ubf_tls_bufval_t *storage, char *data);
0349
0350
0351
0352 extern NDRX_API int ndrx_Bgetr (UBFH * p_ub, BFLDID *fldidocc,
0353 char * buf, BFLDLEN * buflen);
0354
0355
0356 extern NDRX_API int ndrx_Bpresr (UBFH *p_ub, BFLDID *fldidocc);
0357
0358 extern NDRX_API char * ndrx_CBgetallocr (UBFH *p_ub, BFLDID *fldidocc, int usrtype, BFLDLEN *extralen);
0359
0360 extern NDRX_API int ndrx_CBgetr (UBFH * p_ub, BFLDID *fldidocc,
0361 char * buf, BFLDLEN * len, int usrtype);
0362 extern NDRX_API char* ndrx_Bfindr (UBFH *p_ub, BFLDID *fldidocc, BFLDLEN *p_len);
0363
0364 extern NDRX_API char* ndrx_CBfindr (UBFH *p_ub, BFLDID *fldidocc, BFLDLEN *p_len, int usrtype);
0365
0366 extern NDRX_API int ndrx_Bpresr (UBFH *p_ub, BFLDID *fldidocc);
0367
0368 extern NDRX_API int ndrx_Bvnullr(UBFH *p_ub, BFLDID *fldidocc, char *cname, BFLDOCC occ);
0369 extern NDRX_API int ndrx_CBvgetr(UBFH *p_ub, BFLDID *fldidocc, char *cname, BFLDOCC occ,
0370 char *buf, BFLDLEN *len, int usrtype, long flags);
0371
0372 extern NDRX_API char *ndrx_CBvgetallocr(UBFH *p_ub, BFLDID *fldidocc, char *cname, BFLDOCC occ,
0373 int usrtype, long flags, BFLDLEN *extralen);
0374
0375 extern NDRX_API void ndrx_ubf_rfldid_free(ndrx_ubf_rfldid_t *rfldid);
0376 extern NDRX_API int ndrx_ubf_rfldid_parse(char *rfldidstr, ndrx_ubf_rfldid_t *rfldid);
0377
0378 #ifdef __cplusplus
0379 }
0380 #endif
0381
0382 #endif
0383