int kftp_reconnect(knetFile *ftp)
{
- if (ftp->ctrl_fd) {
+ if (ftp->ctrl_fd >= 0) {
close(ftp->ctrl_fd);
- ftp->ctrl_fd = 0;
+ ftp->ctrl_fd = -1;
}
close(ftp->fd);
return kftp_connect(ftp);
}
// initialize ->type, ->host and ->retr
-knetFile *kftp_prep(const char *fn, const char *mode)
+knetFile *kftp_parse_url(const char *fn, const char *mode)
{
knetFile *fp;
char *p;
l = p - fn - 6;
fp = calloc(1, sizeof(knetFile));
fp->type = KNF_TYPE_FTP;
+ fp->fd = -1;
fp->host = calloc(l + 1, 1);
if (strchr(mode, 'c')) fp->no_reconnect = 1;
strncpy(fp->host, fn + 6, l);
int kftp_connect_file(knetFile *fp)
{
int ret;
- if (fp->fd) {
+ if (fp->fd >= 0) {
close(fp->fd);
if (fp->no_reconnect) kftp_get_response(fp);
}
fprintf(stderr, "[kftp_connect_file] %s\n", fp->response);
close(fp->fd);
fp->fd = -1;
+ return -1;
}
fp->is_ready = 1;
return 0;
return 0;
}
if (strstr(fn, "ftp://") == fn) {
- fp = kftp_prep(fn, mode);
+ fp = kftp_parse_url(fn, mode);
if (fp == 0) return 0;
if (kftp_connect(fp) == -1) {
knet_close(fp);
return 0;
}
kftp_connect_file(fp);
- if (fp->fd == -1) {
+ if (fp->fd < 0) {
knet_close(fp);
return 0;
}
int knet_close(knetFile *fp)
{
if (fp == 0) return 0;
- if (fp->ctrl_fd > 0) close(fp->ctrl_fd);
- if (fp->fd > 0) close(fp->fd);
+ if (fp->ctrl_fd >= 0) close(fp->ctrl_fd);
+ if (fp->fd >= 0) close(fp->fd);
free(fp->response); free(fp->retr); free(fp->host);
free(fp);
return 0;