您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ str_append_n函数代码示例

51自学网 2021-06-03 08:25:42
  C++
这篇教程C++ str_append_n函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中str_append_n函数的典型用法代码示例。如果您正苦于以下问题:C++ str_append_n函数的具体用法?C++ str_append_n怎么用?C++ str_append_n使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了str_append_n函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: hdr_write

static void hdr_write(string_t *str, struct message_header_line *hdr){	if (!hdr->continued) {		str_append(str, hdr->name);		str_append_n(str, hdr->middle, hdr->middle_len);	}	str_append_n(str, hdr->value, hdr->value_len);	if (!hdr->no_newline) {		if (hdr->crlf_newline)			str_append_c(str, '/r');		str_append_c(str, '/n');	}}
开发者ID:aosm,项目名称:dovecot,代码行数:13,


示例2: xml_encode_data

static voidxml_encode_data(string_t *dest, const unsigned char *data, unsigned int len){	unichar_t chr;	unsigned int i;	for (i = 0; i < len; i++) {		switch (data[i]) {		case '&':			str_append(dest, "&amp;");			break;		case '<':			str_append(dest, "&lt;");			break;		case '>':			str_append(dest, "&gt;");			break;		case '/t':		case '/n':		case '/r':			/* exceptions to the following control char check */			str_append_c(dest, data[i]);			break;		default:			if (data[i] < 32) {				/* SOLR doesn't like control characters.				   replace them with spaces. */				str_append_c(dest, ' ');			} else if (data[i] >= 0x80) {				/* make sure the character is valid for XML				   so we don't get XML parser errors */				unsigned int char_len =					uni_utf8_char_bytes(data[i]);				if (i + char_len <= len &&				    uni_utf8_get_char_n(data + i, char_len, &chr) == 1 &&				    is_valid_xml_char(chr))					str_append_n(dest, data + i, char_len);				else {					str_append_n(dest, utf8_replacement_char,						     UTF8_REPLACEMENT_CHAR_LEN);				}				i += char_len - 1;			} else {				str_append_c(dest, data[i]);			}			break;		}	}}
开发者ID:jkerihuel,项目名称:dovecot,代码行数:49,


示例3: rfc822_parse_mime_token

int rfc822_parse_mime_token(struct rfc822_parser_context *ctx, string_t *str){    const unsigned char *start;    for (start = ctx->data; ctx->data != ctx->end; ctx->data++) {        if (IS_ATEXT_NON_TSPECIAL(*ctx->data) || *ctx->data == '.')            continue;        str_append_n(str, start, ctx->data - start);        return rfc822_skip_lwsp(ctx);    }    str_append_n(str, start, ctx->data - start);    return 0;}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:15,


示例4: mbox_save_append_keyword_headers

static voidmbox_save_append_keyword_headers(struct mbox_save_context *ctx,				 struct mail_keywords *keywords){	unsigned char space[MBOX_HEADER_PADDING+1 +			    sizeof("Content-Length: /n")-1 + MAX_INT_STRLEN];	const ARRAY_TYPE(keywords) *keyword_names_list;	const char *const *keyword_names;	unsigned int i, count, keyword_names_count;	keyword_names_list = mail_index_get_keywords(ctx->mbox->box.index);	keyword_names = array_get(keyword_names_list, &keyword_names_count);	str_append(ctx->headers, "X-Keywords:");	count = keywords == NULL ? 0 : keywords->count;	for (i = 0; i < count; i++) {		i_assert(keywords->idx[i] < keyword_names_count);		str_append_c(ctx->headers, ' ');		str_append(ctx->headers, keyword_names[keywords->idx[i]]);	}	memset(space, ' ', sizeof(space));	str_append_n(ctx->headers, space, sizeof(space));	ctx->space_end_idx = str_len(ctx->headers);	str_append_c(ctx->headers, '/n');}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:27,


示例5: str_sanitize_append

void str_sanitize_append(string_t *dest, const char *src, size_t max_bytes){	unsigned int initial_pos = str_len(dest);	unichar_t chr;	size_t i;	for (i = 0; i < max_bytes && src[i] != '/0'; ) {		int len = uni_utf8_get_char_n(src+i, max_bytes-i, &chr);		if (len == 0)			break; /* input ended too early */		if (len < 0) {			/* invalid UTF-8 */			str_append_c(dest, '?');			i++;			continue;		}		if ((unsigned char)src[i] < 32)			str_append_c(dest, '?');		else			str_append_n(dest, src+i, len);		i += len;	}	if (src[i] != '/0') {		if (max_bytes < 3)			str_truncate(dest, initial_pos);		else {			while (str_len(dest) - initial_pos > max_bytes-3)				str_sanitize_truncate_char(dest, initial_pos);		}		str_append(dest, "...");	}}
开发者ID:bsmr-dovecot,项目名称:core,代码行数:34,


