Esempio n. 1
0
ssize_t knet_read(knetFile *fp, void *buf, size_t len)
{
	off_t l = 0;
	if (fp->fd == -1) return 0;
	if (fp->type == KNF_TYPE_FTP) {
		if (fp->is_ready == 0) {
			if (!fp->no_reconnect) kftp_reconnect(fp);
			kftp_connect_file(fp);
		}
	} else if (fp->type == KNF_TYPE_HTTP) {
		if (fp->is_ready == 0)
			khttp_connect_file(fp);
	}
	if (fp->type == KNF_TYPE_LOCAL) { // on Windows, the following block is necessary; not on UNIX
		size_t rest = len;
		ssize_t curr;
		while (rest) {
			do {
				curr = read(fp->fd, (void*)((char*)buf + l), rest);
			} while (curr < 0 && EINTR == errno);
			if (curr < 0) return -1;
			if (curr == 0) break;
			l += curr; rest -= curr;
		}
	} else l = my_netread(fp->fd, buf, len);
	fp->offset += l;
	return l;
}
Esempio n. 2
0
off_t knet_read(knetFile *fp, void *buf, off_t len)
{
    off_t l = 0;
    if (fp->fd == -1) return 0;
    if (fp->type == KNF_TYPE_FTP) {
        if (fp->is_ready == 0) {
            if (!fp->no_reconnect) kftp_reconnect(fp);
            kftp_connect_file(fp);
        }
    } else if (fp->type == KNF_TYPE_HTTP) {
        if (fp->is_ready == 0)
            khttp_connect_file(fp);
    }
    if (fp->type == KNF_TYPE_LOCAL) { // on Windows, the following block is necessary; not on UNIX
        off_t rest = len, curr;
        while (rest) {
            curr = read(fp->fd, buf + l, rest);
            if (curr == 0) break;
            l += curr;
            rest -= curr;
        }
    } else l = my_netread(fp->fd, buf, len);
    fp->offset += l;
    return l;
}