Ejemplo n.º 1
0
// adapted from http://stackoverflow.com/questions/2302969/how-to-implement-char-ftoafloat-num-without-sprintf-library-function-i/2303011#2303011
char*  ftoa(double num, char* str)
{
   int whole_part = num;
   int digit;
   int log_value = dlog10(num), index = log_value;
   long wt =0;
   double fraction_part  = num - whole_part;

	// go in reverse order
   	int i = 0;
	while (whole_part != 0) {
		int remainder = whole_part % 10;
		str[i++] = remainder + '0';
		whole_part = whole_part / 10;
	}
	strrev(str);

   index = log_value + 1;
   str[index] = '.';


   double tmp1 = fraction_part,  tmp =0;

   //Extract the fraction part from  num
   for( int i= 1; i < PRECISION; i++)
   {
      wt = 10; 
      tmp  = tmp1 * wt;
      digit = tmp;

      //Store digit in string
      str[++index] = digit + 48;           // ASCII value of digit  = digit + 48
      tmp1 = tmp - digit;
   }    

   return str;
}
Ejemplo n.º 2
0
int FileService::on_read(Socket *socket)
{
    dlog10("into int FileService::on_read(Socket *socket)");

	FifoBuffer::Packet packet;

	while (socket->get_one_packet(&packet))
	{
		char *data = (char*) packet.data;

		bigheader *header = (bigheader*) data;
		int cmd = ntohs(header->cmd);

		//    printf("cmd = %d \n", cmd);
		if (cmd == BIG_OPEN_REQ)
		{
			//不验证,直接默认全部通过
			bigloginrspall resp;
			socket->send((const char*) &resp, sizeof(bigloginrspall));
		}
		else if (cmd == BIG_WRITE_REQ)
		{
			bigwritereq * req = (bigwritereq*) (data + sizeof(bigheader));
			        printf("write file %s \n", req->path);
			WriteFile((const char*) (req->path), (const char*) ((char*) req + sizeof(bigwritereq)),
					ntohl(req->data_len));
			bigwriterspall resp(0);
			socket->send((const char*) &resp, sizeof(resp));
		}
		else if (cmd == BIG_READ_REQ)
		{

			bigreadreq *req = (bigreadreq*) (data + sizeof(bigheader));
			int len = 0;
			char *buffer = ReadFile((const char*) (req->path), len);
			if (buffer == NULL)
			{
				bigreadrspall resp(1, 0);
				socket->send((const char*) &resp, sizeof(resp));
			}
			else
			{
				bigreadrspall resp(0, len);
				char *data = (char*) malloc(sizeof(bigreadrspall) + len);
				if (data == NULL)
				{
					resp.rsp.result = 1;
					resp.rsp.data_len = 0;
					socket->send((const char*) &resp, sizeof(resp));
				}
				else
				{
					memcpy(data, (void*) &resp, sizeof(bigreadrspall));
					memcpy(data + sizeof(bigreadrspall), data, len);
					socket->send((const char*) &resp, sizeof(resp) + len);
					free(data);
				}
			}
		}
		else if (cmd == BIG_CLOSE_REQ)
		{

		}
		else
		{
			printf("cmd = %d , can not parse \n", cmd);
		}
	}
	return FSM_END;
}