示例6: client_auth_read_line

int client_auth_read_line(struct client *client){	const unsigned char *data;	size_t i, size;	unsigned int len;	if (i_stream_read_data(client->input, &data, &size, 0) == -1) {		client_destroy(client, "Disconnected");		return -1;	}	/* see if we have a full line */	for (i = 0; i < size; i++) {		if (data[i] == '/n')			break;	}	if (client->auth_response == NULL)		client->auth_response = str_new(default_pool, I_MAX(i+1, 256));	if (str_len(client->auth_response) + i > LOGIN_MAX_AUTH_BUF_SIZE) {		client_destroy(client, "Authentication response too large");		return -1;	}	str_append_n(client->auth_response, data, i);	i_stream_skip(client->input, i == size ? size : i+1);	/* drop trailing /r */	len = str_len(client->auth_response);	if (len > 0 && str_c(client->auth_response)[len-1] == '/r')		str_truncate(client->auth_response, len-1);	return i < size;}
开发者ID:oposs,项目名称:dovecot-extensions,代码行数:32,


示例7: rfc822_parse_domain_literal

static intrfc822_parse_domain_literal(struct rfc822_parser_context *ctx, string_t *str){    const unsigned char *start;    /*       domain-literal  = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS]       dcontent        = dtext / quoted-pair       dtext           = NO-WS-CTL /     ; Non white space controls    		     %d33-90 /       ; The rest of the US-ASCII    		     %d94-126        ;  characters not including "[",    				     ;  "]", or "/"    */    i_assert(*ctx->data == '[');    for (start = ctx->data; ctx->data != ctx->end; ctx->data++) {        if (*ctx->data == '//') {            ctx->data++;            if (ctx->data == ctx->end)                break;        } else if (*ctx->data == ']') {            ctx->data++;            str_append_n(str, start, ctx->data - start);            return rfc822_skip_lwsp(ctx);        }    }    /* missing ']' */    return -1;}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:30,


示例8: checkpassword_child_input

void checkpassword_child_input(struct chkpw_auth_request *request){	unsigned char buf[1024];	ssize_t ret;	ret = read(request->fd_in, buf, sizeof(buf));	if (ret <= 0) {		if (ret < 0) {			auth_request_log_error(request->request,				"checkpassword", "read() failed: %m");		}		auth_request_log_debug(request->request, "checkpassword",				       "Received no input");		checkpassword_request_close(request);		request->half_finish_callback(request);	} else {		if (request->input_buf == NULL)			request->input_buf = str_new(default_pool, 512);		str_append_n(request->input_buf, buf, ret);		auth_request_log_debug(request->request, "checkpassword",			"Received input: %s", str_c(request->input_buf));	}}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:25,


示例9: str_new

static char *i_stream_next_line_finish(struct istream_private *stream, size_t i){	char *ret;	size_t end;	if (i > 0 && stream->buffer[i-1] == '/r') {		end = i - 1;		stream->line_crlf = TRUE;	} else {		end = i;		stream->line_crlf = FALSE;	}	if (stream->w_buffer != NULL) {		/* modify the buffer directly */		stream->w_buffer[end] = '/0';		ret = (char *)stream->w_buffer + stream->skip;	} else {		/* use a temporary string to return it */		if (stream->line_str == NULL)			stream->line_str = str_new(default_pool, 256);		str_truncate(stream->line_str, 0);		str_append_n(stream->line_str, stream->buffer + stream->skip,			     end - stream->skip);		ret = str_c_modifiable(stream->line_str);	}	if (i < stream->pos)		i++;	stream->istream.v_offset += i - stream->skip;	stream->skip = i;	return ret;}
开发者ID:bdraco,项目名称:dovecot,代码行数:33,


示例10: t_str_new

