client,packet: remove redundant select & return

Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com>
diff --git a/client.go b/client.go
index 5efa6ea..ff7b628 100644
--- a/client.go
+++ b/client.go
@@ -690,43 +690,41 @@
 		if inFlight == 0 {
 			break
 		}
-		select {
-		case res := <-ch:
-			inFlight--
-			if res.err != nil {
-				firstErr = offsetErr{offset: 0, err: res.err}
+		res := <-ch
+		inFlight--
+		if res.err != nil {
+			firstErr = offsetErr{offset: 0, err: res.err}
+			break
+		}
+		reqID, data := unmarshalUint32(res.data)
+		req, ok := reqs[reqID]
+		if !ok {
+			firstErr = offsetErr{offset: 0, err: errors.Errorf("sid: %v not found", reqID)}
+			break
+		}
+		delete(reqs, reqID)
+		switch res.typ {
+		case ssh_FXP_STATUS:
+			if firstErr.err == nil || req.offset < firstErr.offset {
+				firstErr = offsetErr{
+					offset: req.offset,
+					err:    normaliseError(unmarshalStatus(reqID, res.data)),
+				}
 				break
 			}
-			reqID, data := unmarshalUint32(res.data)
-			req, ok := reqs[reqID]
-			if !ok {
-				firstErr = offsetErr{offset: 0, err: errors.Errorf("sid: %v not found", reqID)}
-				break
+		case ssh_FXP_DATA:
+			l, data := unmarshalUint32(data)
+			n := copy(req.b, data[:l])
+			read += n
+			if n < len(req.b) {
+				sendReq(req.b[l:], req.offset+uint64(l))
 			}
-			delete(reqs, reqID)
-			switch res.typ {
-			case ssh_FXP_STATUS:
-				if firstErr.err == nil || req.offset < firstErr.offset {
-					firstErr = offsetErr{
-						offset: req.offset,
-						err:    normaliseError(unmarshalStatus(reqID, res.data)),
-					}
-					break
-				}
-			case ssh_FXP_DATA:
-				l, data := unmarshalUint32(data)
-				n := copy(req.b, data[:l])
-				read += n
-				if n < len(req.b) {
-					sendReq(req.b[l:], req.offset+uint64(l))
-				}
-				if desiredInFlight < maxConcurrentRequests {
-					desiredInFlight++
-				}
-			default:
-				firstErr = offsetErr{offset: 0, err: unimplementedPacketErr(res.typ)}
-				break
+			if desiredInFlight < maxConcurrentRequests {
+				desiredInFlight++
 			}
+		default:
+			firstErr = offsetErr{offset: 0, err: unimplementedPacketErr(res.typ)}
+			break
 		}
 	}
 	// If the error is anything other than EOF, then there
@@ -796,79 +794,77 @@
 			}
 			break
 		}
-		select {
-		case res := <-ch:
-			inFlight--
-			if res.err != nil {
-				firstErr = offsetErr{offset: 0, err: res.err}
+		res := <-ch
+		inFlight--
+		if res.err != nil {
+			firstErr = offsetErr{offset: 0, err: res.err}
+			break
+		}
+		reqID, data := unmarshalUint32(res.data)
+		req, ok := reqs[reqID]
+		if !ok {
+			firstErr = offsetErr{offset: 0, err: errors.Errorf("sid: %v not found", reqID)}
+			break
+		}
+		delete(reqs, reqID)
+		switch res.typ {
+		case ssh_FXP_STATUS:
+			if firstErr.err == nil || req.offset < firstErr.offset {
+				firstErr = offsetErr{offset: req.offset, err: normaliseError(unmarshalStatus(reqID, res.data))}
 				break
 			}
-			reqID, data := unmarshalUint32(res.data)
-			req, ok := reqs[reqID]
-			if !ok {
-				firstErr = offsetErr{offset: 0, err: errors.Errorf("sid: %v not found", reqID)}
-				break
-			}
-			delete(reqs, reqID)
-			switch res.typ {
-			case ssh_FXP_STATUS:
-				if firstErr.err == nil || req.offset < firstErr.offset {
-					firstErr = offsetErr{offset: req.offset, err: normaliseError(unmarshalStatus(reqID, res.data))}
+		case ssh_FXP_DATA:
+			l, data := unmarshalUint32(data)
+			if req.offset == writeOffset {
+				nbytes, err := w.Write(data)
+				copied += int64(nbytes)
+				if err != nil {
+					// We will never receive another DATA with offset==writeOffset, so
+					// the loop will drain inFlight and then exit.
+					firstErr = offsetErr{offset: req.offset + uint64(nbytes), err: err}
 					break
 				}
-			case ssh_FXP_DATA:
-				l, data := unmarshalUint32(data)
-				if req.offset == writeOffset {
-					nbytes, err := w.Write(data)
-					copied += int64(nbytes)
+				if nbytes < int(l) {
+					firstErr = offsetErr{offset: req.offset + uint64(nbytes), err: io.ErrShortWrite}
+					break
+				}
+				switch {
+				case offset > fileSize:
+					desiredInFlight = 1
+				case desiredInFlight < maxConcurrentRequests:
+					desiredInFlight++
+				}
+				writeOffset += uint64(nbytes)
+				for {
+					pendingData, ok := pendingWrites[writeOffset]
+					if !ok {
+						break
+					}
+					// Give go a chance to free the memory.
+					delete(pendingWrites, writeOffset)
+					nbytes, err := w.Write(pendingData)
+					// Do not move writeOffset on error so subsequent iterations won't trigger
+					// any writes.
 					if err != nil {
-						// We will never receive another DATA with offset==writeOffset, so
-						// the loop will drain inFlight and then exit.
-						firstErr = offsetErr{offset: req.offset + uint64(nbytes), err: err}
+						firstErr = offsetErr{offset: writeOffset + uint64(nbytes), err: err}
 						break
 					}
-					if nbytes < int(l) {
-						firstErr = offsetErr{offset: req.offset + uint64(nbytes), err: io.ErrShortWrite}
+					if nbytes < len(pendingData) {
+						firstErr = offsetErr{offset: writeOffset + uint64(nbytes), err: io.ErrShortWrite}
 						break
 					}
-					switch {
-					case offset > fileSize:
-						desiredInFlight = 1
-					case desiredInFlight < maxConcurrentRequests:
-						desiredInFlight++
-					}
 					writeOffset += uint64(nbytes)
-					for {
-						pendingData, ok := pendingWrites[writeOffset]
-						if !ok {
-							break
-						}
-						// Give go a chance to free the memory.
-						delete(pendingWrites, writeOffset)
-						nbytes, err := w.Write(pendingData)
-						// Do not move writeOffset on error so subsequent iterations won't trigger
-						// any writes.
-						if err != nil {
-							firstErr = offsetErr{offset: writeOffset + uint64(nbytes), err: err}
-							break
-						}
-						if nbytes < len(pendingData) {
-							firstErr = offsetErr{offset: writeOffset + uint64(nbytes), err: io.ErrShortWrite}
-							break
-						}
-						writeOffset += uint64(nbytes)
-					}
-				} else {
-					// Don't write the data yet because
-					// this response came in out of order
-					// and we need to wait for responses
-					// for earlier segments of the file.
-					pendingWrites[req.offset] = data
 				}
-			default:
-				firstErr = offsetErr{offset: 0, err: unimplementedPacketErr(res.typ)}
-				break
+			} else {
+				// Don't write the data yet because
+				// this response came in out of order
+				// and we need to wait for responses
+				// for earlier segments of the file.
+				pendingWrites[req.offset] = data
 			}
+		default:
+			firstErr = offsetErr{offset: 0, err: unimplementedPacketErr(res.typ)}
+			break
 		}
 	}
 	if firstErr.err != io.EOF {
@@ -921,28 +917,26 @@
 		if inFlight == 0 {
 			break
 		}
-		select {
-		case res := <-ch:
-			inFlight--
-			if res.err != nil {
-				firstErr = res.err
+		res := <-ch
+		inFlight--
+		if res.err != nil {
+			firstErr = res.err
+			break
+		}
+		switch res.typ {
+		case ssh_FXP_STATUS:
+			id, _ := unmarshalUint32(res.data)
+			err := normaliseError(unmarshalStatus(id, res.data))
+			if err != nil && firstErr == nil {
+				firstErr = err
 				break
 			}
-			switch res.typ {
-			case ssh_FXP_STATUS:
-				id, _ := unmarshalUint32(res.data)
-				err := normaliseError(unmarshalStatus(id, res.data))
-				if err != nil && firstErr == nil {
-					firstErr = err
-					break
-				}
-				if desiredInFlight < maxConcurrentRequests {
-					desiredInFlight++
-				}
-			default:
-				firstErr = unimplementedPacketErr(res.typ)
-				break
+			if desiredInFlight < maxConcurrentRequests {
+				desiredInFlight++
 			}
+		default:
+			firstErr = unimplementedPacketErr(res.typ)
+			break
 		}
 	}
 	// If error is non-nil, then there may be gaps in the data written to
@@ -988,28 +982,26 @@
 		if inFlight == 0 {
 			break
 		}
-		select {
-		case res := <-ch:
-			inFlight--
-			if res.err != nil {
-				firstErr = res.err
+		res := <-ch
+		inFlight--
+		if res.err != nil {
+			firstErr = res.err
+			break
+		}
+		switch res.typ {
+		case ssh_FXP_STATUS:
+			id, _ := unmarshalUint32(res.data)
+			err := normaliseError(unmarshalStatus(id, res.data))
+			if err != nil && firstErr == nil {
+				firstErr = err
 				break
 			}
-			switch res.typ {
-			case ssh_FXP_STATUS:
-				id, _ := unmarshalUint32(res.data)
-				err := normaliseError(unmarshalStatus(id, res.data))
-				if err != nil && firstErr == nil {
-					firstErr = err
-					break
-				}
-				if desiredInFlight < maxConcurrentRequests {
-					desiredInFlight++
-				}
-			default:
-				firstErr = unimplementedPacketErr(res.typ)
-				break
+			if desiredInFlight < maxConcurrentRequests {
+				desiredInFlight++
 			}
+		default:
+			firstErr = unimplementedPacketErr(res.typ)
+			break
 		}
 	}
 	if firstErr == io.EOF {
diff --git a/packet.go b/packet.go
index fba4159..db4fbb3 100644
--- a/packet.go
+++ b/packet.go
@@ -170,9 +170,6 @@
 		return ep, b, err
 	}
 	ep.Data, b, err = unmarshalStringSafe(b)
-	if err != nil {
-		return ep, b, err
-	}
 	return ep, b, err
 }