@@ -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_pkt , git_pkt_type * out_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 ;
240- if (out != NULL )
241- * out = pkt ;
239+ if (out_type != NULL )
240+ * out_type = pkt -> type ;
241+ if (out_pkt != NULL )
242+ * out_pkt = 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,17 +253,18 @@ 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
258- if (pkt -> type == GIT_PKT_ACK ) {
259- if (git_vector_insert (& t -> common , pkt ) < 0 )
260- return -1 ;
261- } else {
259+ if (pkt -> type != GIT_PKT_ACK ) {
262260 git__free (pkt );
263261 return 0 ;
264262 }
265263
264+ if (git_vector_insert (& t -> common , pkt ) < 0 ) {
265+ git__free (pkt );
266+ return -1 ;
267+ }
266268 } while (1 );
267269
268270 return 0 ;
@@ -320,7 +322,7 @@ static int wait_while_ack(gitno_buffer *buf)
320322 while (1 ) {
321323 git__free (pkt );
322324
323- if ((error = recv_pkt ((git_pkt * * )& pkt , buf )) < 0 )
325+ if ((error = recv_pkt ((git_pkt * * )& pkt , NULL , buf )) < 0 )
324326 return error ;
325327
326328 if (pkt -> type == GIT_PKT_NAK )
@@ -345,7 +347,8 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
345347 gitno_buffer * buf = & t -> buffer ;
346348 git_buf data = GIT_BUF_INIT ;
347349 git_revwalk * walk = NULL ;
348- int error = -1 , pkt_type ;
350+ int error = -1 ;
351+ git_pkt_type pkt_type ;
349352 unsigned int i ;
350353 git_oid oid ;
351354
@@ -395,16 +398,13 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
395398 if ((error = store_common (t )) < 0 )
396399 goto on_error ;
397400 } else {
398- pkt_type = recv_pkt (NULL , buf );
401+ if ((error = recv_pkt (NULL , & pkt_type , buf )) < 0 )
402+ goto on_error ;
399403
400404 if (pkt_type == GIT_PKT_ACK ) {
401405 break ;
402406 } else if (pkt_type == GIT_PKT_NAK ) {
403407 continue ;
404- } else if (pkt_type < 0 ) {
405- /* recv_pkt returned an error */
406- error = pkt_type ;
407- goto on_error ;
408408 } else {
409409 giterr_set (GITERR_NET , "Unexpected pkt type" );
410410 error = -1 ;
@@ -470,11 +470,10 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
470470
471471 /* Now let's eat up whatever the server gives us */
472472 if (!t -> caps .multi_ack && !t -> caps .multi_ack_detailed ) {
473- pkt_type = recv_pkt (NULL , buf );
473+ if ((error = recv_pkt (NULL , & pkt_type , buf )) < 0 )
474+ return error ;
474475
475- if (pkt_type < 0 ) {
476- return pkt_type ;
477- } else if (pkt_type != GIT_PKT_ACK && pkt_type != GIT_PKT_NAK ) {
476+ if (pkt_type != GIT_PKT_ACK && pkt_type != GIT_PKT_NAK ) {
478477 giterr_set (GITERR_NET , "Unexpected pkt type" );
479478 return -1 ;
480479 }
@@ -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