- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
char* xml_compose_simple_response(char* response, int code, char* description, char* additional_data)
{
size_t resp_length = 0;
char* buff = NULL;
resp_length += strlen(RESPONSE_HEADER_PREFIX);
resp_length += strlen(session_type);
resp_length += strlen(transaction_id);
resp_length += strlen(response) + strlen(EMPTY_TAG);
if(NULL != additional_data)
{
resp_length += strlen(additional_data);
}
resp_length += strlen(description) + strlen(RESULT_INT) + sizeof(int) * 8;
resp_length += strlen(RESPONSE_HEADER_SUFFIX);
resp_length += 1;
if(NULL != (buff = malloc(resp_length)))
{
buff[0] = '\0';
sprintf(buff, RESPONSE_HEADER_PREFIX""EMPTY_TAG, session_type, transaction_id, response);
if (additional_data != NULL)
{
char tmp_desc[_2K];
sprintf(tmp_desc, description, additional_data);
sprintf(&buff[strlen(buff)], RESULT_INT, code, tmp_desc);
}
else
{
sprintf(&buff[strlen(buff)], RESULT_INT, code, description);
}
strcat(buff, RESPONSE_HEADER_SUFFIX);
}
else
{
mng_report_memory_failure_location_and_exit();
}
return buff;
}
XML вручную собирай @ на кавычкай падай. Никакого АПИ, только хардкор.
bormand 07.12.2014 13:27 # 0
Все числа из кода надо выносить в константы? :)
codemonkey 07.12.2014 13:29 # 0
Xom94ok 07.12.2014 13:36 # −1
codemonkey 07.12.2014 13:37 # +4
Xom94ok 07.12.2014 16:02 # +3
inkanus-gray 07.12.2014 16:12 # 0
3.14159265 07.12.2014 16:12 # 0
Elvenfighter 08.12.2014 02:32 # 0
codemonkey 08.12.2014 14:06 # 0
bormand 07.12.2014 13:31 # +1
Dummy00001 07.12.2014 14:42 # +2
someone 09.12.2014 08:28 # +1
Dummy00001 07.12.2014 14:48 # 0
и даже если надо динамически, strlen()ы не нужны: валиш все в один snprintf() и проверяешь результат. если было переполнение, выделяшь буфер больше и пробуешь еще раз.
ну линухе, все это заменяется одним вызовом `asprintf`.
codemonkey 07.12.2014 15:05 # 0
CONFORMING TO
These functions are GNU extensions, not in C or POSIX. They are also available under *BSD. The FreeBSD imlementation sets strp to NULL on error.
Ага.
bormand 07.12.2014 16:00 # +4
bormand 07.12.2014 16:01 # 0
Удачных ветвлений и циклов.
Dummy00001 07.12.2014 16:19 # 0
ёжику понятно что не универсально.
я просто пытался подчеркнуть насколько гротескно излишен ГК.
bormand 07.12.2014 16:21 # 0
Да ну? А в строках 25-35 мы что видим? :)
Dummy00001 07.12.2014 17:12 # 0
по коду там может быть что description либо просто строка (когда additional_data == NULL) либо формат с "%s" (когда additional_data != NULL). что само по себе заслуживает мини-ГК.
codemonkey 07.12.2014 16:53 # 0
tirinox 08.12.2014 07:10 # +1
guest 09.12.2014 16:59 # +1
bormand 09.12.2014 17:00 # +1