const char *str_escape(const char *str){	const char *p;	string_t *ret;	/* see if we need to quote it */	for (p = str; *p != '/0'; p++) {		if (IS_ESCAPED_CHAR(*p))			break;	}	if (*p == '/0')		return str;	/* quote */	ret = t_str_new((size_t) (p - str) + 128);	str_append_n(ret, str, (size_t) (p - str));	for (; *p != '/0'; p++) {		if (IS_ESCAPED_CHAR(*p))			str_append_c(ret, '//');		str_append_c(ret, *p);	}	return str_c(ret);}
开发者ID:LTD-Beget,项目名称:dovecot,代码行数:25,


示例11: fs_sis_replace_hash_file

static void fs_sis_replace_hash_file(struct sis_fs_file *file){	const char *hash_fname, *path = fs_file_path(&file->file);	struct fs *super_fs = file->super->fs;	string_t *temp_path;	int ret;	if (file->hash_input == NULL) {		/* hash file didn't exist previously. we should be able to		   create it with link() */		if (fs_link(super_fs, path, file->hash_path) < 0) {			if (errno == EEXIST) {				/* the file was just created. it's probably				   a duplicate, but it's too much trouble				   trying to deduplicate it anymore */			} else {				i_error("fs-sis: %s", fs_last_error(super_fs));			}		}		return;	}	temp_path = t_str_new(256);	hash_fname = strrchr(file->hash_path, '/');	if (hash_fname == NULL)		hash_fname = file->hash_path;	else {		str_append_n(temp_path, file->hash_path,			     (hash_fname-file->hash_path) + 1);		hash_fname++;	}	str_printfa(temp_path, "%s%s.tmp",		    super_fs->set.temp_file_prefix, hash_fname);	/* replace existing hash file atomically */	ret = fs_link(super_fs, path, str_c(temp_path));	if (ret < 0 && errno == EEXIST) {		/* either someone's racing us or it's a stale file.		   try to continue. */		if (fs_unlink(super_fs, str_c(temp_path)) < 0 &&		    errno != ENOENT)			i_error("fs-sis: %s", fs_last_error(super_fs));		ret = fs_link(super_fs, path, str_c(temp_path));	}	if (ret < 0) {		i_error("fs-sis: %s", fs_last_error(super_fs));		return;	}	if (fs_rename(super_fs, str_c(temp_path), file->hash_path) < 0) {		if (errno == ENOENT) {			/* apparently someone else just renamed it. ignore. */		} else {			i_error("fs-sis: %s", fs_last_error(super_fs));		}		(void)fs_unlink(super_fs, str_c(temp_path));	}}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:57,


示例12: stream_data

static void stream_data(string_t *str, const unsigned char *data, size_t size){	const char *text;	str_truncate(str, 0);	str_append_n(str, data, size);	text = str_tabunescape(str_c_modifiable(str));	doveadm_print_stream(text, strlen(text));}
开发者ID:dhultin,项目名称:dovecot-pop-uidl-proxy,代码行数:9,


示例13: rfc822_skip_comment

int rfc822_skip_comment(struct rfc822_parser_context *ctx){    const unsigned char *start;    int level = 1;    i_assert(*ctx->data == '(');    if (ctx->last_comment != NULL)        str_truncate(ctx->last_comment, 0);    start = ++ctx->data;    for (; ctx->data != ctx->end; ctx->data++) {        switch (*ctx->data) {        case '(':            level++;            break;        case ')':            if (--level == 0) {                if (ctx->last_comment != NULL) {                    str_append_n(ctx->last_comment, start,                                 ctx->data - start);                }                ctx->data++;                return ctx->data != ctx->end;            }            break;        case '//':            if (ctx->last_comment != NULL) {                str_append_n(ctx->last_comment, start,                             ctx->data - start);            }            start = ctx->data + 1;            ctx->data++;            if (ctx->data == ctx->end)                return -1;            break;        }    }    /* missing ')' */    return -1;}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:43,


示例14: rfc822_parse_dot_atom

