- 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
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
static bool
do_convert(iconv_t cd, const char * src, int src_len,
char ** dst, int *dst_len)
{
char * ret;
char *inbuf;
char *outbuf;
int alloc_size;
int output_pos;
size_t inbytesleft;
size_t outbytesleft;
if(src_len < 0)
src_len = strlen(src);
#if 0
fprintf(stderr, "Converting:\n");
bgav_hexdump(src, src_len, 16);
#endif
alloc_size = src_len + BYTES_INCREMENT;
inbytesleft = src_len;
/* We reserve space here to add a final '\0' */
outbytesleft = alloc_size-1;
ret = malloc(alloc_size);
inbuf = (char *)src;
outbuf = ret;
while(1)
{
if(iconv(cd, (ICONV_CONST char **)&inbuf, &inbytesleft,
&outbuf, &outbytesleft) == (size_t)-1)
{
switch(errno)
{
case E2BIG:
output_pos = (int)(outbuf - ret);
alloc_size += BYTES_INCREMENT;
outbytesleft += BYTES_INCREMENT;
ret = realloc(ret, alloc_size);
if (ret == NULL)
{
cdio_warn("Can't realloc(%d).", alloc_size);
return false;
}
outbuf = ret + output_pos;
break;
default:
cdio_warn("Iconv failed: %s", strerror(errno));
if (ret != NULL)
free(ret);
return false;
break;
}
}
if(!inbytesleft)
break;
}
/* Zero terminate */
*outbuf = '\0';
/* Set return values */
*dst = ret;
if(dst_len)
*dst_len = (int)(outbuf - ret);
#if 0
fprintf(stderr, "Conversion done, src:\n");
bgav_hexdump(src, src_len, 16);
fprintf(stderr, "dst:\n");
bgav_hexdump((uint8_t*)(ret), (int)(outbuf - ret), 16);
#endif
return true;
}
AnalPerOral 05.07.2017 13:03 # 0
sos 08.07.2017 16:00 # −1
bormand 08.07.2017 18:09 # −1
ret = realloc(ret, alloc_size)?
Или что-то более серьёзное?
j123123 08.07.2017 18:37 # −1
https://github.com/radare/radare2/issues/7881
у меня просто БАГОР от такого
AnalPerOral 08.07.2017 20:45 # 0
sos 08.07.2017 22:57 # 0
j123123 09.07.2017 12:16 # +3
Вообще, на Си можно писать нормально, просто надо уметь
Надо мне наверное написать какую-нибудь фундаментальную статью, типа "Почему плюсы и STL это днище ебаное и всем плюсоблядям надо ссать в еблет за ту хуйню, которую они придумали", но пока лень
bormand 09.07.2017 13:41 # +2
sos 09.07.2017 15:01 # 0
Пустые слова без конкретики.
> нихуевый такой кусок рантайма
О каком рантайме речь? О том, что стандартная библиотека много места занимает (якобы)? В 2017 году мегабайты бинаря считать нет никакого смысла. В плюсах в рантайме кроме программы ничего не выполняется. Даже исключения не тратят цпу, пока их не кидаешь.
> Си можно писать нормально, просто надо уметь
Уметь не забывать расставлять free и pthread_mutex_unlock? Зачем, если в плюсах с этим справляется компилятор? Или уметь костылить хэштаблицы на макросах и войдзвездочках? Дженерики-то не завезли.
> Надо мне наверное написать
Очень интересно будет прочитать мнение кукаретика.
j123123 09.07.2017 15:05 # +1
Скажи это моему 8-битному микроконтроллеру
>Уметь не забывать расставлять free и pthread_mutex_unlock? Зачем, если в плюсах с этим справляется компилятор? Или уметь костылить хэштаблицы на макросах и войдзвездочках? Дженерики-то не завезли.
Нет, уметь нормально архитектуру продумать, чтобы не было всякой жопы.
>Очень интересно будет прочитать мнение кукаретика.
Пройди-ка ты нахуй, крестопетух
sos 09.07.2017 15:13 # 0
Я таким не увлекаюсь. Разрешаю си оставаться в этой нише, с которой я никогда не пересекусь.
> Нет, уметь нормально архитектуру продумать, чтобы не было всякой жопы.
Ну это можно и в плюсах. А еще компилятор память сам освободит и структуры данных готовые есть, которые работают с любыми типами. Смысл сишечки остается неясен.
> Пройди-ка ты нахуй, крестопетух
Нет, ты.
Antervis 09.07.2017 15:48 # 0
j123123 09.07.2017 15:50 # 0
sos 09.07.2017 16:06 # 0
Ну это все так делают.
sos 09.07.2017 15:59 # 0
Antervis 10.07.2017 04:28 # 0