From 612141ad76b47cb3d7ae505795d6a1ca45b77201 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Sat, 28 Jul 2007 17:50:50 -0400 Subject: [PATCH] mount.nfs: use nfs_error instead of fprintf in get_socket() Use nfs_error() where appropriate. I used "goto" here to reduce string splitting and indenting past the point of readability. Gee, it would be nice if C had proper exception handling... Signed-off-by: Chuck Lever Signed-off-by: Neil Brown --- utils/mount/network.c | 100 ++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/utils/mount/network.c b/utils/mount/network.c index 4831990..af37ef6 100644 --- a/utils/mount/network.c +++ b/utils/mount/network.c @@ -171,64 +171,70 @@ static int get_socket(struct sockaddr_in *saddr, unsigned int p_prot, socklen_t namelen = sizeof(laddr); type = (p_prot == IPPROTO_UDP ? SOCK_DGRAM : SOCK_STREAM); - if ((so = socket (AF_INET, type, p_prot)) < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; - if (verbose) { - fprintf(stderr, - "mount: Unable to create %s socket: errno %d (%s)\n", - p_prot == IPPROTO_UDP ? "UDP" : "TCP", - errno, strerror(errno)); - } - return RPC_ANYSOCK; - } + if ((so = socket (AF_INET, type, p_prot)) < 0) + goto err_socket; + laddr.sin_family = AF_INET; laddr.sin_port = 0; laddr.sin_addr.s_addr = htonl(INADDR_ANY); if (resvp) { - if (bindresvport(so, &laddr) < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; - if (verbose) { - fprintf(stderr, - "mount: Unable to bindresvport %s socket: errno %d (%s)\n", - p_prot == IPPROTO_UDP ? "UDP" : "TCP", - errno, strerror(errno)); - } - close(so); - return RPC_ANYSOCK; - } + if (bindresvport(so, &laddr) < 0) + goto err_bindresvport; } else { cc = bind(so, (struct sockaddr *)&laddr, namelen); - if (cc < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; - if (verbose) { - fprintf(stderr, - "mount: Unable to bind to %s socket: errno %d (%s)\n", - p_prot == IPPROTO_UDP ? "UDP" : "TCP", - errno, strerror(errno)); - } - close(so); - return RPC_ANYSOCK; - } + if (cc < 0) + goto err_bind; } if (type == SOCK_STREAM || (conn && type == SOCK_DGRAM)) { cc = connect(so, (struct sockaddr *)saddr, namelen); - if (cc < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; - if (verbose) { - fprintf(stderr, - "mount: Unable to connect to %s:%d, errno %d (%s)\n", - inet_ntoa(saddr->sin_addr), ntohs(saddr->sin_port), - errno, strerror(errno)); - } - close(so); - return RPC_ANYSOCK; - } + if (cc < 0) + goto err_connect; } return so; + +err_socket: + rpc_createerr.cf_stat = RPC_SYSTEMERROR; + rpc_createerr.cf_error.re_errno = errno; + if (verbose) { + nfs_error(_("%s: Unable to create %s socket: errno %d (%s)\n"), + progname, p_prot == IPPROTO_UDP ? _("UDP") : _("TCP"), + errno, strerror(errno)); + } + return RPC_ANYSOCK; + +err_bindresvport: + rpc_createerr.cf_stat = RPC_SYSTEMERROR; + rpc_createerr.cf_error.re_errno = errno; + if (verbose) { + nfs_error(_("%s: Unable to bindresvport %s socket: errno %d" + " (%s)\n"), + progname, p_prot == IPPROTO_UDP ? _("UDP") : _("TCP"), + errno, strerror(errno)); + } + close(so); + return RPC_ANYSOCK; + +err_bind: + rpc_createerr.cf_stat = RPC_SYSTEMERROR; + rpc_createerr.cf_error.re_errno = errno; + if (verbose) { + nfs_error(_("%s: Unable to bind to %s socket: errno %d (%s)\n"), + progname, p_prot == IPPROTO_UDP ? _("UDP") : _("TCP"), + errno, strerror(errno)); + } + close(so); + return RPC_ANYSOCK; + +err_connect: + rpc_createerr.cf_stat = RPC_SYSTEMERROR; + rpc_createerr.cf_error.re_errno = errno; + if (verbose) { + nfs_error(_("%s: Unable to connect to %s:%d, errno %d (%s)\n"), + progname, inet_ntoa(saddr->sin_addr), + ntohs(saddr->sin_port), errno, strerror(errno)); + } + close(so); + return RPC_ANYSOCK; } /* -- 2.39.5