int rfc822_parse_dot_atom(struct rfc822_parser_context *ctx, string_t *str){	const unsigned char *start;	int ret;	/*	   dot-atom        = [CFWS] dot-atom-text [CFWS]	   dot-atom-text   = 1*atext *("." 1*atext)	   atext           =	     ; Any character except controls, SP, and specials.	   For RFC-822 compatibility allow LWSP around '.'	*/	if (ctx->data == ctx->end || !IS_ATEXT(*ctx->data))		return -1;	for (start = ctx->data++; ctx->data != ctx->end; ) {		if (IS_ATEXT(*ctx->data)) {			ctx->data++;			continue;		}		str_append_n(str, start, ctx->data - start);		if ((ret = rfc822_skip_lwsp(ctx)) <= 0)			return ret;		if (*ctx->data != '.')			return 1;		ctx->data++;		str_append_c(str, '.');		if ((ret = rfc822_skip_lwsp(ctx)) <= 0)			return ret;		start = ctx->data;	}	str_append_n(str, start, ctx->data - start);	return 0;}
开发者ID:IvanKharpalev,项目名称:core,代码行数:42,


示例15: decode_test

static voiddecode_test(const char *qp_input, const char *output, bool broken_input,	    unsigned int buffer_size){	unsigned int qp_input_len = strlen(qp_input);	struct istream *input_data, *input;	const unsigned char *data;	size_t i, size;	string_t *str = t_str_new(32);	int ret = 0;	input_data = test_istream_create_data(qp_input, qp_input_len);	test_istream_set_max_buffer_size(input_data, buffer_size);	test_istream_set_allow_eof(input_data, FALSE);	input = i_stream_create_qp_decoder(input_data);	for (i = 1; i <= qp_input_len; i++) {		test_istream_set_size(input_data, i);		while ((ret = i_stream_read_more(input, &data, &size)) > 0) {			str_append_n(str, data, size);			i_stream_skip(input, size);		}		if (ret == -1 && broken_input)			break;		test_assert(ret == 0);	}	if (ret == 0) {		test_istream_set_allow_eof(input_data, TRUE);		while ((ret = i_stream_read_more(input, &data, &size)) > 0) {			str_append_n(str, data, size);			i_stream_skip(input, size);		}	}	test_assert(ret == -1);	test_assert((input->stream_errno == 0 && !broken_input) ||		    (input->stream_errno == EINVAL && broken_input));	test_assert(strcmp(str_c(str), output) == 0);	i_stream_unref(&input);	i_stream_unref(&input_data);}
开发者ID:IvanKharpalev,项目名称:core,代码行数:41,


示例16: rfc822_parse_atom

int rfc822_parse_atom(struct rfc822_parser_context *ctx, string_t *str){    const unsigned char *start;    /*       atom            = [CFWS] 1*atext [CFWS]       atext           =         ; Any character except controls, SP, and specials.    */    if (ctx->data == ctx->end || !IS_ATEXT(*ctx->data))        return -1;    for (start = ctx->data++; ctx->data != ctx->end; ctx->data++) {        if (IS_ATEXT(*ctx->data))            continue;        str_append_n(str, start, ctx->data - start);        return rfc822_skip_lwsp(ctx);    }    str_append_n(str, start, ctx->data - start);    return 0;}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:23,


示例17: auth_cache_key_add_var

static voidauth_cache_key_add_var(string_t *str, const char *data, unsigned int len){	if (str_len(str) > 0)		str_append_c(str, '/t');	str_append_c(str, '%');	if (len == 1)		str_append_c(str, data[0]);	else {		str_append_c(str, '{');		str_append_n(str, data, len);		str_append_c(str, '}');	}}
开发者ID:jkerihuel,项目名称:dovecot,代码行数:14,


示例18: test_str_append_n

static void test_str_append_n(void){	string_t *str = t_str_new(32);	test_begin("str_append_n()");	str_append_n(str, "foo", 0);	test_assert(str->used == 0);	str_append_n(str, "/0foo", 4);	test_assert(str->used == 0);	str_append_n(str, "foo", 3);	test_assert(str->used == 3 && memcmp(str_data(str), "foo", 3) == 0);	str_truncate(str, 0);	str_append_n(str, "foo", 2);	test_assert(str->used == 2 && memcmp(str_data(str), "fo", 2) == 0);	str_truncate(str, 0);	str_append_n(str, "foo/0bar", 7);	test_assert(str->used == 3 && memcmp(str_data(str), "foo", 3) == 0);	str_truncate(str, 0);	test_end();}
开发者ID:manuelm,项目名称:dovecot,代码行数:24,


示例19: rfc822_parse_atom_or_dot

