Вот функция, которая должна конвертировать имя файла из одной кодировки в другую, а потом обратно (для [VDR]). Первый проход идёт нормально, а при втором из [main()] ерунда приходит. В чём дело?
C
#include <stdio.h>
#include <stdlib.h>
#include <iconv.h>
#include <errno.h>
#include <string.h>
char* conv(char* bukvain, bool T)
{
printf("Got input: %s\n", bukvain);
if (char* env = strchr(getenv("LANG"), '.')) {
if (env++ && *env) {
char* in = bukvain;
char buf[strlen(bukvain)+1];
char* out = buf;
size_t f = strlen(bukvain);
size_t t = sizeof buf;
buf[strlen(bukvain)] = 0;
iconv_t cd;
if(T)
cd = iconv_open(env, "iso8859-5");
else
cd = iconv_open("iso8859-5", env);
if (cd == (iconv_t)(-1)) {
printf("Open error: %d\n", errno);
goto noconv;
}
if (iconv(cd, &in, &f, &out, &t) == (size_t)(-1)) {
printf("Conversion error: %d\n", errno);
goto noconv;
}
if (iconv_close(cd) !=0)
printf ("Close error: %d\n", errno);
bukvain = buf;
}
}
noconv: ;
return bukvain;
}
int main(){
char* a = "fэО Дпышп";
printf("Converted to Env: %s (%d chars)\n", a = conv(a, true), strlen(a));
printf("Converted from Env: %s (%d chars)\n", a = conv(a, false), strlen(a));
return 0;
}
Показать весь код
ПС. вместо [bukvain = buf] поставить [strcpy(bukvain, buf)] выдаёт [Segmentation fault].