Esempio n. 1
0
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;	
	}
}
Esempio n. 2
0
// '*' 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;	
		}	
}