static intrfc822_parse_atom_or_dot(struct rfc822_parser_context *ctx, string_t *str){    const unsigned char *start;    /*       atom            = [CFWS] 1*atext [CFWS]       atext           =         ; Any character except controls, SP, and specials.       The difference between this function and rfc822_parse_dot_atom()       is that this doesn't just silently skip over all the whitespace.    */    for (start = ctx->data; ctx->data != ctx->end; ctx->data++) {        if (IS_ATEXT(*ctx->data) || *ctx->data == '.')            continue;        str_append_n(str, start, ctx->data - start);        return rfc822_skip_lwsp(ctx);    }    str_append_n(str, start, ctx->data - start);    return 0;}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:24,


示例20: rfc822_parse_quoted_string

int rfc822_parse_quoted_string(struct rfc822_parser_context *ctx, string_t *str){    const unsigned char *start;    size_t len;    i_assert(*ctx->data == '"');    ctx->data++;    for (start = ctx->data; ctx->data != ctx->end; ctx->data++) {        switch (*ctx->data) {        case '"':            str_append_n(str, start, ctx->data - start);            ctx->data++;            return rfc822_skip_lwsp(ctx);        case '/n':            /* folding whitespace, remove the (CR)LF */            len = ctx->data - start;            if (len > 0 && start[len-1] == '/r')                len--;            str_append_n(str, start, len);            start = ctx->data + 1;            break;        case '//':            ctx->data++;            if (ctx->data == ctx->end)                return -1;            str_append_n(str, start, ctx->data - start);            start = ctx->data;            break;        }    }    /* missing '"' */    return -1;}
开发者ID:via,项目名称:dovecot-clouddb,代码行数:36,


示例21: uri_parse_ip_literal

static inturi_parse_ip_literal(struct uri_parser *parser, string_t *literal,		     struct in6_addr *ip6_r){	const unsigned char *p;	const char *address;	int ret;	/* IP-literal    = "[" ( IPv6address / IPvFuture  ) "]"	 * IPvFuture     = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )	 * IPv6address   = ; Syntax not relevant: parsed using inet_pton()	 */	/* "[" already verified */	/* Scan for end of address */	for (p = parser->cur+1; p < parser->end; p++) {		if (*p == ']')			break;	}	if (p >= parser->end || *p != ']') {		parser->error = "Expecting ']' at end of IP-literal";		return -1;	}	if (literal != NULL)		str_append_n(literal, parser->cur, p-parser->cur+1);	address = t_strdup_until(parser->cur+1, p);	parser->cur = p + 1;		if (*address == '/0') {		parser->error = "Empty IPv6 host address";		return -1;	}	if (*address == 'v') {		parser->error = t_strdup_printf(			"Future IP host address '%s' not supported", address);		return -1;	}	if ((ret = inet_pton(AF_INET6, address, ip6_r)) <= 0) {		parser->error = t_strdup_printf(			"Invalid IPv6 host address '%s'", address);		return -1;	}	return 1;}
开发者ID:jwm,项目名称:dovecot-notmuch,代码行数:47,


示例22: server_flush_field

static void server_flush_field(struct server_connection *conn, string_t *str,			       const unsigned char *data, size_t size){	if (conn->streaming) {		conn->streaming = FALSE;		if (size > 0)			stream_data(str, data, size);		doveadm_print_stream("", 0);	} else {		const char *text;		str_truncate(str, 0);		str_append_n(str, data, size);		text = str_tabunescape(str_c_modifiable(str));		doveadm_print(text);	}}
开发者ID:dhultin,项目名称:dovecot-pop-uidl-proxy,代码行数:17,


示例23: str_sanitize_skip_start

const char *str_sanitize(const char *src, size_t max_len){	string_t *str;	size_t i;	if (src == NULL)		return NULL;	i = str_sanitize_skip_start(src, max_len);	if (src[i] == '/0')		return src;	str = t_str_new(I_MIN(max_len, 256));	str_append_n(str, src, i);	str_sanitize_append(str, src + i, max_len - i);	return str_c(str);}
开发者ID:Distrotech,项目名称:dovecot,代码行数:17,


示例24: push_expr

