@@ -209,11 +209,11 @@ int git_smart__detect_caps(git_pkt_ref *pkt, transport_smart_caps *caps, git_vec
209209 return 0 ;
210210}
211211
212- static int recv_pkt (git_pkt * * out , gitno_buffer * buf )
212+ static int recv_pkt (git_pkt * * out , git_pkt_type * pkt_type , gitno_buffer * buf )
213213{
214214 const char * ptr = buf -> data , * line_end = ptr ;
215215 git_pkt * pkt = NULL ;
216- int pkt_type , error = 0 , ret ;
216+ int error = 0 , ret ;
217217
218218 do {
219219 if (buf -> offset > 0 )
@@ -236,13 +236,14 @@ static int recv_pkt(git_pkt **out, gitno_buffer *buf)
236236 } while (error );
237237
238238 gitno_consume (buf , line_end );
239- pkt_type = pkt -> type ;
239+ if (pkt_type )
240+ * pkt_type = pkt -> type ;
240241 if (out != NULL )
241242 * out = pkt ;
242243 else
243244 git__free (pkt );
244245
245- return pkt_type ;
246+ return error ;
246247}
247248
248249static int store_common (transport_smart * t )
@@ -252,7 +253,7 @@ static int store_common(transport_smart *t)
252253 int error ;
253254
254255 do {
255- if ((error = recv_pkt (& pkt , buf )) < 0 )
256+ if ((error = recv_pkt (& pkt , NULL , buf )) < 0 )
256257 return error ;
257258
258259 if (pkt -> type == GIT_PKT_ACK ) {
@@ -320,7 +321,7 @@ static int wait_while_ack(gitno_buffer *buf)
320321 while (1 ) {
321322 git__free (pkt );
322323
323- if ((error = recv_pkt ((git_pkt * * )& pkt , buf )) < 0 )
324+ if ((error = recv_pkt ((git_pkt * * )& pkt , NULL , buf )) < 0 )
324325 return error ;
325326
326327 if (pkt -> type == GIT_PKT_NAK )
@@ -345,7 +346,8 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
345346 gitno_buffer * buf = & t -> buffer ;
346347 git_buf data = GIT_BUF_INIT ;
347348 git_revwalk * walk = NULL ;
348- int error = -1 , pkt_type ;
349+ int error = -1 ;
350+ git_pkt_type pkt_type ;
349351 unsigned int i ;
350352 git_oid oid ;
351353
@@ -395,16 +397,13 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
395397 if ((error = store_common (t )) < 0 )
396398 goto on_error ;
397399 } else {
398- pkt_type = recv_pkt (NULL , buf );
399-
400- if (pkt_type == GIT_PKT_ACK ) {
400+ error = recv_pkt (NULL , & pkt_type , buf );
401+ if (error < 0 ) {
402+ goto on_error ;
403+ } else if (pkt_type == GIT_PKT_ACK ) {
401404 break ;
402405 } else if (pkt_type == GIT_PKT_NAK ) {
403406 continue ;
404- } else if (pkt_type < 0 ) {
405- /* recv_pkt returned an error */
406- error = pkt_type ;
407- goto on_error ;
408407 } else {
409408 giterr_set (GITERR_NET , "Unexpected pkt type" );
410409 error = -1 ;
@@ -470,10 +469,10 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
470469
471470 /* Now let's eat up whatever the server gives us */
472471 if (!t -> caps .multi_ack && !t -> caps .multi_ack_detailed ) {
473- pkt_type = recv_pkt (NULL , buf );
472+ error = recv_pkt (NULL , & pkt_type , buf );
474473
475- if (pkt_type < 0 ) {
476- return pkt_type ;
474+ if (error < 0 ) {
475+ return error ;
477476 } else if (pkt_type != GIT_PKT_ACK && pkt_type != GIT_PKT_NAK ) {
478477 giterr_set (GITERR_NET , "Unexpected pkt type" );
479478 return -1 ;
@@ -594,7 +593,7 @@ int git_smart__download_pack(
594593 goto done ;
595594 }
596595
597- if ((error = recv_pkt (& pkt , buf )) >= 0 ) {
596+ if ((error = recv_pkt (& pkt , NULL , buf )) >= 0 ) {
598597 /* Check cancellation after network call */
599598 if (t -> cancelled .val ) {
600599 giterr_clear ();
0 commit comments