本文整理汇总了C++中check_prefix函数的典型用法代码示例。如果您正苦于以下问题:C++ check_prefix函数的具体用法?C++ check_prefix怎么用?C++ check_prefix使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了check_prefix函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: read_map
static int
read_map(avro_reader_t reader, const avro_encoding_t * enc,
avro_consumer_t *consumer, void *ud)
{
int rval;
int64_t i; /* index within the current block */
int64_t index = 0; /* index within the entire array */
int64_t block_count;
int64_t block_size;
check_prefix(rval, enc->read_long(reader, &block_count),
"Cannot read map block count: ");
check(rval, avro_consumer_call(consumer, map_start_block,
1, block_count, ud));
while (block_count != 0) {
if (block_count < 0) {
block_count = block_count * -1;
check_prefix(rval, enc->read_long(reader, &block_size),
"Cannot read map block size: ");
}
for (i = 0; i < block_count; i++, index++) {
char *key;
int64_t key_size;
avro_consumer_t *element_consumer = NULL;
void *element_ud = NULL;
check_prefix(rval, enc->read_string(reader, &key, &key_size),
"Cannot read map key: ");
rval = avro_consumer_call(consumer, map_element,
index, key,
&element_consumer, &element_ud,
ud);
if (rval) {
avro_free(key, key_size);
return rval;
}
rval = avro_consume_binary(reader, element_consumer, element_ud);
if (rval) {
avro_free(key, key_size);
return rval;
}
avro_free(key, key_size);
}
check_prefix(rval, enc->read_long(reader, &block_count),
"Cannot read map block count: ");
check(rval, avro_consumer_call(consumer, map_start_block,
0, block_count, ud));
}
return 0;
}
开发者ID:Adimpression,项目名称:avro-mobile,代码行数:57,代码来源:consume-binary.c
示例2: check_filenames
static int check_filenames(git_patch_parsed *patch)
{
const char *prefixed_new, *prefixed_old;
size_t old_prefixlen = 0, new_prefixlen = 0;
bool added = (patch->base.delta->status == GIT_DELTA_ADDED);
bool deleted = (patch->base.delta->status == GIT_DELTA_DELETED);
if (patch->old_path && !patch->new_path)
return git_parse_err("missing new path");
if (!patch->old_path && patch->new_path)
return git_parse_err("missing old path");
/* Ensure (non-renamed) paths match */
if (check_header_names(
patch->header_old_path, patch->old_path, "old", added) < 0 ||
check_header_names(
patch->header_new_path, patch->new_path, "new", deleted) < 0)
return -1;
prefixed_old = (!added && patch->old_path) ? patch->old_path :
patch->header_old_path;
prefixed_new = (!deleted && patch->new_path) ? patch->new_path :
patch->header_new_path;
if (check_prefix(
&patch->old_prefix, &old_prefixlen, patch, prefixed_old) < 0 ||
check_prefix(
&patch->new_prefix, &new_prefixlen, patch, prefixed_new) < 0)
return -1;
/* Prefer the rename filenames as they are unambiguous and unprefixed */
if (patch->rename_old_path)
patch->base.delta->old_file.path = patch->rename_old_path;
else
patch->base.delta->old_file.path = prefixed_old + old_prefixlen;
if (patch->rename_new_path)
patch->base.delta->new_file.path = patch->rename_new_path;
else
patch->base.delta->new_file.path = prefixed_new + new_prefixlen;
if (!patch->base.delta->old_file.path &&
!patch->base.delta->new_file.path)
return git_parse_err("git diff header lacks old / new paths");
return 0;
}
开发者ID:nelhage,项目名称:libgit2,代码行数:48,代码来源:patch_parse.c
示例3: art_search
/**
* Searches for a value in the ART tree
* @arg t The tree
* @arg key The key
* @arg key_len The length of the key
* @return NULL if the item was not found, otherwise
* the value pointer is returned.
*/
void* art_search(const art_tree *t, const unsigned char *key, int key_len) {
art_node **child;
art_node *n = t->root;
int prefix_len, depth = 0;
while (n) {
// Might be a leaf
if (IS_LEAF(n)) {
n = (art_node*)LEAF_RAW(n);
// Check if the expanded path matches
if (!leaf_matches((art_leaf*)n, key, key_len, depth)) {
return ((art_leaf*)n)->value;
}
return NULL;
}
// Bail if the prefix does not match
if (n->partial_len) {
prefix_len = check_prefix(n, key, key_len, depth);
if (prefix_len != min(MAX_PREFIX_LEN, n->partial_len))
return NULL;
depth = depth + n->partial_len;
}
// Recursively search
child = find_child(n, key[depth]);
n = (child) ? *child : NULL;
depth++;
}
return NULL;
}
开发者ID:biokoda,项目名称:actordb_qdrv,代码行数:38,代码来源:art.c
示例4: read_array
static int
read_array(avro_reader_t reader, const avro_encoding_t * enc,
avro_consumer_t *consumer, void *ud)
{
int rval;
int64_t i; /* index within the current block */
int64_t index = 0; /* index within the entire array */
int64_t block_count;
int64_t block_size;
check_prefix(rval, enc->read_long(reader, &block_count),
"Cannot read array block count: ");
check(rval, avro_consumer_call(consumer, array_start_block,
1, block_count, ud));
while (block_count != 0) {
if (block_count < 0) {
block_count = block_count * -1;
check_prefix(rval, enc->read_long(reader, &block_size),
"Cannot read array block size: ");
}
for (i = 0; i < block_count; i++, index++) {
avro_consumer_t *element_consumer = NULL;
void *element_ud = NULL;
check(rval,
avro_consumer_call(consumer, array_element,
index, &element_consumer, &element_ud,
ud));
check(rval, avro_consume_binary(reader, element_consumer, element_ud));
}
check_prefix(rval, enc->read_long(reader, &block_count),
"Cannot read array block count: ");
check(rval, avro_consumer_call(consumer, array_start_block,
0, block_count, ud));
}
return 0;
}
开发者ID:Adimpression,项目名称:avro-mobile,代码行数:42,代码来源:consume-binary.c
示例5: javautil_media_mime_to_type
/**
* Convert mime string to media type constants value
*/
static javacall_media_type javautil_media_mime_to_type(const javacall_utf16* mime, long length)
{
javacall_media_type ret = JAVACALL_END_OF_TYPE;
char* cMime = MALLOC(length + 1);
if (cMime) {
int wres = WideCharToMultiByte(CP_ACP, 0, mime, length,
cMime, length + 1, NULL, NULL);
if (0 != wres) {
cMime[length] = 0;
JAVA_DEBUG_PRINT1("javautil_media_mime_to_type %s\n", cMime);
if (0 == strcmp(JAVACALL_AUDIO_MIDI_MIME, cMime)) {
ret = JAVACALL_AUDIO_MIDI;
} else if (0 == strcmp(JAVACALL_AUDIO_MIDI_MIME_2, cMime)) {
ret = JAVACALL_AUDIO_MIDI;
} else if (0 == strcmp(JAVACALL_AUDIO_SP_MIDI_MIME, cMime)) {
ret = JAVACALL_AUDIO_MIDI;
} else if (0 == strcmp(JAVACALL_AUDIO_WAV_MIME, cMime)) {
ret = JAVACALL_AUDIO_WAV;
} else if (0 == strcmp(JAVACALL_AUDIO_MP3_MIME, cMime)) {
ret = JAVACALL_AUDIO_MP3;
} else if (0 == strcmp(JAVACALL_AUDIO_TONE_MIME, cMime)) {
ret = JAVACALL_AUDIO_TONE;
} else if (0 == strcmp(JAVACALL_DEVICE_TONE_MIME, cMime)) {
ret = JAVACALL_AUDIO_TONE;
} else if (0 == strcmp(JAVACALL_DEVICE_MIDI_MIME, cMime)) {
ret = JAVACALL_INTERACTIVE_MIDI;
} else if (0 == strcmp(JAVACALL_VIDEO_MPEG4_MIME_2, cMime)) {
ret = JAVACALL_VIDEO_MPEG4;
} else if (0 == check_prefix(JAVACALL_CAPTURE_VIDEO_MIME, cMime)) {
ret = JAVACALL_CAPTURE_VIDEO;
} else if (0 == check_prefix(JAVACALL_CAPTURE_AUDIO_MIME, cMime)) {
ret = JAVACALL_CAPTURE_AUDIO;
}
}
FREE(cMime);
}
return ret;
}
开发者ID:sfsy1989,项目名称:j2me,代码行数:45,代码来源:multimedia.c
示例6: read_enum
static int
read_enum(avro_reader_t reader, const avro_encoding_t * enc,
avro_consumer_t *consumer, void *ud)
{
int rval;
int64_t index;
check_prefix(rval, enc->read_long(reader, &index),
"Cannot read enum value: ");
return avro_consumer_call(consumer, enum_value, index, ud);
}
开发者ID:Adimpression,项目名称:avro-mobile,代码行数:11,代码来源:consume-binary.c
示例7: _handle_file_series_syscalls
/**
* Handle syscalls that take a path as the first parameter
*/
static void _handle_file_series_syscalls(pid_t pid, char* syscall, int flag, uid_t uid, gid_t gid)
{
// TODO
tracee_ptr_t path_ptr = (tracee_ptr_t) ptrace_get_syscall_arg(pid, 0);
int len = ptrace_strlen(pid, path_ptr);
char path[len + 1];
ptrace_read_data(pid, path, path_ptr, len + 1);
#if 0
int nth_dir;
if ((flag & SANDBOX_CHROOT_PRIVATE_FOLDER) && (nth_dir = check_prefix_dir(path,SANDBOX_PATH_INTERNAL)) > 0) {
//internal file storage sandbox
char* sub_dir = get_nth_dir(path, nth_dir + 2);
if (!check_prefix(sub_dir, SANDBOX_PATH_INTERNAL_EXCLUDE)) {
char new_path[len + 1];
//replace dir in path with LINK_PREFIX
char* second_dir = get_nth_dir(path, nth_dir + 1);
strcpy(new_path, SANDBOX_LINK);
strcat(new_path, second_dir);
ptrace_write_data(pid, new_path, path_ptr, len + 1);
// create require folder
create_nth_dir(new_path, 3, uid, gid, 0751);
LOGD("pid %d %s: %s ==> new path: %s", pid, syscall, path, new_path);
// return from open syscall, reset the path
pid = waitpid(pid, NULL, __WALL);
ptrace_write_data(pid, path, path_ptr, len + 1);
long result = ptrace_get_syscall_arg(pid, 0);
LOGD(" = %ld\n", result);
return;
}
/* } else if ((flag & SANDBOX_FLAG) && FILE_SANDBOX_ENABLED && (nth_dir = check_prefix_dir(path,SANDBOX_PATH_EXTERNAL)) > 0) { */
/* //external file storage sandbox */
/* char new_path[len + 1]; */
/* //replace dir in path with LINK_PREFIX */
/* char* second_dir = get_nth_dir(path, nth_dir + 1); */
/* strcpy(new_path, SANDBOX_LINK); */
/* strcat(new_path, second_dir); */
/* ptrace_write_data(pid, new_path, arg0, len + 1); */
/* LOGD("pid %d %s: %s\n ==> new path: %s\n", pid, syscall, path, new_path); */
/* // return from open syscall, reset the path */
/* pid = waitpid(pid, NULL, __WALL); */
/* ptrace_write_data(pid, path, arg0, len + 1); */
/* return; */
}
#endif
LOGD("[%d] %s(%s, ...)\n", pid, syscall, path);
}
开发者ID:mingyuan-xia,项目名称:AppBox,代码行数:56,代码来源:sandbox.c
示例8: heim_digest_parse_challenge
int
heim_digest_parse_challenge(heim_digest_t context, const char *challenge)
{
struct md5_value *val = NULL;
int ret, type;
challenge = check_prefix(context, challenge);
ret = parse_values(challenge, &val);
if (ret)
goto out;
ret = 1;
context->serverNonce = values_find(&val, "nonce");
if (context->serverNonce == NULL) goto out;
context->serverRealm = values_find(&val, "realm");
if (context->serverRealm == NULL) goto out;
/* check alg */
context->serverAlgorithm = values_find(&val, "algorithm");
if (context->serverAlgorithm == NULL || strcasecmp(context->serverAlgorithm, "md5") == 0) {
type = HEIM_DIGEST_TYPE_RFC2617_MD5;
} else if (strcasecmp(context->serverAlgorithm, "md5-sess") == 0) {
type = HEIM_DIGEST_TYPE_RFC2617_OR_RFC2831;
} else {
goto out;
}
context->serverQOP = values_find(&val, "qop");
if (context->serverQOP == NULL)
type = HEIM_DIGEST_TYPE_RFC2069;
context->serverOpaque = values_find(&val, "opaque");
if (context->type != HEIM_DIGEST_TYPE_AUTO && (context->type & type) == 0)
goto out;
else if (context->type == HEIM_DIGEST_TYPE_AUTO)
context->type = type;
ret = 0;
out:
free_values(val);
if (ret)
clear_context(context);
return ret;
}
开发者ID:alfintatorkace,项目名称:osx-10.9-opensource,代码行数:49,代码来源:digest.c
示例9: dump_channels
static int dump_channels(const char *dev_dir_name)
{
DIR *dp;
const struct dirent *ent;
dp = opendir(dev_dir_name);
if (!dp)
return -errno;
while (ent = readdir(dp), ent)
if (check_prefix(ent->d_name, "in_") &&
check_postfix(ent->d_name, "_raw"))
printf(" %-10s\n", ent->d_name);
return (closedir(dp) == -1) ? -errno : 0;
}
开发者ID:020gzh,项目名称:linux,代码行数:16,代码来源:lsiio.c
示例10: read_union
static int
read_union(avro_reader_t reader, const avro_encoding_t * enc,
avro_consumer_t *consumer, void *ud)
{
int rval;
int64_t discriminant;
avro_consumer_t *branch_consumer = NULL;
void *branch_ud = NULL;
check_prefix(rval, enc->read_long(reader, &discriminant),
"Cannot read union discriminant: ");
check(rval, avro_consumer_call(consumer, union_branch,
discriminant,
&branch_consumer, &branch_ud, ud));
return avro_consume_binary(reader, branch_consumer, branch_ud);
}
开发者ID:Adimpression,项目名称:avro-mobile,代码行数:16,代码来源:consume-binary.c
示例11: rpl_set_prefix
/*---------------------------------------------------------------------------*/
int
rpl_set_prefix(rpl_dag_t *dag, uip_ipaddr_t *prefix, unsigned len)
{
if(len > 128) {
return 0;
}
memset(&dag->prefix_info.prefix, 0, sizeof(dag->prefix_info.prefix));
memcpy(&dag->prefix_info.prefix, prefix, (len + 7) / 8);
dag->prefix_info.length = len;
dag->prefix_info.flags = UIP_ND6_RA_FLAG_AUTONOMOUS;
PRINTF("RPL: Prefix set - will announce this in DIOs\n");
/* Autoconfigure an address if this node does not already have an address
with this prefix. */
check_prefix(NULL, &dag->prefix_info);
return 1;
}
开发者ID:Johnyren,项目名称:orpl,代码行数:18,代码来源:rpl-dag.c
示例12: status
bool simulator_symext::is_spurious(
const predicatest &predicates,
const abstract_modelt &abstract_model,
abstract_counterexamplet &abstract_counterexample,
concrete_counterexamplet &concrete_counterexample,
fail_infot &fail_info)
{
status("Simulating abstract counterexample on concrete program");
#if 0
std::cout << "***********************************" << std::endl;
std::cout << abstract_counterexample << std::endl;
#endif
if(path_slicing)
{
#if 0 // buggy right now
status("Path slicing");
path_slicer(
ns,
abstract_model.goto_functions,
abstract_counterexample);
#endif
}
#if 0
std::cout << "***********************************" << std::endl;
std::cout << abstract_counterexample << std::endl;
std::cout << "***********************************" << std::endl;
#endif
if(!check_prefix(
predicates,
abstract_model,
abstract_counterexample,
concrete_counterexample,
fail_info))
{
status("Simulation successful");
return false;
}
return true;
}
开发者ID:olivo,项目名称:BP,代码行数:44,代码来源:simulator_symex.cpp
示例13: recursive_delete
static art_leaf* recursive_delete(art_node *n, art_node **ref, const unsigned char *key, int key_len, int depth) {
// Search terminated
if (!n) return NULL;
// Handle hitting a leaf node
if (IS_LEAF(n)) {
art_leaf *l = LEAF_RAW(n);
if (!leaf_matches(l, key, key_len, depth)) {
*ref = NULL;
return l;
}
return NULL;
}
// Bail if the prefix does not match
if (n->partial_len) {
int prefix_len = check_prefix(n, key, key_len, depth);
if (prefix_len != min(MAX_PREFIX_LEN, n->partial_len)) {
return NULL;
}
depth = depth + n->partial_len;
}
// Find child node
art_node **child = find_child(n, key[depth]);
if (!child) return NULL;
// If the child is leaf, delete from this node
if (IS_LEAF(*child)) {
art_leaf *l = LEAF_RAW(*child);
if (!leaf_matches(l, key, key_len, depth)) {
remove_child(n, ref, key[depth], child);
return l;
}
return NULL;
// Recurse
} else {
return recursive_delete(*child, child, key, key_len, depth+1);
}
}
开发者ID:biokoda,项目名称:actordb_qdrv,代码行数:41,代码来源:art.c
示例14: nms_keyfile_utils_should_ignore_file
gboolean
nms_keyfile_utils_should_ignore_file (const char *filename)
{
gs_free char *base = NULL;
g_return_val_if_fail (filename != NULL, TRUE);
base = g_path_get_basename (filename);
g_return_val_if_fail (base != NULL, TRUE);
/* Ignore hidden and backup files */
/* should_ignore_file() must mirror escape_filename() */
if (check_prefix (base, ".") || check_suffix (base, "~"))
return TRUE;
/* Ignore temporary files */
if (check_mkstemp_suffix (base))
return TRUE;
/* Ignore 802.1x certificates and keys */
if (check_suffix (base, PEM_TAG) || check_suffix (base, DER_TAG))
return TRUE;
return FALSE;
}
开发者ID:NetworkManager,项目名称:NetworkManager,代码行数:23,代码来源:nms-keyfile-utils.c
示例15: rpl_free_dag
/*---------------------------------------------------------------------------*/
void
rpl_free_dag(rpl_dag_t *dag)
{
if(dag->joined) {
PRINTF("RPL: Leaving the DAG ");
PRINT6ADDR(&dag->dag_id);
PRINTF("\n");
dag->joined = 0;
/* Remove routes installed by DAOs. */
rpl_remove_routes(dag);
/* TODO: Should probably be another option for PREFIX handling in RPL */
#if !CONF_6LOWPAN_ND
/* Remove autoconfigured address */
if((dag->prefix_info.flags & UIP_ND6_RA_FLAG_AUTONOMOUS)) {
check_prefix(&dag->prefix_info, NULL);
}
#endif /* !CONF_6LOWPAN_ND */
remove_parents(dag, 0);
}
dag->used = 0;
}
开发者ID:johangas,项目名称:thesis,代码行数:25,代码来源:rpl-dag.c
示例16: nms_keyfile_utils_escape_filename
char *
nms_keyfile_utils_escape_filename (const char *filename)
{
GString *str;
const char *f = filename;
const char ESCAPE_CHAR = '*';
/* keyfile used to escape with '*', do not change that behavior.
* But for newly added escapings, use '_' instead. */
const char ESCAPE_CHAR2 = '_';
g_return_val_if_fail (filename && filename[0], NULL);
str = g_string_sized_new (60);
/* Convert '/' to ESCAPE_CHAR */
for (f = filename; f[0]; f++) {
if (f[0] == '/')
g_string_append_c (str, ESCAPE_CHAR);
else
g_string_append_c (str, f[0]);
}
/* escape_filename() must avoid anything that should_ignore_file() would reject.
* We can escape here more aggressivly then what we would read back. */
if (check_prefix (str->str, "."))
str->str[0] = ESCAPE_CHAR2;
if (check_suffix (str->str, "~"))
str->str[str->len - 1] = ESCAPE_CHAR2;
if ( check_mkstemp_suffix (str->str)
|| check_suffix (str->str, PEM_TAG)
|| check_suffix (str->str, DER_TAG))
g_string_append_c (str, ESCAPE_CHAR2);
return g_string_free (str, FALSE);;
}
开发者ID:NetworkManager,项目名称:NetworkManager,代码行数:36,代码来源:nms-keyfile-utils.c
示例17: main
//.........这里部分代码省略.........
}
free(filename);
if ( speaks == NULL ) {
speaks = strdup("zaef");
STATUS("You didn't specify a peak detection method.\n");
STATUS("I'm using 'zaef' for you.\n");
}
if ( strcmp(speaks, "zaef") == 0 ) {
iargs.peaks = PEAK_ZAEF;
} else if ( strcmp(speaks, "hdf5") == 0 ) {
iargs.peaks = PEAK_HDF5;
} else if ( strcmp(speaks, "cxi") == 0 ) {
iargs.peaks = PEAK_CXI;
} else {
ERROR("Unrecognised peak detection method '%s'\n", speaks);
return 1;
}
free(speaks);
/* Set default path for peaks, if appropriate */
if ( iargs.hdf5_peak_path == NULL ) {
if ( iargs.peaks == PEAK_HDF5 ) {
iargs.hdf5_peak_path = strdup("/processing/hitfinder/peakinfo");
} else if ( iargs.peaks == PEAK_CXI ) {
iargs.hdf5_peak_path = strdup("/entry_1/result_1");
}
}
if ( prefix == NULL ) {
prefix = strdup("");
} else {
if ( config_checkprefix ) {
prefix = check_prefix(prefix);
}
}
if ( n_proc == 0 ) {
ERROR("Invalid number of processes.\n");
return 1;
}
iargs.det = get_detector_geometry(geom_filename, iargs.beam);
if ( iargs.det == NULL ) {
ERROR("Failed to read detector geometry from '%s'\n",
geom_filename);
return 1;
}
if ( indm_str == NULL ) {
STATUS("You didn't specify an indexing method, so I won't try "
" to index anything.\n"
"If that isn't what you wanted, re-run with"
" --indexing=<methods>.\n");
indm = NULL;
} else {
indm = build_indexer_list(indm_str);
if ( indm == NULL ) {
ERROR("Invalid indexer list '%s'\n", indm_str);
return 1;
}
free(indm_str);
}
开发者ID:biochem-fan,项目名称:CrystFEL,代码行数:67,代码来源:indexamajig.c
示例18: calloc
static struct gpiochip_info *list_gpiochip(const char *gpiochip_name, int *ret)
{
struct gpiochip_info *cinfo;
struct gpiochip_info *current;
const struct dirent *ent;
DIR *dp;
char *chrdev_name;
int fd;
int i = 0;
cinfo = calloc(sizeof(struct gpiochip_info) * 4, GC_NUM + 1);
if (!cinfo)
err(EXIT_FAILURE, "gpiochip_info allocation failed");
current = cinfo;
dp = opendir("/dev");
if (!dp) {
*ret = -errno;
goto error_out;
} else {
*ret = 0;
}
while (ent = readdir(dp), ent) {
if (check_prefix(ent->d_name, "gpiochip")) {
*ret = asprintf(&chrdev_name, "/dev/%s", ent->d_name);
if (*ret < 0)
goto error_out;
fd = open(chrdev_name, 0);
if (fd == -1) {
*ret = -errno;
fprintf(stderr, "Failed to open %s\n",
chrdev_name);
goto error_close_dir;
}
*ret = ioctl(fd, GPIO_GET_CHIPINFO_IOCTL, current);
if (*ret == -1) {
perror("Failed to issue CHIPINFO IOCTL\n");
goto error_close_dir;
}
close(fd);
if (strcmp(current->label, gpiochip_name) == 0
|| check_prefix(current->label, gpiochip_name)) {
*ret = 0;
current++;
i++;
}
}
}
if ((!*ret && i == 0) || *ret < 0) {
free(cinfo);
cinfo = NULL;
}
if (!*ret && i > 0) {
cinfo = realloc(cinfo, sizeof(struct gpiochip_info) * 4 * i);
*ret = i;
}
error_close_dir:
closedir(dp);
error_out:
if (*ret < 0)
err(EXIT_FAILURE, "list gpiochip failed: %s", strerror(*ret));
return cinfo;
}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:68,代码来源:gpio-mockup-chardev.c
示例19: avro_consume_binary
int
avro_consume_binary(avro_reader_t reader, avro_consumer_t *consumer, void *ud)
{
int rval;
const avro_encoding_t *enc = &avro_binary_encoding;
check_param(EINVAL, reader, "reader");
check_param(EINVAL, consumer, "consumer");
switch (avro_typeof(consumer->schema)) {
case AVRO_NULL:
check_prefix(rval, enc->read_null(reader),
"Cannot read null value: ");
check(rval, avro_consumer_call(consumer, null_value, ud));
break;
case AVRO_BOOLEAN:
{
int8_t b;
check_prefix(rval, enc->read_boolean(reader, &b),
"Cannot read boolean value: ");
check(rval, avro_consumer_call(consumer, boolean_value, b, ud));
}
break;
case AVRO_STRING:
{
int64_t len;
char *s;
check_prefix(rval, enc->read_string(reader, &s, &len),
"Cannot read string value: ");
check(rval, avro_consumer_call(consumer, string_value, s, len, ud));
}
break;
case AVRO_INT32:
{
int32_t i;
check_prefix(rval, enc->read_int(reader, &i),
"Cannot read int value: ");
check(rval, avro_consumer_call(consumer, int_value, i, ud));
}
break;
case AVRO_INT64:
{
int64_t l;
check_prefix(rval, enc->read_long(reader, &l),
"Cannot read long value: ");
check(rval, avro_consumer_call(consumer, long_value, l, ud));
}
break;
case AVRO_FLOAT:
{
float f;
check_prefix(rval, enc->read_float(reader, &f),
"Cannot read float value: ");
check(rval, avro_consumer_call(consumer, float_value, f, ud));
}
break;
case AVRO_DOUBLE:
{
double d;
check_prefix(rval, enc->read_double(reader, &d),
"Cannot read double value: ");
check(rval, avro_consumer_call(consumer, double_value, d, ud));
}
break;
case AVRO_BYTES:
{
char *bytes;
int64_t len;
check_prefix(rval, enc->read_bytes(reader, &bytes, &len),
"Cannot read bytes value: ");
check(rval, avro_consumer_call(consumer, bytes_value, bytes, len, ud));
}
break;
case AVRO_FIXED:
{
char *bytes;
int64_t size =
avro_schema_to_fixed(consumer->schema)->size;
bytes = avro_malloc(size);
if (!bytes) {
avro_prefix_error("Cannot allocate new fixed value");
return ENOMEM;
}
rval = avro_read(reader, bytes, size);
if (rval) {
avro_prefix_error("Cannot read fixed value: ");
avro_free(bytes, size);
return rval;
}
rval = avro_consumer_call(consumer, fixed_value, bytes, size, ud);
//.........这里部分代码省略.........
开发者ID:Adimpression,项目名称:avro-mobile,代码行数:101,代码来源:consume-binary.c
示例20: heim_digest_parse_response
int
heim_digest_parse_response(heim_digest_t context, const char *response)
{
struct md5_value *val = NULL;
char *nonce;
int ret;
response = check_prefix(context, response);
ret = parse_values(response, &val);
if (ret)
goto out;
ret = 1;
if (context->type == HEIM_DIGEST_TYPE_AUTO) {
goto out;
} else if (context->type == HEIM_DIGEST_TYPE_RFC2617_OR_RFC2831) {
context->clientURI = values_find(&val, "uri");
if (context->clientURI) {
context->type = HEIM_DIGEST_TYPE_RFC2617_MD5_SESS;
} else {
context->clientURI = values_find(&val, "digest-uri");
context->type = HEIM_DIGEST_TYPE_RFC2831;
}
} else if (context->type == HEIM_DIGEST_TYPE_RFC2831) {
context->clientURI = values_find(&val, "digest-uri");
} else {
context->clientURI = values_find(&val, "uri");
}
if (context->clientURI == NULL)
goto out;
context->clientUsername = values_find(&val, "username");
if (context->clientUsername == NULL) goto out;
/* if client sent realm, make sure its the same of serverRealm if its set */
context->clientRealm = values_find(&val, "realm");
if (context->clientRealm && context->serverRealm && strcmp(context->clientRealm, context->serverRealm) != 0)
goto out;
context->clientResponse = values_find(&val, "response");
if (context->clientResponse == NULL) goto out;
nonce = values_find(&val, "nonce");
if (nonce == NULL) goto out;
if (strcmp(nonce, context->serverNonce) != 0) {
free(nonce);
goto out;
}
free(nonce);
if (context->type != HEIM_DIGEST_TYPE_RFC2069) {
context->clientQOP = values_find(&val, "qop");
if (context->clientQOP == NULL) goto out;
/*
* If we have serverQOP, lets check that clientQOP exists
* in the list of server entries.
*/
if (context->serverQOP) {
Boolean found = false;
char *b, *e;
size_t len, clen = strlen(context->clientQOP);
b = context->serverQOP;
while (b && !found) {
e = strchr(b, ',');
if (e == NULL)
len = strlen(b);
else {
len = e - b;
e += 1;
}
if (clen == len && strncmp(b, context->clientQOP, len) == 0)
found = true;
b = e;
}
if (!found)
goto out;
}
context->clientNC = values_find(&val, "nc");
if (context->clientNC == NULL) goto out;
context->clientNonce = values_find(&val, "cnonce");
if (context->clientNonce == NULL) goto out;
}
set_auth_method(context);
ret = 0;
out:
free_values(val);
return ret;
}
开发者ID:alfintatorkace,项目名称:osx-10.9-opensource,代码行数:100,代码来源:digest.c
注:本文中的check_prefix函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论