@@ -71,37 +71,31 @@ int send_buffer_write(char *data, int len)
71
71
return retval ;
72
72
}
73
73
74
- int send_file_buffer_write (int fd , int offset , int size , int blocksize )
74
+ int64_t send_file_buffer_write (int fd , int64_t offset , int64_t size , int64_t blocksize )
75
75
{
76
-
76
+
77
77
packet_t packet ;
78
78
79
- off_t pos ;
79
+ off_t pos ;
80
80
int retval ;
81
81
int seqnum ;
82
- char * buffer ;
82
+ char buffer [ PACKET_DATA_SIZE ];
83
83
int boundary ;
84
- int readbytescount ;
85
- int packet_dsize ;
84
+ int len ;
86
85
87
- pos = offset ;
86
+ pos = offset ;
88
87
retval = size ;
89
88
seqnum = 2142894844 ; /* TODO: generate random number */
90
- buffer = (char * ) malloc (size );
91
89
boundary = PACKET_BOUNDARY_START ;
92
-
93
- if (fd < 0 || pos < 0 ) return -1 ;
94
90
95
- packet_dsize = ( blocksize > PACKET_DATA_SIZE ) ? PACKET_DATA_SIZE : blocksize ;
96
-
97
- while (size > 0 )
91
+ if ( fd < 0 ) return -1 ;
92
+
93
+ while (size > 0 )
98
94
{
99
-
100
- lseek (fd , pos , SEEK_SET );
101
- readbytescount = read (fd , buffer , packet_dsize );
102
- size -= readbytescount ;
95
+ len = pread (fd , buffer , PACKET_DATA_SIZE , offset );
96
+ size -= len ;
103
97
104
- boundary = boundary | (size > 0 ) ? PACKET_BOUNDARY_NONE : PACKET_BOUNDARY_END ;
98
+ boundary |= (size > 0 ) ? PACKET_BOUNDARY_NONE : PACKET_BOUNDARY_END ;
105
99
106
100
packet_clear_header (packet );
107
101
packet_set_data (packet );
@@ -112,22 +106,22 @@ int send_file_buffer_write(int fd, int offset, int size, int blocksize)
112
106
packet_set_timestamp (packet , 0x0000051c ); /* TODO: calculate time */
113
107
packet_set_id (packet , 0x08c42c74 ); /* TODO: generate an id */
114
108
115
- packet_new (& packet , buffer , readbytescount );
109
+ packet_new (& packet , buffer , len );
116
110
send_packet_buffer_write (& packet );
117
111
118
112
boundary = PACKET_BOUNDARY_NONE ;
119
-
120
- pos += blocksize ;
113
+
114
+ pos += blocksize ;
121
115
}
122
-
123
- packet_clear_header (packet );
116
+
117
+ packet_clear_header (packet );
124
118
packet_set_ctrl (packet );
125
119
packet_set_type (packet , PACKET_TYPE_ACK );
126
120
packet_set_timestamp (packet , 0x0000051c ); /* TODO: calculate time */
127
121
packet_set_id (packet , 0x08c42c74 ); /* TODO: generate an id */
128
122
129
123
packet_new (& packet , NULL , 0 );
130
124
send_packet_buffer_write (& packet );
131
-
125
+
132
126
return retval ; /* return total bytes sent */
133
127
}
0 commit comments