X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fcommon%2Fdv-sockser.c;h=ae65585460aaff6c2fe5eccff0dd6a93feb6eeb8;hb=34b47c3828ca8e6d9dcddb2886744fb470e4276c;hp=1e530e2eb0f0466ee55e6f973b6bcb30d3f95834;hpb=21cf617c69031111357d78c1fe10746fe5ef4f6e;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/dv-sockser.c b/sim/common/dv-sockser.c index 1e530e2eb0..ae65585460 100644 --- a/sim/common/dv-sockser.c +++ b/sim/common/dv-sockser.c @@ -1,5 +1,6 @@ /* Serial port emulation using sockets. - Copyright (C) 1998, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1998, 2007, 2008, 2009, 2010, 2011 + Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify @@ -166,7 +167,7 @@ dv_sockser_init (SIM_DESC sd) } sockser_listen_fd = socket (PF_INET, SOCK_STREAM, 0); - if (sockser_listen_fd < 0) + if (sockser_listen_fd == -1) { sim_io_eprintf (sd, "sockser init: unable to get socket: %s\n", strerror (errno)); @@ -174,12 +175,12 @@ dv_sockser_init (SIM_DESC sd) } sockaddr.sin_family = PF_INET; - sockaddr.sin_port = htons(port); + sockaddr.sin_port = htons (port); memcpy (&sockaddr.sin_addr.s_addr, hostent->h_addr, sizeof (struct in_addr)); tmp = 1; - if (setsockopt (sockser_listen_fd, SOL_SOCKET, SO_REUSEADDR, (void*)& tmp, sizeof(tmp)) < 0) + if (setsockopt (sockser_listen_fd, SOL_SOCKET, SO_REUSEADDR, (void*)& tmp, sizeof (tmp)) < 0) { sim_io_eprintf (sd, "sockser init: unable to set SO_REUSEADDR: %s\n", strerror (errno)); @@ -274,7 +275,7 @@ connected_p (SIM_DESC sd) addrlen = sizeof (sockaddr); sockser_fd = accept (sockser_listen_fd, &sockaddr, &addrlen); - if (sockser_fd < 0) + if (sockser_fd == -1) return 0; /* Set non-blocking i/o. */ @@ -298,7 +299,8 @@ dv_sockser_status (SIM_DESC sd) fd_set readfds,writefds; /* status to return if the socket isn't set up, or select fails */ - status = DV_SOCKSER_INPUT_EMPTY | DV_SOCKSER_OUTPUT_EMPTY; + status = DV_SOCKSER_INPUT_EMPTY | DV_SOCKSER_OUTPUT_EMPTY | + DV_SOCKSER_DISCONNECTED; if (! connected_p (sd)) return status; @@ -345,13 +347,14 @@ dv_sockser_status (SIM_DESC sd) } int -dv_sockser_write (SIM_DESC sd, unsigned char c) +dv_sockser_write_buffer (SIM_DESC sd, const unsigned char *buffer, + unsigned nr_bytes) { int n; if (! connected_p (sd)) return -1; - n = write (sockser_fd, &c, 1); + n = write (sockser_fd, buffer, nr_bytes); if (n == -1) { if (errno == EPIPE) @@ -361,9 +364,15 @@ dv_sockser_write (SIM_DESC sd, unsigned char c) } return -1; } - if (n != 1) + if (n != nr_bytes) return -1; - return 1; + return nr_bytes; +} + +int +dv_sockser_write (SIM_DESC sd, unsigned char c) +{ + return dv_sockser_write_buffer (sd, &c, 1); } int