forked from bonsai/harakit
		
	dj(1): (broken) move hard skipping to the main loop
This commit is contained in:
		
							parent
							
								
									9f420131ee
								
							
						
					
					
						commit
						906eb92f5a
					
				
							
								
								
									
										31
									
								
								src/dj.c
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								src/dj.c
									
									
									
									
									
								
							@ -72,7 +72,8 @@ Io_read(struct Io *io){
 | 
			
		||||
 | 
			
		||||
	assert(io->bs > 0);
 | 
			
		||||
 | 
			
		||||
	io->bytes += (io->bufuse = read(io->fd, io->buf, io->bs));
 | 
			
		||||
	io->bytes += (io->bufuse = read(io->fd, &(io->buf)[io->bufuse],
 | 
			
		||||
		io->bs - io->bufuse));
 | 
			
		||||
 | 
			
		||||
	assert(io->bufuse <= io->bs);
 | 
			
		||||
 | 
			
		||||
@ -233,19 +234,6 @@ int main(int argc, char *argv[]){
 | 
			
		||||
			io[i].seek = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* hard skipping */
 | 
			
		||||
	if(io[0].seek > 0){
 | 
			
		||||
		do{
 | 
			
		||||
			if((io[0].bufuse = read(
 | 
			
		||||
						io[0].fd, io[0].buf, MIN(io[0].bs, io[0].seek)))
 | 
			
		||||
					== 0)
 | 
			
		||||
				/* second chance */
 | 
			
		||||
				io->bufuse = read(
 | 
			
		||||
					io[0].fd, io[0].buf, MIN(io[0].bs, io[0].seek));
 | 
			
		||||
		}while((io[0].seek -= io[0].bufuse) > 0 && io[0].bufuse != 0);
 | 
			
		||||
		io[0].bufuse = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* hard seeking */
 | 
			
		||||
	if(io[1].seek > 0){
 | 
			
		||||
		memset(io[1].buf, '\0', io[1].bs);
 | 
			
		||||
@ -265,9 +253,8 @@ int main(int argc, char *argv[]){
 | 
			
		||||
 | 
			
		||||
	/* Sought bytes aren't counted in the statistics because successful seeking
 | 
			
		||||
	 * is guaranteed here. */
 | 
			
		||||
	for(i = 0; i < 2; ++i)
 | 
			
		||||
		if(io[i].seek > 0)
 | 
			
		||||
			return oserr(io[i].fn);
 | 
			
		||||
	if(io[1].seek > 0)
 | 
			
		||||
		return oserr(io[1].fn);
 | 
			
		||||
 | 
			
		||||
	do{
 | 
			
		||||
		assert(io[0].bufuse == 0);
 | 
			
		||||
@ -279,6 +266,9 @@ int main(int argc, char *argv[]){
 | 
			
		||||
			if(io[0].seek > 0)
 | 
			
		||||
				skipping = 1;
 | 
			
		||||
 | 
			
		||||
			if(skipping && io[0].seek < io[0].bs)
 | 
			
		||||
				io[0].bufuse = io[0].bs - io[0].seek;
 | 
			
		||||
 | 
			
		||||
			t = io[0].bufuse;
 | 
			
		||||
			if(Io_read(&io[0])->bufuse == t && !noerror)
 | 
			
		||||
				Io_read(&io[0]); /* second chance */
 | 
			
		||||
@ -297,6 +287,13 @@ int main(int argc, char *argv[]){
 | 
			
		||||
					io->bufuse = io->bs;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if(skipping){
 | 
			
		||||
				skipping = (io[0].seek -= io[0].bufuse - t) > 0;
 | 
			
		||||
				io[0].bufuse = 0;
 | 
			
		||||
				count += (count != 0);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* write */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user