@@ -29,7 +29,7 @@ shifts[] = {
2929 182 ,128 ,158 ,208 ,162 ,132 ,167 ,209 ,149 ,241 ,153 ,251 ,237 ,236 ,171 ,195 ,
3030 243 ,233 ,253 ,240 ,194 ,250 ,191 ,155 ,142 ,137 ,245 ,235 ,163 ,242 ,178 ,152 };
3131
32- static cvs_args * args ;
32+ static cvs_session * session ;
3333int DEBUG_RESP = 0 ;
3434
3535/* Taken from the cvs client code */
@@ -73,18 +73,20 @@ static struct hostent *init_sockaddr(struct sockaddr_in *name,
7373 return hostinfo ;
7474}
7575
76- /* Set CVS session arguments */
77- void cvs_init (char * hostname , char * root , char * module , char * user ,
78- char * password , char * dir )
76+ /* Set initial CVS session arguments */
77+ void cvs_init_session (char * hostname , char * root , char * module , char * user ,
78+ char * password , char * dir , bool use_gzip , vcfs_tag tag )
7979{
80- args = (cvs_args * )malloc (sizeof (cvs_args ));
81-
82- args -> hostname = strdup (hostname );
83- args -> root = strdup (root );
84- args -> module = strdup (module );
85- args -> user = strdup (user );
86- args -> password = scramble (password );
87- args -> dir = strdup (dir );
80+ session = (cvs_session * )malloc (sizeof (cvs_session ));
81+
82+ session -> hostname = strdup (hostname );
83+ session -> root = strdup (root );
84+ session -> module = strdup (module );
85+ session -> user = strdup (user );
86+ session -> password = scramble (password );
87+ session -> dir = strdup (dir );
88+ session -> use_gzip = use_gzip ;
89+ * session -> tag = * tag ;
8890}
8991
9092/* Returned a malloc'ed cvs_buff.
@@ -191,7 +193,7 @@ cvs_buff *cvs_get_resp()
191193 struct pollfd fds ;
192194 int result ;
193195
194- fds .fd = args -> sock ;
196+ fds .fd = session -> sock ;
195197 fds .events = POLLIN ; /* Check if there is data waiting to be read */
196198 fds .revents = 0 ;
197199
@@ -219,7 +221,7 @@ cvs_buff *cvs_get_resp()
219221 }
220222
221223 memset (& temp , 0 , CVS_READ_SIZE );
222- n = recv (args -> sock , & temp , CVS_READ_SIZE , 0 );
224+ n = recv (session -> sock , & temp , CVS_READ_SIZE , 0 );
223225
224226 if (DEBUG_RESP )
225227 {
@@ -255,7 +257,7 @@ int cvs_pserver_connect()
255257 return -1 ;
256258 }
257259
258- hostinfo = init_sockaddr (& client_sock , args -> hostname , CVSPORT );
260+ hostinfo = init_sockaddr (& client_sock , session -> hostname , CVSPORT );
259261
260262 if (connect (sock , (struct sockaddr * ) & client_sock ,
261263 sizeof (client_sock )) < 0 )
@@ -267,15 +269,15 @@ int cvs_pserver_connect()
267269 /* Authenticate ourselves with the server */
268270 if (send (sock , begin , strlen (begin ), 0 ) < 0 )
269271 fprintf (stderr , "Can't send\n" );
270- if (send (sock , args -> root , strlen (args -> root ), 0 ) < 0 )
272+ if (send (sock , session -> root , strlen (session -> root ), 0 ) < 0 )
271273 fprintf (stderr , "Can't send\n" );
272274 if (send (sock , "\012" , 1 , 0 ) < 0 )
273275 fprintf (stderr , "Can't send\n" );
274- if (send (sock , args -> user , strlen (args -> user ), 0 ) < 0 )
276+ if (send (sock , session -> user , strlen (session -> user ), 0 ) < 0 )
275277 fprintf (stderr , "Can't send\n" );
276278 if (send (sock , "\012" , 1 , 0 ) < 0 )
277279 fprintf (stderr , "Can't send\n" );
278- if (send (sock , args -> password , strlen (args -> password ), 0 ) < 0 )
280+ if (send (sock , session -> password , strlen (session -> password ), 0 ) < 0 )
279281 fprintf (stderr , "Can't send\n" );
280282 if (send (sock , "\012" , 1 , 0 ) < 0 )
281283 fprintf (stderr , "Can't send\n" );
@@ -291,7 +293,7 @@ int cvs_pserver_connect()
291293 return -1 ;
292294 }
293295
294- args -> sock = sock ;
296+ session -> sock = sock ;
295297 return sock ;
296298}
297299
@@ -329,52 +331,55 @@ int cvs_expand_modules(cvs_buff **resp)
329331 memset (buff , 0 , 1024 );
330332
331333 /*
332- if (chdir(args ->dir) != 0) {
333- fprintf(stderr, "Could not chdir to directory %s\n", args ->dir);
334+ if (chdir(session ->dir) != 0) {
335+ fprintf(stderr, "Could not chdir to directory %s\n", session ->dir);
334336 return 0;
335337 }
336338 */
337339
338- sprintf (& cmd [0 ], "Root %s\012" , args -> root );
339- cvs_send (args -> sock , cmd );
340+ sprintf (& cmd [0 ], "Root %s\012" , session -> root );
341+ cvs_send (session -> sock , cmd );
340342
341- sprintf (& cmd [0 ], "Argument %s\012" , args -> module );
342- cvs_send (args -> sock , cmd );
343+ sprintf (& cmd [0 ], "Argument %s\012" , session -> module );
344+ cvs_send (session -> sock , cmd );
343345
344- cvs_send (args -> sock , "Directory .\012" );
346+ cvs_send (session -> sock , "Directory .\012" );
345347
346- sprintf (& cmd [0 ], "%s\012" , args -> root ); /* Unecessary?? */
347- cvs_send (args -> sock , cmd );
348+ sprintf (& cmd [0 ], "%s\012" , session -> root ); /* Unecessary?? */
349+ cvs_send (session -> sock , cmd );
348350
349- cvs_send (args -> sock , "expand-modules\012" );
351+ cvs_send (session -> sock , "expand-modules\012" );
350352
351353 * resp = cvs_get_resp ();
352354
353355 return 1 ;
354356}
355357
356358/* Checkout the module and get a complete dir listing. */
357- int cvs_co (cvs_buff * * resp )
359+ int cvs_co (cvs_buff * * resp , vcfs_tag tag )
358360{
359361 char cmd [1024 ];
360362 time_t before ;
361363
362- cvs_send (args -> sock , "gzip-file-contents 3\012" );
363-
364+ if (session -> use_gzip )
365+ {
366+ cvs_send (session -> sock , "gzip-file-contents 3\012" );
367+ }
368+
364369 /* TBD - rewrite with sprintf!! */
365370 strcpy (cmd , "Argument " );
366- strcat (cmd , args -> module );
371+ strcat (cmd , session -> module );
367372 strcat (cmd , "\012" );
368- cvs_send (args -> sock , cmd );
373+ cvs_send (session -> sock , cmd );
369374
370375 sprintf (cmd , "Directory .\012" );
371- cvs_send (args -> sock , cmd );
376+ cvs_send (session -> sock , cmd );
372377
373- strcpy (cmd , args -> root );
378+ strcpy (cmd , session -> root );
374379 strcat (cmd , "\012" );
375- cvs_send (args -> sock , cmd );
380+ cvs_send (session -> sock , cmd );
376381
377- cvs_send (args -> sock , "co\012" );
382+ cvs_send (session -> sock , "co\012" );
378383
379384 before = time (NULL );
380385
@@ -394,16 +399,16 @@ int cvs_get_file(vcfs_path name, char *ver, cvs_buff **resp)
394399 split_path (name , & parent , & entry );
395400
396401 sprintf (cmd , "Argument -r\012Argument %s\012" , ver );
397- cvs_send (args -> sock , cmd );
402+ cvs_send (session -> sock , cmd );
398403
399- sprintf (cmd , "Argument -u\012Directory .\012%s/%s\012" , args -> root , parent );
400- cvs_send (args -> sock , cmd );
404+ sprintf (cmd , "Argument -u\012Directory .\012%s/%s\012" , session -> root , parent );
405+ cvs_send (session -> sock , cmd );
401406
402407 sprintf (cmd , "Entry /%s/%s///\012" , entry , ver );
403- cvs_send (args -> sock , cmd );
408+ cvs_send (session -> sock , cmd );
404409
405410 sprintf (cmd , "Argument %s\012update\012" , entry );
406- cvs_send (args -> sock , cmd );
411+ cvs_send (session -> sock , cmd );
407412
408413 * resp = cvs_get_resp ();
409414
@@ -422,16 +427,16 @@ int cvs_get_status(vcfs_path name, char *ver, cvs_buff **resp)
422427 split_path (name , & parent , & entry );
423428
424429 sprintf (cmd , "Argument -r%s\012" , ver );
425- cvs_send (args -> sock , cmd );
430+ cvs_send (session -> sock , cmd );
426431
427- sprintf (cmd , "Directory .\012%s/%s\012" , args -> root , parent );
428- cvs_send (args -> sock , cmd );
432+ sprintf (cmd , "Directory .\012%s/%s\012" , session -> root , parent );
433+ cvs_send (session -> sock , cmd );
429434
430435 sprintf (cmd , "Entry /%s/%s///\012" , entry , ver );
431- cvs_send (args -> sock , cmd );
436+ cvs_send (session -> sock , cmd );
432437
433438 sprintf (cmd , "Argument %s\012log\012" , entry );
434- cvs_send (args -> sock , cmd );
439+ cvs_send (session -> sock , cmd );
435440
436441 * resp = cvs_get_resp ();
437442
@@ -447,14 +452,14 @@ int cvs_get_log(vcfs_path name, cvs_buff **resp)
447452
448453 split_path (name , & parent , & entry );
449454
450- sprintf (cmd , "Directory .\012%s/%s\012" , args -> root , parent );
451- cvs_send (args -> sock , cmd );
455+ sprintf (cmd , "Directory .\012%s/%s\012" , session -> root , parent );
456+ cvs_send (session -> sock , cmd );
452457
453458 //sprintf(cmd, "Entry /%s/%s///\012", entry, ver);
454- //cvs_send(args ->sock, cmd);
459+ //cvs_send(session ->sock, cmd);
455460
456461 sprintf (cmd , "Argument %s\012log\012" , entry );
457- cvs_send (args -> sock , cmd );
462+ cvs_send (session -> sock , cmd );
458463
459464 * resp = cvs_get_resp ();
460465
0 commit comments