1 /* Generated by CIL v. 1.3.6 */
2 /* print_CIL_Input is true */
3
4 typedef unsigned int size_t;
5 typedef long long __quad_t;
6 typedef long __off_t;
7 typedef __quad_t __off64_t;
8 typedef long __time_t;
9 typedef __time_t time_t;
10 struct __anonstruct___sigset_t_7 {
11 unsigned long __val[1024U / (8U * sizeof(unsigned long ))] ;
12 };
13 typedef struct __anonstruct___sigset_t_7 __sigset_t;
14 typedef __sigset_t sigset_t;
15 typedef unsigned long pthread_t;
16 union __anonunion_pthread_attr_t_9 {
17 char __size[36] ;
18 long __align ;
19 };
20 typedef union __anonunion_pthread_attr_t_9 pthread_attr_t;
21 struct _IO_FILE;
22 typedef struct _IO_FILE FILE;
23 typedef void _IO_lock_t;
24 struct _IO_marker {
25 struct _IO_marker *_next ;
26 struct _IO_FILE *_sbuf ;
27 int _pos ;
28 };
29 struct _IO_FILE {
30 int _flags ;
31 char *_IO_read_ptr ;
32 char *_IO_read_end ;
33 char *_IO_read_base ;
34 char *_IO_write_base ;
35 char *_IO_write_ptr ;
36 char *_IO_write_end ;
37 char *_IO_buf_base ;
38 char *_IO_buf_end ;
39 char *_IO_save_base ;
40 char *_IO_backup_base ;
41 char *_IO_save_end ;
42 struct _IO_marker *_markers ;
43 struct _IO_FILE *_chain ;
44 int _fileno ;
45 int _flags2 ;
46 __off_t _old_offset ;
47 unsigned short _cur_column ;
48 signed char _vtable_offset ;
49 char _shortbuf[1] ;
50 _IO_lock_t *_lock ;
51 __off64_t _offset ;
52 void *__pad1 ;
53 void *__pad2 ;
54 void *__pad3 ;
55 void *__pad4 ;
56 size_t __pad5 ;
57 int _mode ;
58 char _unused2[(15U * sizeof(int ) - 4U * sizeof(void *)) - sizeof(size_t )] ;
59 };
60 typedef unsigned short uint16_t;
61 typedef unsigned int uint32_t;
62 typedef unsigned short sa_family_t;
63 struct sockaddr {
64 sa_family_t sa_family ;
65 char sa_data[14] ;
66 };
67 typedef uint16_t in_port_t;
68 typedef uint32_t in_addr_t;
69 struct in_addr {
70 in_addr_t s_addr ;
71 };
72 struct sockaddr_in {
73 sa_family_t sin_family ;
74 in_port_t sin_port ;
75 struct in_addr sin_addr ;
76 unsigned char sin_zero[((sizeof(struct sockaddr ) - sizeof(unsigned short )) - sizeof(in_port_t )) - sizeof(struct in_addr )] ;
77 };
78 struct request {
79 char host[1024] ;
80 char url[1024] ;
81 char file[512] ;
82 char lfile[512] ;
83 char ip[16] ;
84 char username[512] ;
85 char password[512] ;
86 int port ;
87 int clength ;
88 unsigned char proto ;
89 };
90 struct thread_data {
91 struct sockaddr_in sin ;
92 char getstr[256] ;
93 long soffset ;
94 long foffset ;
95 long offset ;
96 long clength ;
97 int fd ;
98 pthread_t tid ;
99 unsigned char status ;
100 };
101 struct hist_data {
102 struct request req ;
103 int nthreads ;
104 int bwritten ;
105 struct thread_data wthread[25] ;
106 };
107 typedef int __ssize_t;
108 typedef __ssize_t ssize_t;
109 typedef __builtin_va_list __gnuc_va_list;
110 typedef __gnuc_va_list va_list;
111 typedef unsigned int __socklen_t;
112 typedef __socklen_t socklen_t;
113 struct hostent {
114 char *h_name ;
115 char **h_aliases ;
116 int h_addrtype ;
117 int h_length ;
118 char **h_addr_list ;
119 };
120 struct __pthread_internal_slist {
121 struct __pthread_internal_slist *__next ;
122 };
123 typedef struct __pthread_internal_slist __pthread_slist_t;
124 union __anonunion____missing_field_name_19 {
125 int __spins ;
126 __pthread_slist_t __list ;
127 };
128 struct __pthread_mutex_s {
129 int __lock ;
130 unsigned int __count ;
131 int __owner ;
132 int __kind ;
133 unsigned int __nusers ;
134 union __anonunion____missing_field_name_19 __annonCompField1 ;
135 };
136 union __anonunion_pthread_mutex_t_18 {
137 struct __pthread_mutex_s __data ;
138 char __size[24] ;
139 long __align ;
140 };
141 typedef union __anonunion_pthread_mutex_t_18 pthread_mutex_t;
142 #pragma merger(0,"/tmp/cil-96Ono5Br.i","-g,-Wall,-W,-pedantic")
143 extern __attribute__((__nothrow__)) int *__errno_location(void) __attribute__((__const__)) ;
144 extern char *optarg ;
145 extern int optind ;
146 extern __attribute__((__nothrow__)) int getopt(int ___argc , char * const *___argv ,
147 char const *__shortopts ) ;
148 extern __attribute__((__nothrow__)) int atoi(char const *__nptr ) __attribute__((__pure__,
149 __nonnull__(1))) ;
150 extern __attribute__((__nothrow__)) void *calloc(size_t __nmemb , size_t __size ) __attribute__((__malloc__)) ;
151 extern __attribute__((__nothrow__, __noreturn__)) void exit(int __status ) ;
152 extern struct _IO_FILE *stderr ;
153 extern int fprintf(FILE * __restrict __stream , char const * __restrict __format
154 , ...) ;
155 extern int printf(char const * __restrict __format , ...) ;
156 extern __attribute__((__nothrow__)) char *strncpy(char * __restrict __dest , char const * __restrict __src ,
157 size_t __n ) __attribute__((__nonnull__(1,2))) ;
158 extern __attribute__((__nothrow__)) char *strdup(char const *__s ) __attribute__((__nonnull__(1),
159 __malloc__)) ;
160 extern __attribute__((__nothrow__)) char *strerror(int __errnum ) ;
161 extern __attribute__((__nothrow__)) int sigemptyset(sigset_t *__set ) __attribute__((__nonnull__(1))) ;
162 extern __attribute__((__nothrow__)) int sigaddset(sigset_t *__set , int __signo ) __attribute__((__nonnull__(1))) ;
163 extern __attribute__((__nothrow__)) int pthread_sigmask(int __how , __sigset_t const * __restrict __newmask ,
164 __sigset_t * __restrict __oldmask ) ;
165 extern __attribute__((__nothrow__)) int pthread_create(pthread_t * __restrict __newthread ,
166 pthread_attr_t const * __restrict __attr ,
167 void *(*__start_routine)(void * ) ,
168 void * __restrict __arg ) __attribute__((__nonnull__(1,3))) ;
169 void parse_url(char *url , struct request *req___0 ) ;
170 void usage(void) ;
171 void Log(char *fmt , ...) ;
172 time_t t_start ;
173 time_t t_finish ;
174 int read_log(struct hist_data *h ) ;
175 void get(struct request *req___0 ) ;
176 void resume_get(struct hist_data *h ) ;
177 sigset_t signal_set ;
178 void *signal_waiter(void *arg ) ;
179 char *fullurl ;
180 int nthreads ;
181 int fsuggested = 0;
182 struct request *req ;
183 pthread_t hthread ;
184 struct thread_data *wthread ;
185 int main(int argc , char **argv )
186 { int c ;
187 int error ;
188 int ret ;
189 struct hist_data h ;
190 int retlog ;
191 void *tmp ;
192 int *tmp___0 ;
193 char *tmp___1 ;
194
195 {
196 error = 0;
197 tmp = calloc(1U, sizeof(struct request ));
198 req = (struct request *)tmp;
199 sigemptyset(& signal_set);
200 sigaddset(& signal_set, 2);
201 sigaddset(& signal_set, 14);
202 pthread_sigmask(0, (__sigset_t const * __restrict )(& signal_set), (__sigset_t * __restrict )((void *)0));
203 ret = pthread_create((pthread_t * __restrict )(& hthread), (pthread_attr_t const * __restrict )((void *)0),
204 & signal_waiter, (void * __restrict )((void *)0));
205 if (ret != 0) {
206 tmp___0 = __errno_location();
207 tmp___1 = strerror(*tmp___0);
208 fprintf((FILE * __restrict )stderr, (char const * __restrict )"main: cannot create signal_waiter thread: %s, exiting...\n",
209 tmp___1);
210 exit(-1);
211 }
212 while (1) {
213 if (! error) {
214 c = getopt(argc, (char * const *)argv, "p:l:n:hfv");
215 if (! (c != -1)) {
216 break;
217 }
218 } else {
219 break;
220 }
221 switch (c) {
222 case 112:
223 req->port = atoi((char const *)optarg);
224 break;
225 case 102:
226 fsuggested = 1;
227 break;
228 case 108:
229 strncpy((char * __restrict )(req->lfile), (char const * __restrict )optarg,
230 512U);
231 break;
232 case 110:
233 nthreads = atoi((char const *)optarg);
234 if (nthreads > 25) {
235 Log((char *)"Error: Maximum # of threads allowed is %d\n", 25);
236 nthreads = 0;
237 }
238 break;
239 case 104:
240 printf((char const * __restrict )"%s\n", "EnderUNIX Aget v0.4");
241 usage();
242 exit(0);
243 break;
244 case 118:
245 printf((char const * __restrict )"%s\nby Murat BALABAN <murat@enderunix.org>\n",
246 "EnderUNIX Aget v0.4");
247 exit(0);
248 break;
249 default:
250 error = 1;
251 usage();
252 exit(1);
253 break;
254 }
255 }
256 if (error) {
257 usage();
258 exit(1);
259 }
260 if (fsuggested == 1) {
261 if (nthreads == 0) {
262 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\nERROR: -f and -n should be used together!, exiting...\n\n");
263 usage();
264 exit(1);
265 }
266 }
267 if (argc == 2) {
268 fullurl = strdup((char const *)*(argv + 1));
269 } else {
270 if (optind < argc) {
271 if (argc > 2) {
272 fullurl = strdup((char const *)*(argv + optind));
273 } else {
274 usage();
275 exit(1);
276 }
277 } else {
278 if (optind == argc) {
279 usage();
280 exit(1);
281 }
282 }
283 }
284 parse_url(fullurl, req);
285 retlog = read_log(& h);
286 if (retlog != -1) {
287 resume_get(& h);
288 } else {
289 get(req);
290 }
291 return (0);
292 }
293 }
294 #pragma merger(0,"/tmp/cil-vCwIYZEB.i","-g,-Wall,-W,-pedantic")
295 extern __attribute__((__nothrow__)) int ( /* format attribute */ snprintf)(char * __restrict __s ,
296 size_t __maxlen ,
297 char const * __restrict __format
298 , ...) ;
299 extern __attribute__((__nothrow__)) void *malloc(size_t __size ) __attribute__((__malloc__)) ;
300 extern __attribute__((__nothrow__)) void free(void *__ptr ) ;
301 extern __attribute__((__nothrow__)) void *memcpy(void * __restrict __dest , void const * __restrict __src ,
302 size_t __n ) __attribute__((__nonnull__(1,2))) ;
303 extern __attribute__((__nothrow__)) size_t strlen(char const *__s ) __attribute__((__pure__,
304 __nonnull__(1))) ;
305 extern __attribute__((__nothrow__)) time_t time(time_t *__timer ) ;
306 extern int pthread_join(pthread_t __th , void **__thread_return ) ;
307 extern int pthread_cancel(pthread_t __th ) ;
308 extern __attribute__((__nothrow__)) __off_t lseek(int __fd , __off_t __offset , int __whence ) ;
309 extern int close(int __fd ) ;
310 extern ssize_t write(int __fd , void const *__buf , size_t __n ) ;
311 extern __attribute__((__nothrow__)) int dup(int __fd ) ;
312 extern int open(char const *__file , int __oflag , ...) __attribute__((__nonnull__(1))) ;
313 extern __attribute__((__nothrow__)) uint16_t htons(uint16_t __hostshort ) __attribute__((__const__)) ;
314 extern __attribute__((__nothrow__)) in_addr_t inet_addr(char const *__cp ) ;
315 void http_head_req(struct request *req___0 ) ;
316 int calc_offset(int total , int part , int nthreads___0 ) ;
317 int numofthreads(int size ) ;
318 void *http_get(void *arg ) ;
319 void get(struct request *req___0 )
320 { int i ;
321 int ret ;
322 int fd ;
323 int diff_sec ;
324 int nok ;
325 long soffset ;
326 long foffset ;
327 char *fmt ;
328 void *tmp ;
329 int *tmp___0 ;
330 char *tmp___1 ;
331 int *tmp___2 ;
332 char *tmp___3 ;
333 size_t tmp___4 ;
334 int *tmp___5 ;
335 char *tmp___6 ;
336 __off_t tmp___7 ;
337 int *tmp___8 ;
338 char *tmp___9 ;
339 ssize_t tmp___10 ;
340 void *tmp___11 ;
341 int tmp___12 ;
342 int tmp___13 ;
343
344 {
345 nok = 0;
346 if ((int )req___0->proto == 255) {
347 http_head_req(req___0);
348 }
349 ret = numofthreads(req___0->clength);
350 if (fsuggested == 0) {
351 if (ret == 0) {
352 nthreads = 1;
353 } else {
354 nthreads = ret;
355 }
356 }
357 tmp = malloc((unsigned int )nthreads * sizeof(struct thread_data ));
358 wthread = (struct thread_data *)tmp;
359 Log((char *)"Downloading %s (%d bytes) from site %s(%s:%d). Number of Threads: %d",
360 req___0->url, req___0->clength, req___0->host, req___0->ip, req___0->port, nthreads);
361 tmp___4 = strlen((char const *)(req___0->lfile));
362 if (tmp___4 != 0U) {
363 fd = open((char const *)(req___0->lfile), 66, 448);
364 if (fd == -1) {
365 tmp___0 = __errno_location();
366 tmp___1 = strerror(*tmp___0);
367 fprintf((FILE * __restrict )stderr, (char const * __restrict )"get: cannot open file %s for writing: %s\n",
368 req___0->lfile, tmp___1);
369 exit(1);
370 }
371 } else {
372 fd = open((char const *)(req___0->file), 66, 448);
373 if (fd == -1) {
374 tmp___2 = __errno_location();
375 tmp___3 = strerror(*tmp___2);
376 fprintf((FILE * __restrict )stderr, (char const * __restrict )"get: cannot open file %s for writing: %s\n",
377 req___0->lfile, tmp___3);
378 exit(1);
379 }
380 }
381 tmp___7 = lseek(fd, (long )(req___0->clength - 1), 0);
382 if (tmp___7 == -1L) {
383 tmp___5 = __errno_location();
384 tmp___6 = strerror(*tmp___5);
385 fprintf((FILE * __restrict )stderr, (char const * __restrict )"get: couldn\'t lseek: %s\n",
386 tmp___6);
387 exit(1);
388 }
389 tmp___10 = write(fd, (void const *)"0", 1U);
390 if (tmp___10 == -1) {
391 tmp___8 = __errno_location();
392 tmp___9 = strerror(*tmp___8);
393 fprintf((FILE * __restrict )stderr, (char const * __restrict )"get: couldn\'t allocate space for download file: %s\n",
394 tmp___9);
395 exit(1);
396 }
397 tmp___11 = calloc(254U, sizeof(char ));
398 fmt = (char *)tmp___11;
399 time(& t_start);
400 i = 0;
401 while (i < nthreads) {
402 tmp___12 = calc_offset(req___0->clength, i, nthreads);
403 soffset = (long )tmp___12;
404 tmp___13 = calc_offset(req___0->clength, i + 1, nthreads);
405 foffset = (long )tmp___13;
406 (wthread + i)->soffset = soffset;
407 if (i == nthreads - 1) {
408 (wthread + i)->foffset = (long )req___0->clength;
409 } else {
410 (wthread + i)->foffset = foffset;
411 }
412 (wthread + i)->sin.sin_family = (unsigned short)2;
413 (wthread + i)->sin.sin_addr.s_addr = inet_addr((char const *)(req___0->ip));
414 (wthread + i)->sin.sin_port = htons((unsigned short )req___0->port);
415 (wthread + i)->fd = dup(fd);
416 (wthread + i)->clength = (long )req___0->clength;
417 snprintf((char * __restrict )fmt, 256U, (char const * __restrict )"GET %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nRange: bytes=%ld-\r\nConnection: close\r\n\r\n",
418 req___0->url, req___0->host, "EnderUNIX Aget v0.4", soffset);
419 strncpy((char * __restrict )((wthread + i)->getstr), (char const * __restrict )fmt,
420 256U);
421 pthread_create((pthread_t * __restrict )(& (wthread + i)->tid), (pthread_attr_t const * __restrict )((void *)0),
422 & http_get, (void * __restrict )(wthread + i));
423 i ++;
424 }
425 free((void *)fmt);
426 i = 0;
427 while (i < nthreads) {
428 pthread_join((wthread + i)->tid, (void **)((void *)0));
429 if ((int )(wthread + i)->status == 255) {
430 nok ++;
431 }
432 i ++;
433 }
434 if (nok == nthreads) {
435 pthread_cancel(hthread);
436 } else {
437 pthread_join(hthread, (void **)((void *)0));
438 }
439 time(& t_finish);
440 diff_sec = (int )(t_finish - t_start);
441 if (diff_sec == 0) {
442 diff_sec = 1;
443 }
444 Log((char *)"Download completed, job completed in %d seconds. (%d Kb/sec)", diff_sec,
445 (req___0->clength / diff_sec) / 1024);
446 Log((char *)"Shutting down...");
447 close(fd);
448 return;
449 }
450 }
451 void resume_get(struct hist_data *h )
452 { int i ;
453 int fd ;
454 int diff_sec ;
455 int nok ;
456 char *fmt ;
457 void *tmp ;
458 void *tmp___0 ;
459 int *tmp___1 ;
460 char *tmp___2 ;
461 int *tmp___3 ;
462 char *tmp___4 ;
463 size_t tmp___5 ;
464
465 {
466 nok = 0;
467 nthreads = h->nthreads;
468 tmp = calloc(254U, sizeof(char ));
469 fmt = (char *)tmp;
470 tmp___0 = malloc((unsigned int )nthreads * sizeof(struct thread_data ));
471 wthread = (struct thread_data *)tmp___0;
472 memcpy((void * __restrict )req, (void const * __restrict )(& h->req), sizeof(struct request ));
473 memcpy((void * __restrict )wthread, (void const * __restrict )(h->wthread),
474 sizeof(struct thread_data ) * (unsigned int )nthreads);
475 Log((char *)"Resuming download %s (%d bytes) from site %s(%s:%d). Number of Threads: %d",
476 req->url, req->clength, req->host, req->ip, req->port, nthreads);
477 tmp___5 = strlen((char const *)(req->lfile));
478 if (tmp___5 != 0U) {
479 fd = open((char const *)(req->lfile), 2, 448);
480 if (fd == -1) {
481 tmp___1 = __errno_location();
482 tmp___2 = strerror(*tmp___1);
483 fprintf((FILE * __restrict )stderr, (char const * __restrict )"get: cannot open file %s for writing: %s\n",
484 req->lfile, tmp___2);
485 exit(1);
486 }
487 } else {
488 fd = open((char const *)(req->file), 2, 448);
489 if (fd == -1) {
490 tmp___3 = __errno_location();
491 tmp___4 = strerror(*tmp___3);
492 fprintf((FILE * __restrict )stderr, (char const * __restrict )"get: cannot open file %s for writing: %s\n",
493 req->lfile, tmp___4);
494 exit(1);
495 }
496 }
497 time(& t_start);
498 i = 0;
499 while (i < nthreads) {
500 (wthread + i)->soffset = (wthread + i)->offset;
501 (wthread + i)->fd = dup(fd);
502 snprintf((char * __restrict )fmt, 256U, (char const * __restrict )"GET %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nRange: bytes=%ld-\r\nConnection: close\r\n\r\n",
503 req->url, req->host, "EnderUNIX Aget v0.4", (wthread + i)->offset);
504 strncpy((char * __restrict )((wthread + i)->getstr), (char const * __restrict )fmt,
505 256U);
506 pthread_create((pthread_t * __restrict )(& (wthread + i)->tid), (pthread_attr_t const * __restrict )((void *)0),
507 & http_get, (void * __restrict )(wthread + i));
508 i ++;
509 }
510 i = 0;
511 while (i < nthreads) {
512 pthread_join((wthread + i)->tid, (void **)((void *)0));
513 i ++;
514 }
515 i = 0;
516 while (i < nthreads) {
517 pthread_join((wthread + i)->tid, (void **)((void *)0));
518 if ((int )(wthread + i)->status == 255) {
519 nok ++;
520 }
521 i ++;
522 }
523 if (nok == nthreads) {
524 pthread_cancel(hthread);
525 } else {
526 pthread_join(hthread, (void **)((void *)0));
527 }
528 time(& t_finish);
529 diff_sec = (int )(t_finish - t_start);
530 if (diff_sec == 0) {
531 diff_sec = 1;
532 }
533 Log((char *)"Download completed, job completed in %d seconds. (%d Kb/sec)", diff_sec,
534 ((req->clength - h->bwritten) / diff_sec) / 1024);
535 Log((char *)"Shutting down...");
536 close(fd);
537 return;
538 }
539 }
540 /* compiler builtin:
541 void __builtin_va_end(__builtin_va_list ) ; */
542 /* compiler builtin:
543 void __builtin_va_start(__builtin_va_list ) ; */
544 #pragma merger(0,"/tmp/cil-rsiEkcjk.i","-g,-Wall,-W,-pedantic")
545 extern struct _IO_FILE *stdout ;
546 extern int fflush(FILE *__stream ) ;
547 extern __attribute__((__nothrow__)) int sprintf(char * __restrict __s , char const * __restrict __format
548 , ...) ;
549 extern int vfprintf(FILE * __restrict __s , char const * __restrict __format ,
550 __gnuc_va_list __arg ) ;
551 extern int putchar(int __c ) ;
552 extern __attribute__((__nothrow__)) void *memset(void *__s , int __c , size_t __n ) __attribute__((__nonnull__(1))) ;
553 extern __attribute__((__nothrow__)) int strncmp(char const *__s1 , char const *__s2 ,
554 size_t __n ) __attribute__((__pure__,
555 __nonnull__(1,2))) ;
556 extern __attribute__((__nothrow__)) char *strstr(char const *__haystack , char const *__needle ) __attribute__((__pure__,
557 __nonnull__(1,2))) ;
558 void revstr(char *str ) ;
559 void updateProgressBar(float cur , float tot ) ;
560 void handleHttpRetcode(char *rbuf ) ;
561 void parse_url(char *url , struct request *req___0 )
562 { char *s ;
563 int i ;
564 int j ;
565 int k ;
566 int tmp ;
567 int tmp___0 ;
568 int tmp___1 ;
569 int tmp___2 ;
570
571 {
572 k = 0;
573 j = k;
574 i = j;
575 s = url;
576 tmp___0 = strncmp((char const *)url, "ftp://", 6U);
577 if (tmp___0 == 0) {
578 fprintf((FILE * __restrict )stderr, (char const * __restrict )"Error: Currently Aget doesn\'t support FTP requests...\n");
579 exit(1);
580 } else {
581 tmp = strncmp((char const *)url, "http://", 7U);
582 if (tmp != 0) {
583 fprintf((FILE * __restrict )stderr, (char const * __restrict )"Error: URL should be of the form http://...\n");
584 exit(1);
585 }
586 }
587 if (req___0->port == 0) {
588 req___0->port = 80;
589 req___0->proto = (unsigned char)255;
590 }
591 s = url + 7;
592 i = 0;
593 while ((int )*s != 47) {
594 if (i > 1024) {
595 fprintf((FILE * __restrict )stderr, (char const * __restrict )"Error: Cannot get hostname from URL...\n");
596 exit(1);
597 }
598 if ((int )*s == 58) {
599 while ((int )*s != 47) {
600 tmp___1 = j;
601 j ++;
602 s --;
603 req___0->username[tmp___1] = *s;
604 i --;
605 }
606 j --;
607 req___0->username[j] = (char )'\000';
608 revstr(req___0->username);
609 while (1) {
610 if ((int )*s == 58) {
611 while ((int )*s != 64) {
612 if (k > 512) {
613 fprintf((FILE * __restrict )stderr, (char const * __restrict )"Error: Cannot get password from URL...\n");
614 exit(1);
615 }
616 tmp___2 = k;
617 k ++;
618 s ++;
619 req___0->password[tmp___2] = *s;
620 }
621 break;
622 }
623 s ++;
624 }
625 k --;
626 req___0->password[k] = (char )'\000';
627 }
628 req___0->host[i] = *s;
629 i ++;
630 s ++;
631 }
632 req___0->host[i] = (char )'\000';
633 i = 0;
634 while ((int )*s != 0) {
635 if (i > 1024) {
636 fprintf((FILE * __restrict )stderr, (char const * __restrict )"Error: Cannot get remote file name from URL...\n");
637 exit(1);
638 }
639 req___0->url[i] = *s;
640 i ++;
641 s ++;
642 }
643 req___0->url[i] = (char )'\000';
644 s --;
645 i = 0;
646 while ((int )*s != 47) {
647 if (i > 512) {
648 fprintf((FILE * __restrict )stderr, (char const * __restrict )"Error: Cannot get local file name from URL...\n");
649 exit(1);
650 }
651 req___0->file[i] = *s;
652 i ++;
653 s --;
654 }
655 req___0->file[i] = (char )'\000';
656 revstr(req___0->file);
657 return;
658 }
659 }
660 int numofthreads(int size )
661 {
662
663 {
664 if (size == 0) {
665 return (0);
666 } else {
667 if (size < 16384) {
668 return (1);
669 } else {
670 if (size >= 16384) {
671 if (size < 32768) {
672 return (2);
673 } else {
674 goto _L___5;
675 }
676 } else {
677 _L___5: /* CIL Label */
678 if (size >= 32768) {
679 if (size < 65536) {
680 return (3);
681 } else {
682 goto _L___4;
683 }
684 } else {
685 _L___4: /* CIL Label */
686 if (size >= 65536) {
687 if (size < 131072) {
688 return (4);
689 } else {
690 goto _L___3;
691 }
692 } else {
693 _L___3: /* CIL Label */
694 if (size >= 131072) {
695 if (size < 262144) {
696 return (5);
697 } else {
698 goto _L___2;
699 }
700 } else {
701 _L___2: /* CIL Label */
702 if (size >= 262144) {
703 if (size < 524288) {
704 return (6);
705 } else {
706 goto _L___1;
707 }
708 } else {
709 _L___1: /* CIL Label */
710 if (size >= 524288) {
711 if (size < 1048576) {
712 return (7);
713 } else {
714 goto _L___0;
715 }
716 } else {
717 _L___0: /* CIL Label */
718 if (size >= 1048576) {
719 if (size < 2097152) {
720 return (8);
721 } else {
722 goto _L;
723 }
724 } else {
725 _L: /* CIL Label */
726 if (size >= 2097152) {
727 if (size < 4194304) {
728 return (9);
729 } else {
730 return (10);
731 }
732 } else {
733 return (10);
734 }
735 }
736 }
737 }
738 }
739 }
740 }
741 }
742 }
743 }
744 }
745 }
746 int calc_offset(int total , int part , int nthreads___0 )
747 {
748
749 {
750 return (part * (total / nthreads___0));
751 }
752 }
753 void usage(void)
754 {
755
756 {
757 fprintf((FILE * __restrict )stderr, (char const * __restrict )"usage: aget [options] url\n");
758 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\toptions:\n");
759 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\t\t-p port number\n");
760 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\t\t-l local file name\n");
761 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\t\t-n suggested number of threads\n");
762 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\t\t-f force using suggested number of threads\n");
763 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\t\t-h this screen\n");
764 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\t\t-v version info\n");
765 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\n");
766 fprintf((FILE * __restrict )stderr, (char const * __restrict )"http//www.enderunix.org/aget/\n");
767 return;
768 }
769 }
770 void revstr(char *str )
771 { char *p ;
772 char *s ;
773 int i ;
774 int size ;
775 size_t tmp ;
776 void *tmp___0 ;
777
778 {
779 tmp = strlen((char const *)str);
780 size = (int )tmp;
781 if (size == 0) {
782 return;
783 }
784 tmp___0 = calloc((unsigned int )size, sizeof(char ));
785 p = (char *)tmp___0;
786 s = p;
787 i = size;
788 while (i >= 0) {
789 *s = *((str + i) - 1);
790 i --;
791 s ++;
792 }
793 *s = (char )'\000';
794 memset((void *)str, 0, (unsigned int )size);
795 strncpy((char * __restrict )str, (char const * __restrict )p, (unsigned int )size);
796 free((void *)p);
797 return;
798 }
799 }
800 void Log(char *fmt , ...)
801 { va_list ap ;
802 char *lfmt ;
803 size_t tmp ;
804 void *tmp___0 ;
805 int *tmp___1 ;
806 char *tmp___2 ;
807 size_t tmp___3 ;
808
809 {
810 tmp = strlen((char const *)fmt);
811 tmp___0 = calloc(7U + tmp, sizeof(char ));
812 lfmt = (char *)tmp___0;
813 sprintf((char * __restrict )lfmt, (char const * __restrict )"<LOG> %s", fmt);
814 fflush(stdout);
815 __builtin_va_start(ap, fmt);
816 vfprintf((FILE * __restrict )stderr, (char const * __restrict )lfmt, ap);
817 __builtin_va_end(ap);
818 if ((int )*(fmt + 0) != 0) {
819 tmp___3 = strlen((char const *)fmt);
820 if ((int )*(fmt + (tmp___3 - 1U)) == 58) {
821 tmp___1 = __errno_location();
822 tmp___2 = strerror(*tmp___1);
823 fprintf((FILE * __restrict )stderr, (char const * __restrict )" %s", tmp___2);
824 }
825 }
826 fprintf((FILE * __restrict )stderr, (char const * __restrict )"\n");
827 free((void *)lfmt);
828 return;
829 }
830 }
831 static float prev = (float )-1;
832 void updateProgressBar(float cur , float tot )
833 { float rat ;
834 int ndot ;
835 int i ;
836
837 {
838 rat = cur / tot;
839 ndot = (int )(rat * (float )100);
840 if ((float )ndot < prev + (float )5) {
841 if (ndot != 100) {
842 return;
843 }
844 }
845 i = 0;
846 while (i < ndot) {
847 putchar('.');
848 i += 2;
849 }
850 i = ndot - 1;
851 while (i < 100) {
852 putchar(' ');
853 i += 2;
854 }
855 printf((char const * __restrict )"[%d%% completed]\n", ndot);
856 prev = (float )ndot;
857 return;
858 }
859 }
860 void handleHttpRetcode(char *rbuf )
861 { char *tmp ;
862 char *tmp___0 ;
863 char *tmp___1 ;
864
865 {
866 tmp___1 = strstr((char const *)rbuf, "HTTP/1.1 416");
867 if ((unsigned int )tmp___1 != (unsigned int )((void *)0)) {
868 Log((char *)"Server returned HTTP/1.1 416 - Requested Range Not Satisfiable\n");
869 exit(1);
870 } else {
871 tmp___0 = strstr((char const *)rbuf, "HTTP/1.1 403");
872 if ((unsigned int )tmp___0 != (unsigned int )((void *)0)) {
873 Log((char *)"<Server returned HTTP/1.1 403 - Permission Denied\n");
874 exit(1);
875 } else {
876 tmp = strstr((char const *)rbuf, "HTTP/1.1 404");
877 if ((unsigned int )tmp != (unsigned int )((void *)0)) {
878 Log((char *)"<Server returned HTTP/1.1 404 - File Not Found\n");
879 exit(1);
880 }
881 }
882 }
883 return;
884 }
885 }
886 #pragma merger(0,"/tmp/cil-vVPZxX0H.i","-g,-Wall,-W,-pedantic")
887 extern __attribute__((__nothrow__)) char *strtok(char * __restrict __s , char const * __restrict __delim ) __attribute__((__nonnull__(2))) ;
888 extern __attribute__((__nothrow__)) void bzero(void *__s , size_t __n ) __attribute__((__nonnull__(1))) ;
889 extern __attribute__((__nothrow__)) int socket(int __domain , int __type , int __protocol ) ;
890 extern int connect(int __fd , struct sockaddr const *__addr , socklen_t __len ) ;
891 extern ssize_t send(int __fd , void const *__buf , size_t __n , int __flags ) ;
892 extern ssize_t recv(int __fd , void *__buf , size_t __n , int __flags ) ;
893 extern __attribute__((__nothrow__)) int *__h_errno_location(void) __attribute__((__const__)) ;
894 extern __attribute__((__nothrow__)) char const *hstrerror(int __err_num ) ;
895 extern struct hostent *gethostbyname(char const *__name ) ;
896 extern __attribute__((__nothrow__)) char *inet_ntoa(struct in_addr __in ) ;
897 void http_head_req(struct request *req___0 )
898 { struct sockaddr_in sin ;
899 struct hostent *he ;
900 int sd ;
901 char *sbuf ;
902 char *rbuf ;
903 char *tok ;
904 char *s ;
905 int clength ;
906 size_t tmp ;
907 void *tmp___0 ;
908 void *tmp___1 ;
909 int *tmp___2 ;
910 char const *tmp___3 ;
911 char *tmp___4 ;
912 int *tmp___5 ;
913 char *tmp___6 ;
914 int *tmp___7 ;
915 char *tmp___8 ;
916 int tmp___9 ;
917 int *tmp___10 ;
918 char *tmp___11 ;
919 size_t tmp___12 ;
920 ssize_t tmp___13 ;
921 int *tmp___14 ;
922 char *tmp___15 ;
923 ssize_t tmp___16 ;
924 size_t tmp___17 ;
925 char *tmp___18 ;
926 char *tmp___19 ;
927
928 {
929 tmp = strlen((char const *)(req___0->url));
930 tmp___0 = calloc(512U + tmp, sizeof(char ));
931 sbuf = (char *)tmp___0;
932 tmp___1 = calloc(512U, sizeof(char ));
933 rbuf = (char *)tmp___1;
934 he = gethostbyname((char const *)(req___0->host));
935 if ((unsigned int )he == (unsigned int )((void *)0)) {
936 tmp___2 = __h_errno_location();
937 tmp___3 = hstrerror(*tmp___2);
938 Log((char *)"Error: Cannot resolve hostname for %s: %s", req___0->host, tmp___3);
939 exit(1);
940 }
941 tmp___4 = inet_ntoa(*((struct in_addr *)*(he->h_addr_list + 0)));
942 strncpy((char * __restrict )(req___0->ip), (char const * __restrict )tmp___4,
943 16U);
944 time(& t_start);
945 bzero((void *)(& sin), sizeof(sin));
946 sin.sin_family = (unsigned short)2;
947 sin.sin_addr.s_addr = inet_addr((char const *)(req___0->ip));
948 sin.sin_port = htons((unsigned short )req___0->port);
949 sd = socket(2, 1, 0);
950 if (sd == -1) {
951 tmp___5 = __errno_location();
952 tmp___6 = strerror(*tmp___5);
953 Log((char *)"Socket creation failed for Head Request: %s", tmp___6);
954 exit(1);
955 }
956 tmp___9 = connect(sd, (struct sockaddr const *)(& sin), sizeof(sin));
957 if (tmp___9 == -1) {
958 tmp___7 = __errno_location();
959 tmp___8 = strerror(*tmp___7);
960 Log((char *)"Connection failed for Head Request: %s", tmp___8);
961 exit(1);
962 }
963 Log((char *)"Head-Request Connection established");
964 sprintf((char * __restrict )sbuf, (char const * __restrict )"HEAD %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\n\r\n",
965 req___0->url, req___0->host, "EnderUNIX Aget v0.4");
966 tmp___12 = strlen((char const *)sbuf);
967 tmp___13 = send(sd, (void const *)sbuf, tmp___12, 0);
968 if (tmp___13 == -1) {
969 tmp___10 = __errno_location();
970 tmp___11 = strerror(*tmp___10);
971 Log((char *)"send failed for Head Request: %s", tmp___11);
972 exit(1);
973 }
974 tmp___16 = recv(sd, (void *)rbuf, 512U, 0);
975 if (tmp___16 == -1) {
976 tmp___14 = __errno_location();
977 tmp___15 = strerror(*tmp___14);
978 Log((char *)"recv failed for Head Request: %s", tmp___15);
979 exit(1);
980 }
981 handleHttpRetcode(rbuf);
982 tok = strtok((char * __restrict )rbuf, (char const * __restrict )"\r\n");
983 tmp___19 = strstr((char const *)tok, "HTTP/1.1 200");
984 if ((unsigned int )tmp___19 != (unsigned int )((void *)0)) {
985 while (1) {
986 tok = strtok((char * __restrict )((void *)0), (char const * __restrict )"\r\n");
987 if (! ((unsigned int )tok != (unsigned int )((void *)0))) {
988 break;
989 }
990 tmp___18 = strstr((char const *)tok, "Content-Length");
991 if ((unsigned int )tmp___18 != (unsigned int )((void *)0)) {
992 tmp___17 = strlen("Content-Length: ");
993 s = tok + tmp___17;
994 clength = atoi((char const *)s);
995 req___0->clength = clength;
996 }
997 }
998 }
999 free((void *)sbuf);
1000 free((void *)rbuf);
1001 return;
1002 }
1003 }
1004 #pragma merger(0,"/tmp/cil-R4CIbMeC.i","-g,-Wall,-W,-pedantic")
1005 extern int sigwait(sigset_t const * __restrict __set , int * __restrict __sig ) __attribute__((__nonnull__(1,2))) ;
1006 extern __attribute__((__nothrow__)) unsigned int alarm(unsigned int __seconds ) ;
1007 void sigint_handler(void) ;
1008 void sigalrm_handler(void) ;
1009 void save_log(void) ;
1010 unsigned int bwritten ;
1011 void *signal_waiter(void *arg )
1012 { int signal___0 ;
1013
1014 {
1015 arg = (void *)0;
1016 pthread_sigmask(1, (__sigset_t const * __restrict )(& signal_set), (__sigset_t * __restrict )((void *)0));
1017 while (1) {
1018 sigwait((sigset_t const * __restrict )(& signal_set), (int * __restrict )(& signal___0));
1019 switch (signal___0) {
1020 case 2:
1021 case 3:
1022 sigint_handler();
1023 break;
1024 case 14:
1025 sigalrm_handler();
1026 break;
1027 }
1028 }
1029 }
1030 }
1031 void sigint_handler(void)
1032 { int i ;
1033
1034 {
1035 printf((char const * __restrict )"^C caught, saving download job...\n");
1036 i = 0;
1037 while (i < nthreads) {
1038 pthread_cancel((wthread + i)->tid);
1039 (wthread + i)->status = (unsigned char )((int )(wthread + i)->status & 15);
1040 i ++;
1041 }
1042 save_log();
1043 exit(0);
1044 }
1045 }
1046 void sigalrm_handler(void)
1047 {
1048
1049 {
1050 printf((char const * __restrict )"Signal Alarm came\n");
1051 updateProgressBar((float )bwritten, (float )req->clength);
1052 alarm(1U);
1053 return;
1054 }
1055 }
1056 #pragma merger(0,"/tmp/cil-msdqRXZR.i","-g,-Wall,-W,-pedantic")
1057 extern __attribute__((__noreturn__)) void pthread_exit(void *__retval ) ;
1058 extern __attribute__((__nothrow__)) pthread_t pthread_self(void) __attribute__((__const__)) ;
1059 extern int pthread_setcanceltype(int __type , int *__oldtype ) ;
1060 extern __attribute__((__nothrow__)) int pthread_mutex_lock(pthread_mutex_t *__mutex ) __attribute__((__nonnull__(1))) ;
1061 extern __attribute__((__nothrow__)) int pthread_mutex_unlock(pthread_mutex_t *__mutex ) __attribute__((__nonnull__(1))) ;
1062 unsigned int bwritten = 0U;
1063 pthread_mutex_t bwritten_mutex = {{0, 0U, 0, 0, 0U, {0}}};
1064 extern int ( /* missing proto */ pwrite)() ;
1065 void *http_get(void *arg )
1066 { struct thread_data *td ;
1067 int sd ;
1068 char *rbuf ;
1069 char *s ;
1070 int dr ;
1071 int dw ;
1072 int i ;
1073 long foffset ;
1074 pthread_t tid ;
1075 void *tmp ;
1076 int *tmp___0 ;
1077 char *tmp___1 ;
1078 int *tmp___2 ;
1079 char *tmp___3 ;
1080 int tmp___4 ;
1081 int *tmp___5 ;
1082 char *tmp___6 ;
1083 size_t tmp___7 ;
1084 ssize_t tmp___8 ;
1085 int *tmp___9 ;
1086 char *tmp___10 ;
1087 char *tmp___11 ;
1088
1089 {
1090 tid = pthread_self();
1091 pthread_sigmask(0, (__sigset_t const * __restrict )(& signal_set), (__sigset_t * __restrict )((void *)0));
1092 pthread_setcanceltype(1, (int *)((void *)0));
1093 td = (struct thread_data *)arg;
1094 foffset = td->foffset;
1095 tmp = calloc(8192U, sizeof(char ));
1096 rbuf = (char *)tmp;
1097 sd = socket(2, 1, 0);
1098 if (sd == -1) {
1099 tmp___0 = __errno_location();
1100 tmp___1 = strerror(*tmp___0);
1101 Log((char *)"<THREAD #%ld> socket creation failed: %s", tid, tmp___1);
1102 pthread_exit((void *)1);
1103 }
1104 tmp___4 = connect(sd, (struct sockaddr const *)(& td->sin), sizeof(struct sockaddr ));
1105 if (tmp___4 == -1) {
1106 tmp___2 = __errno_location();
1107 tmp___3 = strerror(*tmp___2);
1108 Log((char *)"<THREAD #%ld> connection failed: %s", tid, tmp___3);
1109 pthread_exit((void *)1);
1110 }
1111 tmp___7 = strlen((char const *)(td->getstr));
1112 tmp___8 = send(sd, (void const *)(td->getstr), tmp___7, 0);
1113 if (tmp___8 == -1) {
1114 tmp___5 = __errno_location();
1115 tmp___6 = strerror(*tmp___5);
1116 Log((char *)"<THREAD #%ld> send failed: %s", tid, tmp___6);
1117 pthread_exit((void *)1);
1118 }
1119 dr = recv(sd, (void *)rbuf, 8192U, 0);
1120 if (dr == -1) {
1121 tmp___9 = __errno_location();
1122 tmp___10 = strerror(*tmp___9);
1123 Log((char *)"<THREAD #%ld> recv failed: %s", tid, tmp___10);
1124 pthread_exit((void *)1);
1125 }
1126 handleHttpRetcode(rbuf);
1127 tmp___11 = strstr((char const *)rbuf, "HTTP/1.1 206");
1128 if ((unsigned int )tmp___11 == (unsigned int )((void *)0)) {
1129 fprintf((FILE * __restrict )stderr, (char const * __restrict )"Something unhandled happened, shutting down...\n");
1130 exit(1);
1131 }
1132 s = rbuf;
1133 i = 0;
1134 while (1) {
1135 if ((int )*s == 10) {
1136 if ((int )*(s - 1) == 13) {
1137 if ((int )*(s - 2) == 10) {
1138 if ((int )*(s - 3) == 13) {
1139 s ++;
1140 i ++;
1141 break;
1142 }
1143 }
1144 }
1145 }
1146 s ++;
1147 i ++;
1148 }
1149 td->offset = td->soffset;
1150 if ((long )(dr - i) > foffset) {
1151 dw = pwrite(td->fd, s, foffset - (long )i, td->soffset);
1152 } else {
1153 dw = pwrite(td->fd, s, dr - i, td->soffset);
1154 }
1155 td->offset = td->soffset + (long )dw;
1156 pthread_mutex_lock(& bwritten_mutex);
1157 bwritten += (unsigned int )dw;
1158 pthread_mutex_unlock(& bwritten_mutex);
1159 while (td->offset < foffset) {
1160 memset((void *)rbuf, 8192, 0U);
1161 dr = recv(sd, (void *)rbuf, 8192U, 0);
1162 if (td->offset + (long )dr > foffset) {
1163 dw = pwrite(td->fd, rbuf, foffset - td->offset, td->offset);
1164 } else {
1165 dw = pwrite(td->fd, rbuf, dr, td->offset);
1166 }
1167 td->offset += (long )dw;
1168 pthread_mutex_lock(& bwritten_mutex);
1169 bwritten += (unsigned int )dw;
1170 pthread_mutex_unlock(& bwritten_mutex);
1171 updateProgressBar((float )bwritten, (float )td->clength);
1172 }
1173 if (td->offset == td->foffset) {
1174 td->status = (unsigned char)255;
1175 }
1176 close(sd);
1177 pthread_exit((void *)0);
1178 return ((void *)0);
1179 }
1180 }
1181 #pragma merger(0,"/tmp/cil-qIg3LbHM.i","-g,-Wall,-W,-pedantic")
1182 extern int fclose(FILE *__stream ) ;
1183 extern FILE *fopen(char const * __restrict __filename , char const * __restrict __modes ) ;
1184 extern size_t fread(void * __restrict __ptr , size_t __size , size_t __n , FILE * __restrict __stream ) ;
1185 extern size_t fwrite(void const * __restrict __ptr , size_t __size , size_t __n ,
1186 FILE * __restrict __s ) ;
1187 extern __attribute__((__nothrow__)) int unlink(char const *__name ) __attribute__((__nonnull__(1))) ;
1188 void save_log(void)
1189 { char *logfile ;
1190 struct hist_data h ;
1191 FILE *fp ;
1192 void *tmp ;
1193 size_t tmp___0 ;
1194 int *tmp___1 ;
1195 char *tmp___2 ;
1196
1197 {
1198 tmp = calloc(255U, sizeof(char ));
1199 logfile = (char *)tmp;
1200 tmp___0 = strlen((char const *)((req + 0)->lfile));
1201 if (tmp___0 == 0U) {
1202 snprintf((char * __restrict )logfile, 255U, (char const * __restrict )"aget-%s.log",
1203 (req + 0)->file);
1204 } else {
1205 snprintf((char * __restrict )logfile, 255U, (char const * __restrict )"aget-%s.log",
1206 (req + 0)->lfile);
1207 }
1208 fp = fopen((char const * __restrict )logfile, (char const * __restrict )"w");
1209 if ((unsigned int )fp == (unsigned int )((void *)0)) {
1210 tmp___1 = __errno_location();
1211 tmp___2 = strerror(*tmp___1);
1212 fprintf((FILE * __restrict )stderr, (char const * __restrict )"cannot open log file %s for writing: %s\n",
1213 logfile, tmp___2);
1214 exit(1);
1215 }
1216 memcpy((void * __restrict )(& h.req), (void const * __restrict )req, sizeof(struct request ));
1217 memcpy((void * __restrict )(& h.wthread), (void const * __restrict )wthread,
1218 sizeof(struct thread_data ) * (unsigned int )nthreads);
1219 h.nthreads = nthreads;
1220 h.bwritten = (int )bwritten;
1221 printf((char const * __restrict )"--> Logfile is: %s, so far %d bytes have been transferred\n",
1222 logfile, h.bwritten);
1223 fwrite((void const * __restrict )(& h), sizeof(struct hist_data ), 1U, (FILE * __restrict )fp);
1224 fclose(fp);
1225 free((void *)logfile);
1226 return;
1227 }
1228 }
1229 int read_log(struct hist_data *h )
1230 { char *logfile ;
1231 FILE *fp ;
1232 void *tmp ;
1233 size_t tmp___0 ;
1234 int *tmp___1 ;
1235 char *tmp___2 ;
1236 int *tmp___3 ;
1237 int *tmp___4 ;
1238 char *tmp___5 ;
1239 int tmp___6 ;
1240
1241 {
1242 tmp = calloc(255U, sizeof(char ));
1243 logfile = (char *)tmp;
1244 tmp___0 = strlen((char const *)((req + 0)->lfile));
1245 if (tmp___0 == 0U) {
1246 snprintf((char * __restrict )logfile, 255U, (char const * __restrict )"aget-%s.log",
1247 (req + 0)->file);
1248 } else {
1249 snprintf((char * __restrict )logfile, 255U, (char const * __restrict )"aget-%s.log",
1250 (req + 0)->lfile);
1251 }
1252 Log((char *)"Attempting to read log file %s for resuming download job...", logfile);
1253 fp = fopen((char const * __restrict )logfile, (char const * __restrict )"r");
1254 if ((unsigned int )fp == (unsigned int )((void *)0)) {
1255 tmp___3 = __errno_location();
1256 if (*tmp___3 == 2) {
1257 Log((char *)"Couldn\'t find log file for this download, starting a clean job...");
1258 return (-1);
1259 } else {
1260 tmp___1 = __errno_location();
1261 tmp___2 = strerror(*tmp___1);
1262 fprintf((FILE * __restrict )stderr, (char const * __restrict )"cannot open log file %s for reading: %s\n",
1263 logfile, tmp___2);
1264 exit(1);
1265 }
1266 }
1267 fread((void * __restrict )h, sizeof(struct hist_data ), 1U, (FILE * __restrict )fp);
1268 bwritten = (unsigned int )h->bwritten;
1269 fclose(fp);
1270 Log((char *)"%d bytes already transferred", bwritten);
1271 tmp___6 = unlink((char const *)logfile);
1272 if (tmp___6 == -1) {
1273 tmp___4 = __errno_location();
1274 tmp___5 = strerror(*tmp___4);
1275 fprintf((FILE * __restrict )stderr, (char const * __restrict )"read_log: cannot remove stale log file %s: %s\n",
1276 logfile, tmp___5);
1277 }
1278 free((void *)logfile);
1279 return (0);
1280 }
1281 }
syntax highlighted by Code2HTML, v. 0.9.1