const bool CharsetConverter::Convert(const std::string &input, std::string &output) { if(m_iconv!=(iconv_t)-1) { if(input.size()==0) { return true; } std::vector<char> invec(input.begin(),input.end()); std::vector<char> outvec(invec.size()*4,0); #if defined(_WIN32) || defined(__FreeBSD__)//|| defined(__APPLE__) || defined(__DARWIN__) const char *inptr=&invec[0]; #else char *inptr=&invec[0]; #endif char *outptr=&outvec[0]; size_t insize=invec.size(); size_t outsize=outvec.size(); size_t rval=0; rval=iconv(m_iconv,&inptr,&insize,&outptr,&outsize); if(outsize>=0) { outvec.resize(outptr-&outvec[0]); output=""; output.append(outvec.begin(),outvec.end()); return true; } else { return false; } } else { return false; } }
// '*' and ' ' void type_t::cstub(const char *last1, const char *vname1, FILE *out, int subi, int mode, bool inarr) { //printf("%s %d\n", name, mode); // variable name char *vname = new char [255]; char *last = new char [255]; strcpy(vname, vname1); strcpy(last, last1); if (isp(vname) || !strcmp("char", name)) { if ((mode==FROMJS))// || (mode==SKEL)) { if (strlen(last)>0) cout << last << "."; if (!strcmp("char", name)) cout << nop(vname) << " = new char [255] ;\n"; else cout << nop(vname) << " = new " << name << ";\n"; } if (strcmp("char", name)) last = addptolast(last, vname); else last = addtolast(last, vname); //cout << "HUIL: " << last << endl; } else last = addtolast(last, vname); // cout << last << " " << " "<< name << " " << vname << "HUI\n";; //printf("%s \n", name); if (vec) { if (mode==STUB) { puttabs(tabs); cout << "sprintf(bf, \"%d \\n\", " << last << ".size() );\n"; puttabs(tabs); cout << "send(socket, bf, 255, 0); \n"; } else if (mode==TOJS) { ///////// puttabs(tabs); cout << "strcpy(bf, \" \\\"" << vname1 << "\\\": \"); \n"; puttabs(tabs); cout << "lines.push_back(bf); \n"; puttabs(tabs); cout << "bf = new char [255];\n"; puttabs(tabs); cout << "sprintf(bf, \" [ \"); \n"; puttabs(tabs); cout << "lines.push_back(bf); \n"; puttabs(tabs); cout << "bf = new char [255];\n"; } else if (mode==SKEL) { puttabs(tabs); cout << "recv(socket, bf, 255, 0); \n"; puttabs(tabs); cout << "sscanf(bf, \"%d\", &bfi);\n"; puttabs(tabs); if (!firststr("char", invec())) cout << last << ".resize(bfi, *(new "<< invec() <<")); \n"; else cout << last << ".resize(bfi, (new char [255])); \n"; } else if (mode==FROMJS) { // puttabs(tabs); // cout << "recv(socket, bf, 255, 0); \n"; puttabs(tabs); cout << "strcpy(bf, (*val)[0]);" << endl; puttabs(tabs); cout << "val->erase(val->begin());\n"; puttabs(tabs); cout << "sscanf(bf, \"%d \", &bfi); \n"; puttabs(tabs); if (!firststr("char", invec())) cout << last << ".resize(bfi, *(new "<< invec() <<")); \n"; else cout << last << ".resize(bfi, (new char [255])); \n"; } puttabs(tabs); cout << "for (int i"<<subi <<" = 0; i"<< subi<<"<" << last << ".size(); i"<<subi <<"++)" << endl; puttabs(tabs); cout << "{ \n"; tabs++; char *qut = new char [255]; sprintf(qut, "[i%d]", subi); ctype( last ,invec(), qut, subi+1, mode, 1); tabs--; puttabs(tabs); cout << "} \n"; if (mode==TOJS) { puttabs(tabs); cout << "lines[lines.size()-1][strlen(lines[lines.size()-1])-1] = ' '; \n"; puttabs(tabs); cout << "sprintf(bf, \" ], \"); \n"; puttabs(tabs); cout << "lines.push_back(bf); \n"; puttabs(tabs); cout << "bf = new char [255];\n"; } return; } else if (basetype>=0) { //printf("%s \n", name); cbasetype(last1, vname, mode); return; } else { //printf("%s \n", name); // 60 63 65-0 0 0 52 63 50 53 55-0 52 //printf("%d\n",fields.size()); if (mode==TOJS) { if (!inarr) { cout << "sprintf(bf, \"\\\"" << vname << "\\\" : {\");\n"; cout << "lines.push_back(bf); \n"; cout << "bf = new char [255];\n"; } else { cout << "sprintf(bf, \" {\");\n"; cout << "lines.push_back(bf); \n"; cout << "bf = new char [255];\n"; } } for (int i = 0; i<fields.size(); i++) { //printf(" %s %s\n", fields[i], fnames[i]); //cout <<"----------"<< last << "--"<<fields[i] << " " << fnames[i] << endl; ctype(last, fields[i], fnames[i], subi+1, mode, 0); //cout << endl; } if (mode==TOJS) { // delete ',' cout << "lines[lines.size()-1][strlen(lines[lines.size()-1])-2] = ' '; \n"; cout << "sprintf(bf, \"},\" );\n"; cout << "lines.push_back(bf); \n"; cout << "bf = new char [255];\n"; } return; //cout << "none: " << vname << " " << basetype<<endl; } }