Example #1
0
int double_queue_init_err(double_queue_t *q, int owner, key_t key1, key_t key2, int flags1, int flags2, int(*error_f)(void*), void *error_a) {
  q->owner = owner;
  q->id1 = q->id2 = -1;
  q->id1 = msgget(key1, flags1);
  if(q->id1 == -1) {
    error("Creation of message queue failed.");
    return error_f(error_a);
  }
  q->id2 = msgget(key2, flags2);
  if(q->id2 == -1) {
    error("Creation of message queue failed.");
    return error_f(error_a);
  }
  return 0;
}
Example #2
0
File: libs.c Project: clarkok/cript
static Value
_lib_char_code_at(VMState *vm, Value value)
{
    Hash *args = value_to_ptr(value);
    CString *string = value_to_string(hash_find(args, 1));
    int index = value_to_int(hash_find(args, 2));

    if (index < 0 || index >= string->length) {
        error_f("Out of range when get char_at(%.*s, %d)", string->length, string->content, index);
        return value_undefined();
    }

    return value_from_int(string->content[index]);
}
Example #3
0
void
print_error_ovh(int priority, int instruction, int error_type, const char *message, ...) {

	va_list az;

	va_start(az, message);
	if(i_syslog_ovh == 1)
	    log_error(priority, instruction, error_type, message, az);
	else
	    error_f(instruction, error_type, message, az);
	va_end(az);

	return;

}
Example #4
0
int
dprintf(int s, char *fmt, ...) {

	char *buffer;
	int n;
	va_list va;

	va_start(va, fmt);
	n = vsprintf(NULL, fmt, va);
	if(n > MAXLEN)
	    error_f(EXIT, STANDARD, "dprintf() failed: string is too long");
	if((buffer = (char *)malloc((n+1) * sizeof(char))) == NULL)
	    error_f(EXIT, PERROR, "malloc() failed");
	(void)vsnprintf(buffer, n, fmt, va);
	*(buffer+n) = '\0';
	va_end(va);

	if(write(s, buffer, n) == -1)
	    n = -1;
	free(buffer);

	return n;

}
Example #5
0
void errors_to_stdio(gsl_vector *solution,
                     double x1, double x2,
                     double y1, double y2)
{
    double  hx = (x2-x1)/64.,
            hy = (y2-y1)/64.,
            i,j,maxerr=0.,err;

    for(i=x1; i<=x2; i+=hx)
        for(j=y1; j<=y2; j+=hy)
            if((err = error_f(i,j))>maxerr) maxerr = err;
    printf("%d %g %f %f %e\n",N*N,intStep,
           maxerr,
           error_L1(error_f,x1,x2,y1,y2),
           error_L2(error_f,x1,x2,y1,y2));
}
Example #6
0
File: libs.c Project: clarkok/cript
static Value
_lib_char_at(VMState *vm, Value value)
{
    Hash *args = value_to_ptr(value);
    CString *string = value_to_string(hash_find(args, 1));
    int index = value_to_int(hash_find(args, 2));

    if (index < 0 || index >= string->length) {
        error_f("Out of range when get char_at(%.*s, %d)", string->length, string->content, index);
        return value_undefined();
    }

    char buffer[2];
    buffer[0] = string->content[index];
    buffer[1] = 0;

    return cvm_get_cstring_value(vm, buffer);
}
Example #7
0
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
	// Init globals from config file
	Gbls::initFromConfig();

	// Create window
	if(D3DWindow::Create(hInstance))
	{
		//init space
		if(SUCCEEDED(GameResources::initState())) {
			ofstream error_f("client_error.log");
			cerr.rdbuf(error_f.rdbuf());

			GameInput input;
			GameResources::input = &input;
#ifndef MYNETWORKOFF  // defined in Gbls

			//networking init
			int c_port = DEFAULT_PORT-1;
			ConfigSettings::config->getValue("network_clientPort", c_port);
			NetworkClient nc(c_port);


			int s_port = DEFAULT_PORT;
			ConfigSettings::config->getValue("network_serverPort", s_port);

			string server_ip = "127.0.0.1";
			ConfigSettings::config->getValue("network_serverIP", server_ip);


			try {
				nc.bindToServer(server_ip, (unsigned short) s_port);
				GameResources::playerNum = nc.getClientID();
			} catch (runtime_error &e) {
				cerr << e.what() << endl;
				bool exception_occured_check_error_log = false;
				assert(exception_occured_check_error_log);
			}



#else
			MessageBox( NULL, L"Network not enabled.\nRecompile with MYNETWORKOFF undefined to enable.", L"CRUSH.exe", MB_OK );
#endif
			// Main loop
			MSG msg;

			//for checking fps
			//DWORD startTime = timeGetTime();
			//DWORD count = 0;

			GameState<Entity> newGameState;

			float framesRendered = 0.0f;
			float updatesReceived = 0.0f;

			for(;;) // "forever"
			{

				input.refreshState();
				input.vibrateThrust(input.input.thrust);
				//for checking fps
				//count++;
				//if(!(count%600)) {
				//	DWORD x = count / ((timeGetTime() - startTime)/1000.0);
				//	std::stringstream os;
				//	os << "FPS:" << x;
				//	string s =os.str();
				//	std::wstring wsTmp(s.begin(), s.end());
				//	MessageBox( NULL, wsTmp.c_str(), wsTmp.c_str(), MB_OK );
				//}


#ifndef MYNETWORKOFF  // defined in Gbls
				try {
					if (!GameResources::debugCamOn) {
						nc.sendToServer(&(input.input));
					}
				} catch (runtime_error &e) {
					cerr << e.what() << endl;
					bool exception_occured_check_error_log = false;
					assert(exception_occured_check_error_log);
				}

				// Get game state from network
				if(nc.newStateAvailable()) {
					try{
						newGameState = nc.getGameState();
						updatesReceived++;
					}  catch (runtime_error &e) {
						cerr << e.what() << endl;
						bool exception_occured_check_error_log = false;
						assert(exception_occured_check_error_log);
					}
				}
#endif

				framesRendered++;
				Gbls::percentMissedFrames = framesRendered - updatesReceived;
				// Process all pending window messages
				while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					TranslateMessage(&msg);
					DispatchMessage(&msg);
				}

				GameResources::updateGameState(newGameState);

				// Render
				if(D3DWindow::Tick())
					break;
			}
		}
	}	
	D3DWindow::Destroy();

	// See if there's any error messsage pending
	const std::wstring& strError = D3DWindow::GetError();
	if(!strError.empty())
	{
		MessageBox(NULL, strError.c_str(), L"Error", MB_OK | MB_ICONERROR);
	}

	return 0;
}
Example #8
0
// Query - sends query and waits for result (client side)
int double_queue_query_err(
      double_queue_t *q,
      void * query, size_t query_length,
      void ** result, size_t *result_length,
      int *exit_after_signal,
      long source, long destination,
      int (*error_f)(void*), void *error_a) {
  // Parameter checks
  if(query_length > 1024 /* maksymalna długość komunikatu */) {
    error("Too long message.");
    return error_f(error_a);
  }
  // Prepare query
  void * real_query = NULL;
  size_t real_query_length;
  char * res = NULL;
  char * answer_buffer = malloc(1024+sizeof(long));
  if(answer_buffer == NULL)
    goto allocation_failed;
  if(combine(&real_query, &real_query_length, "%l %b %l", destination, query, query_length, source) != 0)
    goto allocation_failed;
  // Send query
resend:
  if(msgsnd(q->id1, real_query, real_query_length - sizeof(long), 0) == -1) {
    if(errno == EINTR) {
      log("Interrupted during waiting...");
      if(*exit_after_signal) {
        free(real_query);
        free(answer_buffer);
        return DOUBLE_QUEUE_INTERRUPTED;
      } else {
        goto resend;
      }
    }
    errorp();
    free(real_query);
    free(answer_buffer);
    return error_f(error_a);
  }
  free(real_query);
  // Wait for result
  int ret;
rerecv:
  ret = msgrcv(q->id2, answer_buffer, 1024+sizeof(long) /* nie potrzebujemy adresu zwrotnego */, source, 0);
  if(ret == -1 && errno == EINTR) {
    log("Message receiving interrupted.");
    if(*exit_after_signal) {
      free(answer_buffer);
      return DOUBLE_QUEUE_INTERRUPTED;
    } else {
      goto rerecv;
    }
  }
  if(ret == -1 || ret == 0) {
    errorp();
    free(answer_buffer);
    return error_f(error_a);
  }
  res = malloc(ret);
  if(res == NULL)
    goto allocation_failed;
  memcpy(res, answer_buffer+sizeof(long), ret);
  (*result) = res;
  (*result_length) = ret;
    
  free(answer_buffer);
  return 0;
  
allocation_failed:
  if(real_query) free(real_query);
  if(answer_buffer) free(answer_buffer);
  if(res) free(res);
  error("Allocation failed.");
  return error_f(error_a);
}
Example #9
0
// Listen - receives query and sends result (server side)
int double_queue_listen_err(
      double_queue_t *q,
      int (*server)(void *, size_t, void **, size_t *, int, void*),
      void *arg, int *exit_after_signal,
      int destination,
      int (*error_f)(void*), void *error_a) {
  // Prepare buffers
  void *response = NULL;
  size_t response_length;
  unsigned char * response_buffer = NULL;
  void * query = NULL;
  query = malloc(1024+2*sizeof(long)  /* message + source */);
  if(query == NULL) goto allocation_failed;
  // Receive
  int ret;
rerecv:
  ret = msgrcv(q->id1, query, 1024+2*sizeof(long), destination, 0);
  if(ret == -1 && errno == EINTR) {
    log("Message receiving interrupted.");
    if(*exit_after_signal) {
      free(query);
      return DOUBLE_QUEUE_INTERRUPTED;
    } else {
      goto rerecv;
    }
  }
  if(ret == -1 || ret < sizeof(long)) {
    error("Message received failed.");
    free(query);
		return error_f(error_a);
  }
  long source = 0;
  ret -= sizeof(long);
  memcpy(&source, query + ret + sizeof(long), sizeof(long));
    
  if(server(query+sizeof(long), ret, &response, &response_length, source, arg) == -1) {
    error("Server procedure failed.");
    free(query);
    if(response != NULL) free(response);
    return error_f(error_a);
  }
  if(response_length > 1024) {
    error("Response is too long.");
    free(query);
    free(response);
    return error_f(error_a);
  }
  if(response == NULL) {
    error("No response");
    free(query);
    free(response);
    return error_f(error_a);
  }
  response_buffer = malloc(1024 + sizeof(long) /* address + body */);
  if(response_buffer == NULL)
    goto allocation_failed;
  memcpy(response_buffer, &source, sizeof(long));
  memcpy(response_buffer + sizeof(long), response, response_length);
resend:
  if(msgsnd(q->id2, response_buffer, response_length, 0) == -1) {
    if(errno == EINTR) {
      log("Message sending interrupted.");
      if(*exit_after_signal) {
        free(query);
        free(response);
        free(response_buffer);
        return DOUBLE_QUEUE_INTERRUPTED;
      } else {
        goto resend;
      }
    } else {
      error("Sending of data failed.");
      free(query);
      free(response);
      free(response_buffer);
      return error_f(error_a);
    }
  }
  free(response);
  free(response_buffer);
	free(query);
  return 0;
  
allocation_failed:
  error("Allocation failed.");
  if(query) free(query);
  if(response) free(response);
  if(response_buffer) free(response_buffer);
  return error_f(error_a);
}