author | Sunil Nimmagadda <sunil@nimmagadda.net> |
Tue, 06 Dec 2022 13:51:55 +0000 | |
changeset 0 | 1d0ce1ebbc72 |
permissions | -rw-r--r-- |
0
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
1 |
/* |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
2 |
* Copyright (c) 2015 Sunil Nimmagadda <sunil@openbsd.org> |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
3 |
* |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
4 |
* Permission to use, copy, modify, and distribute this software for any |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
5 |
* purpose with or without fee is hereby granted, provided that the above |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
6 |
* copyright notice and this permission notice appear in all copies. |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
7 |
* |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
8 |
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
9 |
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
10 |
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
11 |
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
12 |
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
13 |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
14 |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
15 |
*/ |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
16 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
17 |
#include <sys/stat.h> |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
18 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
19 |
#include <err.h> |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
20 |
#include <fcntl.h> |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
21 |
#include <stdio.h> |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
22 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
23 |
#include "ftp.h" |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
24 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
25 |
static FILE *src_fp; |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
26 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
27 |
struct url * |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
28 |
file_get(struct url *url, off_t *offset, off_t *sz) |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
29 |
{ |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
30 |
struct stat sb; |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
31 |
int src_fd; |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
32 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
33 |
if ((src_fd = fd_request(url->path, O_RDONLY, NULL)) == -1) |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
34 |
err(1, "Can't open file %s", url->path); |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
35 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
36 |
if (fstat(src_fd, &sb) == 0) |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
37 |
*sz = sb.st_size; |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
38 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
39 |
if ((src_fp = fdopen(src_fd, "r")) == NULL) |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
40 |
err(1, "%s: fdopen", __func__); |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
41 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
42 |
if (*offset && fseeko(src_fp, *offset, SEEK_SET) == -1) |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
43 |
err(1, "%s: fseeko", __func__); |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
44 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
45 |
return url; |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
46 |
} |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
47 |
|
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
48 |
void |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
49 |
file_save(struct url *url, FILE *dst_fp, off_t *offset) |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
50 |
{ |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
51 |
copy_file(dst_fp, src_fp, offset); |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
52 |
fclose(src_fp); |
1d0ce1ebbc72
An HTTP(S), FTP client.
Sunil Nimmagadda <sunil@nimmagadda.net>
parents:
diff
changeset
|
53 |
} |