Loading...
stdio/FreeBSD/vfprintf.c Libc-1583.60.2 Libc-1669.40.2
--- Libc/Libc-1583.60.2/stdio/FreeBSD/vfprintf.c
+++ Libc/Libc-1669.40.2/stdio/FreeBSD/vfprintf.c
@@ -80,6 +80,7 @@
 #include "local.h"
 #include "fvwrite.h"
 #include "printflocal.h"
+#include "libc_hooks_impl.h"
 
 static int	__sprint(FILE *, locale_t, struct __suio *);
 #if 0
@@ -291,6 +292,8 @@
 {
 	int ret;
 
+	libc_hooks_will_write(fp, sizeof(*fp));
+
 	FLOCKFILE(fp);
 	ret = __xvprintf(XPRINTF_PLAIN, NULL, fp, loc, fmt0, ap);
 	FUNLOCKFILE(fp);
@@ -302,6 +305,8 @@
 
 {
 	int ret;
+
+	libc_hooks_will_write(fp, sizeof(*fp));
 
 	FLOCKFILE(fp);
 	ret = __xvprintf(XPRINTF_PLAIN, NULL, fp, __current_locale(), fmt0, ap);
@@ -884,22 +889,23 @@
 			}
 #endif // ALLOW_DYNAMIC_PERCENT_N
 
-			if (flags & LLONGINT)
-				*(long long *)ptr = ret;
-			else if (flags & SIZET)
-				*(ssize_t *)ptr = (ssize_t)ret;
-			else if (flags & PTRDIFFT)
-				*(ptrdiff_t *)ptr = ret;
-			else if (flags & INTMAXT)
-				*(intmax_t *)ptr = ret;
-			else if (flags & LONGINT)
-				*(long *)ptr = ret;
-			else if (flags & SHORTINT)
-				*(short *)ptr = ret;
-			else if (flags & CHARINT)
-				*(signed char *)ptr = ret;
-			else
-				*(int *)ptr = ret;
+			if (flags & LLONGINT) {
+				LIBC_HOOKS_WRITE_SIMPLE_TYPE(ptr, long long, ret);
+			} else if (flags & SIZET) {
+				LIBC_HOOKS_WRITE_SIMPLE_TYPE(ptr, ssize_t, ret);
+			} else if (flags & PTRDIFFT) {
+				LIBC_HOOKS_WRITE_SIMPLE_TYPE(ptr, ptrdiff_t, ret);
+			} else if (flags & INTMAXT) {
+				LIBC_HOOKS_WRITE_SIMPLE_TYPE(ptr, intmax_t, ret);
+			} else if (flags & LONGINT) {
+				LIBC_HOOKS_WRITE_SIMPLE_TYPE(ptr, long, ret);
+			} else if (flags & SHORTINT) {
+				LIBC_HOOKS_WRITE_SIMPLE_TYPE(ptr, short, ret);
+			} else if (flags & CHARINT) {
+				LIBC_HOOKS_WRITE_SIMPLE_TYPE(ptr, signed char, ret);
+			} else {
+				LIBC_HOOKS_WRITE_SIMPLE_TYPE(ptr, int, ret);
+			}
 			continue;	/* no output */
 		}
 		case 'O':
@@ -963,6 +969,7 @@
 					ret = EOF;
 					goto error;
 				}
+				libc_hooks_will_read(cp, size);
 			}
 			sign = '\0';
 			break;