apply contrib scale plugin rework
[goodguy/cinelerra.git] / cinelerra-5.1 / po / chrset.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <string.h>
5 #include <iconv.h>
6 #include <sys/types.h>
7 #include <sys/stat.h>
8
9 int main(int ac, char **av)
10 {
11         iconv_t cd;
12         size_t inbytes = 0, outbytes = 0;
13         const char *from_enc = av[1], *to_enc = av[2];
14         char *input, *output, *inbfr, *outbfr;
15         struct stat st;
16         if( ac < 3 ) {
17                 fprintf(stderr,"usage: chrset from-enc to-enc < infile > outfile\n");
18                 exit(1);
19         }
20         if( fstat(fileno(stdin), &st) || !st.st_size ) {
21                 fprintf(stderr, "cant stat stdin\n");
22                 exit(1);
23         }
24         from_enc = av[1];
25         to_enc = av[2];
26         cd = iconv_open(to_enc, from_enc);
27         if( cd == (iconv_t)-1 ) {
28                 fprintf(stderr, "Conversion from %s to %s is not available",
29                         from_enc, to_enc);
30                 exit(1);
31         }
32         inbytes = st.st_size;
33         inbfr = input = malloc(inbytes);
34         read(0,input,inbytes);
35         outbytes = inbytes*2 + inbytes/2;
36         outbfr = output = malloc(outbytes);
37         iconv(cd, &input, &inbytes, &output, &outbytes);
38         iconv_close(cd);
39         write(1,outbfr,output-outbfr);
40         free(outbfr);
41         free(inbfr);
42         return 0;
43 }
44