@@ -179,7 +179,7 @@ static int try_bgzf_close(BGZF **bgz, const char *name, const char *func, int ex
179
179
180
180
static ssize_t try_bgzf_read (BGZF * fp , void * data , size_t length ,
181
181
const char * name , const char * func ) {
182
- ssize_t got = bgzf_read (fp , data , length );
182
+ ssize_t got = bgzf_read_small (fp , data , length );
183
183
if (got < 0 ) {
184
184
fprintf (stderr , "%s : Error from bgzf_read %s : %s\n" ,
185
185
func , name , strerror (errno ));
@@ -189,7 +189,7 @@ static ssize_t try_bgzf_read(BGZF *fp, void *data, size_t length,
189
189
190
190
static ssize_t try_bgzf_write (BGZF * fp , const void * data , size_t length ,
191
191
const char * name , const char * func ) {
192
- ssize_t put = bgzf_write (fp , data , length );
192
+ ssize_t put = bgzf_write_small (fp , data , length );
193
193
if (put < (ssize_t ) length ) {
194
194
fprintf (stderr , "%s : %s %s : %s\n" ,
195
195
func , put < 0 ? "Error writing to" : "Short write on" ,
@@ -878,6 +878,49 @@ static int test_tell_read(Files *f, const char *mode) {
878
878
return -1 ;
879
879
}
880
880
881
+ static int test_useek_read_small (Files * f , const char * mode ) {
882
+
883
+ BGZF * bgz = NULL ;
884
+ char bg_buf [99 ];
885
+
886
+ bgz = try_bgzf_open (f -> tmp_bgzf , mode , __func__ );
887
+ if (!bgz ) goto fail ;
888
+
889
+
890
+ if (try_bgzf_write (bgz , "#>Hello, World!\n" , 16 ,
891
+ f -> tmp_bgzf , __func__ ) != 16 )
892
+ goto fail ;
893
+ if (try_bgzf_close (& bgz , f -> tmp_bgzf , __func__ , 0 ) != 0 ) goto fail ;
894
+
895
+ bgz = try_bgzf_open (f -> tmp_bgzf , "r" , __func__ );
896
+ if (!bgz ) goto fail ;
897
+
898
+ if (try_bgzf_getc (bgz , 0 , '#' , f -> tmp_bgzf , __func__ ) < 0 ||
899
+ try_bgzf_getc (bgz , 1 , '>' , f -> tmp_bgzf , __func__ ) < 0 )
900
+ goto fail ;
901
+
902
+ if (try_bgzf_read (bgz , bg_buf , 5 , f -> tmp_bgzf , __func__ ) != 5 )
903
+ goto fail ;
904
+ if (memcmp (bg_buf , "Hello" , 5 ) != 0 )
905
+ goto fail ;
906
+
907
+ if (try_bgzf_useek (bgz , 9 , SEEK_SET , f -> tmp_bgzf , __func__ ) < 0 )
908
+ goto fail ;
909
+
910
+ if (try_bgzf_read (bgz , bg_buf , 5 , f -> tmp_bgzf , __func__ ) != 5 )
911
+ goto fail ;
912
+ if (memcmp (bg_buf , "World" , 5 ) != 0 )
913
+ goto fail ;
914
+
915
+ if (try_bgzf_close (& bgz , f -> tmp_bgzf , __func__ , 0 ) != 0 ) goto fail ;
916
+ return 0 ;
917
+
918
+ fail :
919
+ fprintf (stderr , "%s: failed\n" , __func__ );
920
+ if (bgz ) bgzf_close (bgz );
921
+ return -1 ;
922
+ }
923
+
881
924
static int test_bgzf_getline (Files * f , const char * mode , int nthreads ) {
882
925
BGZF * bgz = NULL ;
883
926
ssize_t bg_put ;
@@ -1098,6 +1141,10 @@ int main(int argc, char **argv) {
1098
1141
if (test_tell_read (& f , "w" ) != 0 ) goto out ;
1099
1142
if (test_tell_read (& f , "wu" ) != 0 ) goto out ;
1100
1143
1144
+ // bgzf_useek and bgzf_read_small
1145
+ if (test_useek_read_small (& f , "w" ) != 0 ) goto out ;
1146
+ if (test_useek_read_small (& f , "wu" ) != 0 ) goto out ;
1147
+
1101
1148
// getline
1102
1149
if (test_bgzf_getline (& f , "w" , 0 ) != 0 ) goto out ;
1103
1150
if (test_bgzf_getline (& f , "w" , 1 ) != 0 ) goto out ;
0 commit comments