You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	compat/vsnprintf: return number of bytes required on truncation.
This conforms to C99, but requires Windows >= XP. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 Derek Buitenhuis
						Derek Buitenhuis
					
				
			
			
				
	
			
			
			
						parent
						
							3f7fd59d15
						
					
				
				
					commit
					c1c8fdab46
				
			| @@ -26,6 +26,10 @@ | ||||
|  | ||||
| #include "libavutil/error.h" | ||||
|  | ||||
| #if !defined(va_copy) && defined(_MSC_VER) | ||||
| #define va_copy(dst, src) ((dst) = (src)) | ||||
| #endif | ||||
|  | ||||
| int avpriv_snprintf(char *s, size_t n, const char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
| @@ -42,9 +46,10 @@ int avpriv_vsnprintf(char *s, size_t n, const char *fmt, | ||||
|                      va_list ap) | ||||
| { | ||||
|     int ret; | ||||
|     va_list ap_copy; | ||||
|  | ||||
|     if (n == 0) | ||||
|         return 0; | ||||
|         return _vscprintf(fmt, ap); | ||||
|     else if (n > INT_MAX) | ||||
|         return AVERROR(EOVERFLOW); | ||||
|  | ||||
| @@ -55,9 +60,11 @@ int avpriv_vsnprintf(char *s, size_t n, const char *fmt, | ||||
|      * _snprintf/_vsnprintf() to workaround this problem. | ||||
|      * See http://msdn.microsoft.com/en-us/library/1kt27hek(v=vs.80).aspx */ | ||||
|     memset(s, 0, n); | ||||
|     ret = _vsnprintf(s, n - 1, fmt, ap); | ||||
|     va_copy(ap_copy, ap); | ||||
|     ret = _vsnprintf(s, n - 1, fmt, ap_copy); | ||||
|     va_end(ap_copy); | ||||
|     if (ret == -1) | ||||
|         ret = n; | ||||
|         ret = _vscprintf(fmt, ap); | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user