|  |  | @@ -72,6 +72,7 @@ typedef struct FileContext { | 
		
	
		
			
			|  |  |  | int fd; | 
		
	
		
			
			|  |  |  | int trunc; | 
		
	
		
			
			|  |  |  | int blocksize; | 
		
	
		
			
			|  |  |  | int follow; | 
		
	
		
			
			|  |  |  | #if HAVE_DIRENT_H | 
		
	
		
			
			|  |  |  | DIR *dir; | 
		
	
		
			
			|  |  |  | #endif | 
		
	
	
		
			
				|  |  | @@ -80,6 +81,7 @@ typedef struct FileContext { | 
		
	
		
			
			|  |  |  | static const AVOption file_options[] = { | 
		
	
		
			
			|  |  |  | { "truncate", "truncate existing files on write", offsetof(FileContext, trunc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, AV_OPT_FLAG_ENCODING_PARAM }, | 
		
	
		
			
			|  |  |  | { "blocksize", "set I/O operation maximum block size", offsetof(FileContext, blocksize), AV_OPT_TYPE_INT, { .i64 = INT_MAX }, 1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM }, | 
		
	
		
			
			|  |  |  | { "follow", "Follow a file as it is being written", offsetof(FileContext, follow), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM }, | 
		
	
		
			
			|  |  |  | { NULL } | 
		
	
		
			
			|  |  |  | }; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -108,6 +110,8 @@ static int file_read(URLContext *h, unsigned char *buf, int size) | 
		
	
		
			
			|  |  |  | int ret; | 
		
	
		
			
			|  |  |  | size = FFMIN(size, c->blocksize); | 
		
	
		
			
			|  |  |  | ret = read(c->fd, buf, size); | 
		
	
		
			
			|  |  |  | if (ret == 0 && c->follow) | 
		
	
		
			
			|  |  |  | return AVERROR(EAGAIN); | 
		
	
		
			
			|  |  |  | return (ret == -1) ? AVERROR(errno) : ret; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | 
 |