/* push current expression */static void push_expr(ParseCtx *ctx){	STR_DEFINE(expr_text, STR_SIZE);	Expr *expr;	Sym  *expr_p;	Bool  last_was_prefix;	/* build expression text - split constant prefixes from numbers and names */	str_clear(expr_text);	last_was_prefix = FALSE;	for (expr_p = ctx->expr_start; expr_p < ctx->p; expr_p++)	{		if (last_was_prefix && expr_p->tlen > 0 &&			(isalnum(*expr_p->tstart) || *expr_p->tstart == '"'))		{			str_append_char(expr_text, ' ');			last_was_prefix = FALSE;		}		str_append_n(expr_text, expr_p->tstart, expr_p->tlen);		if (expr_p->tlen > 0)		{			switch (expr_p->tstart[expr_p->tlen - 1])			{			case '@':			case '%':			case '$':				last_was_prefix = TRUE;				break;			default:				last_was_prefix = FALSE;			}		}	}		/* parse expression */	expr = parse_expr(str_data(expr_text));	/* push the new expression, or NULL on error */	utarray_push_back(ctx->exprs, &expr);	STR_DELETE(expr_text);}
开发者ID:bitfixer,项目名称:bitfixer,代码行数:46,


示例25: str_append_tabunescaped

void str_append_tabunescaped(string_t *dest, const void *src, size_t src_size){	const unsigned char *src_c = src;	size_t start = 0, i = 0;	while (i < src_size) {		for (; i < src_size; i++) {			if (src_c[i] == '/001')				break;		}		str_append_n(dest, src_c + start, i-start);		if (i < src_size) {			i++;			if (i < src_size) {				switch (src_c[i]) {				case '0':					str_append_c(dest, '/000');					break;				case '1':					str_append_c(dest, '/001');					break;				case 't':					str_append_c(dest, '/t');					break;				case 'r':					str_append_c(dest, '/r');					break;				case 'n':					str_append_c(dest, '/n');					break;				default:					str_append_c(dest, src_c[i]);					break;				}				i++;			}		}		start = i;	}}
开发者ID:bdraco,项目名称:core,代码行数:42,


示例26: http_header_parse_name

static int http_header_parse_name(struct http_header_parser *parser){	const unsigned char *first = parser->cur;	/* field-name     = token	   token          = 1*tchar	 */	while (parser->cur < parser->end && http_char_is_token(*parser->cur))		parser->cur++;	str_append_n(parser->name, first, parser->cur-first);	if (parser->cur == parser->end)		return 0;	if (str_len(parser->name) == 0) {		parser->error = "Empty header field name";		return -1;	}	return 1;}
开发者ID:bechtoldt,项目名称:dovecot-core,代码行数:20,


示例27: smtp_xtext_encode

void smtp_xtext_encode(string_t *out, const unsigned char *data,	size_t size){	const unsigned char *p, *pbegin, *pend;	p = data;	pend = p + size;	while (p < pend) {		pbegin = p;		while (p < pend && smtp_char_is_xtext(*p))			p++;		str_append_n(out, pbegin, p-pbegin);		if (p >= pend)			break;		str_printfa(out, "+%02X", (unsigned int)*p);		p++;	}}
开发者ID:bdraco,项目名称:core,代码行数:20,


示例28: str_append_unescaped

void str_append_unescaped(string_t *dest, const void *src, size_t src_size){	const unsigned char *src_c = src;	size_t start = 0, i = 0;	while (i < src_size) {		for (; i < src_size; i++) {			if (src_c[i] == '//')				break;		}		str_append_n(dest, src_c + start, i-start);		if (i < src_size) {			if (++i == src_size)				break;			str_append_c(dest, src_c[i++]);		}		start = i;	}}
开发者ID:LTD-Beget,项目名称:dovecot,代码行数:21,


示例29: smtp_string_write

void smtp_string_write(string_t *out, const char *value){	bool quoted = FALSE;	const unsigned char *p, *pend, *pblock;	size_t begin = str_len(out);	if (value == NULL)		return;	p = (const unsigned char *)value;	pend = p + strlen(value);	while (p < pend) {		pblock = p;		while (p < pend && smtp_char_is_atext(*p))			p++;		if (!quoted && p < pend) {			quoted = TRUE;			str_insert(out, begin, "/"");		}		str_append_n(out, pblock, p-pblock);		if (p >= pend)			break;		i_assert(quoted);		i_assert(smtp_char_is_qpair(*p));		if (!smtp_char_is_qtext(*p))			str_append_c(out, '//');		str_append_c(out, *p);		p++;	}	if (quoted)		str_append_c(out, '/"');}
开发者ID:bdraco,项目名称:core,代码行数:37,



注:本文中的str_append_n函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ str_cat函数代码示例
C++ str_append_char函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。