bessaconstr: Avoid duplicate map lookups.
[libfirm] / ir / lpp / lpp_net.c
index de91540..6af2636 100644 (file)
@@ -1,14 +1,29 @@
-/**
- * @file   lpp_net.c
- * @date   19.07.2005
- * @author Sebastian Hack
+/*
+ * Copyright (C) 2005-2011 University of Karlsruhe.  All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
  *
- * A client for an lpp solving server.
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
  *
- * Copyright (C) 2005 Universitaet Karlsruhe
- * Released under the GPL
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
  */
 
+/**
+ * @file
+ * @brief   A client for an lpp solving server.
+ * @author  Sebastian Hack
+ */
+#include "config.h"
+
 #ifdef _WIN32
 #include <winsock.h>
 #include <io.h>
@@ -23,7 +38,6 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <netdb.h>
-
 #include <unistd.h>
 
 /* solaris fix */
 #include "lpp_net.h"
 #include "lpp_t.h"
 #include "lpp_comm.h"
+#include "xmalloc.h"
 
 #ifdef _WIN32
-static int winsock_init(void) {
+static int winsock_init(void)
+{
        WORD wVersionRequested;
        WSADATA wsaData;
        int err;
@@ -80,31 +96,31 @@ static int winsock_init(void) {
 
 static int connect_tcp(const char *host, uint16_t port)
 {
-  struct hostent     *phe;
-  struct protoent    *ppe;
-  struct sockaddr_in sin;
-  int s;
+       struct hostent     *phe;
+       struct protoent    *ppe;
+       struct sockaddr_in sin;
+       int s;
 
 #ifdef _WIN32
-  winsock_init();
+       winsock_init();
 #endif
 
-  memset(&sin, 0, sizeof(sin));
-  sin.sin_family = AF_INET;
-  sin.sin_port   = htons(port);
+       memset(&sin, 0, sizeof(sin));
+       sin.sin_family = AF_INET;
+       sin.sin_port   = htons(port);
 
-  if ((phe = gethostbyname(host)))
-    memcpy(&sin.sin_addr, phe->h_addr, phe->h_length);
-  else if((sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE) {
-    lpp_print_err("cannot get host entry for %s", host);
-    return -1;
-  }
+       if ((phe = gethostbyname(host)))
+               memcpy(&sin.sin_addr, phe->h_addr_list[0], phe->h_length);
+       else if((sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE) {
+               lpp_print_err("cannot get host entry for %s", host);
+               return -1;
+       }
 
-  ppe = getprotobyname("tcp");
-  ERRNO_CHECK_RETURN(s = socket(PF_INET, SOCK_STREAM, ppe->p_proto), <, 0, -1);
-  ERRNO_CHECK_RETURN(connect(s, (struct sockaddr *) &sin, sizeof(sin)), <, 0, -1);
+       ppe = getprotobyname("tcp");
+       ERRNO_CHECK_RETURN(s = socket(PF_INET, SOCK_STREAM, ppe->p_proto), <, 0, -1);
+       ERRNO_CHECK_RETURN(connect(s, (struct sockaddr *) &sin, sizeof(sin)), <, 0, -1);
 
-  return s;
+       return s;
 }
 
 char **lpp_get_solvers(const char *host)
@@ -121,7 +137,7 @@ char **lpp_get_solvers(const char *host)
        lpp_writel(comm, LPP_CMD_SOLVERS);
        lpp_flush(comm);
        n = lpp_readl(comm);
-       res = malloc((n + 1) * sizeof(res[0]));
+       res = XMALLOCN(char*, n+1);
        res[n] = NULL;
 
        if(n > 0) {
@@ -180,12 +196,12 @@ void lpp_solve_net(lpp_t *lpp, const char *host, const char *solver)
        t_send = ir_timer_new();
        t_recv = ir_timer_new();
 
-       ir_timer_push(t_send);
+       ir_timer_start(t_send);
        lpp_writel(comm, LPP_CMD_PROBLEM);
        lpp_serialize(comm, lpp, 1);
        lpp_serialize_values(comm, lpp, lpp_value_start);
        lpp_flush(comm);
-       ir_timer_pop();
+       ir_timer_stop(t_send);
        lpp->send_time = ir_timer_elapsed_usec(t_send);
 
        ready = 0;
@@ -196,7 +212,7 @@ void lpp_solve_net(lpp_t *lpp, const char *host, const char *solver)
                                ir_timer_push(t_recv);
                                lpp_deserialize_stats(comm, lpp);
                                lpp_deserialize_values(comm, lpp, lpp_value_solution);
-                               ir_timer_pop();
+                               ir_timer_stop(t_recv);
                                lpp->recv_time = ir_timer_elapsed_usec(t_recv);
                                ready = 1;
                                break;