Upgrade toybox to 2422a3060d51448f727e1532e2fd19d14f44c80e

This project was upgraded with external_updater.
Usage: tools/external_updater/updater.sh update external/<absolute path to project>
For more info, check https://cs.android.com/android/platform/superproject/main/+/main:tools/external_updater/README.md

Test: TreeHugger
Change-Id: I1142f6fec678ee85f5911f8cd2b7c0d86f52d4f0
diff --git a/METADATA b/METADATA
index 9b1463a..16426c9 100644
--- a/METADATA
+++ b/METADATA
@@ -1,5 +1,5 @@
 # This project was upgraded with external_updater.
-# Usage: tools/external_updater/updater.sh update external/toybox
+# Usage: tools/external_updater/updater.sh update external/<absolute path to project>
 # For more info, check https://cs.android.com/android/platform/superproject/main/+/main:tools/external_updater/README.md
 
 name: "toybox"
@@ -9,12 +9,12 @@
   last_upgrade_date {
     year: 2025
     month: 3
-    day: 10
+    day: 26
   }
   homepage: "https://landley.net/toybox/"
   identifier {
     type: "Git"
     value: "https://github.com/landley/toybox"
-    version: "2cc5e25fb107fe0ff77c95a983474497b76ac9f8"
+    version: "2422a3060d51448f727e1532e2fd19d14f44c80e"
   }
 }
diff --git a/android/device/generated/flags.h b/android/device/generated/flags.h
index e3de2a3..9c286eb 100644
--- a/android/device/generated/flags.h
+++ b/android/device/generated/flags.h
@@ -1829,14 +1829,15 @@
 #undef FOR_local
 #endif
 
-// log p:t: p:t:
+// log b:p:t: b:p:t:
 #undef OPTSTR_log
-#define OPTSTR_log "p:t:"
+#define OPTSTR_log "b:p:t:"
 #ifdef CLEANUP_log
 #undef CLEANUP_log
 #undef FOR_log
 #undef FLAG_t
 #undef FLAG_p
+#undef FLAG_b
 #endif
 
 // logger t:p:s t:p:s
@@ -5659,6 +5660,7 @@
 #endif
 #define FLAG_t (1LL<<0)
 #define FLAG_p (1LL<<1)
+#define FLAG_b (1LL<<2)
 #endif
 
 #ifdef FOR_logger
diff --git a/android/device/generated/globals.h b/android/device/generated/globals.h
index d234ed9..b67b9f1 100644
--- a/android/device/generated/globals.h
+++ b/android/device/generated/globals.h
@@ -1,7 +1,7 @@
 struct log_data {
-  char *t, *p;
+  char *t, *p, *b;
 
-  int pri;
+  int pri, buf;
 };
 
 struct dmesg_data {
diff --git a/android/device/generated/help.h b/android/device/generated/help.h
index 4a598db..9a5642c 100644
--- a/android/device/generated/help.h
+++ b/android/device/generated/help.h
@@ -40,7 +40,7 @@
 
 #define HELP_restorecon "usage: restorecon [-D] [-F] [-R] [-n] [-v] FILE...\n\nRestores the default security contexts for the given files.\n\n-D	Apply to /data/data too\n-F	Force reset\n-R	Recurse into directories\n-n	Don't make any changes; useful with -v to see what would change\n-v	Verbose"
 
-#define HELP_log "usage: log [-p PRI] [-t TAG] [MESSAGE...]\n\nLogs message (or stdin) to logcat.\n\n-p	Use the given priority instead of INFO:\n	d: DEBUG  e: ERROR  f: FATAL  i: INFO  v: VERBOSE  w: WARN  s: SILENT\n-t	Use the given tag instead of \"log\""
+#define HELP_log "usage: log [-b BUFFER] [-p PRI] [-t TAG] [MESSAGE...]\n\nLogs message (or stdin) to logcat.\n\n-b	Use the given log buffer instead of \"main\":\n	\"radio\", \"events\", \"system\", \"crash\", \"stats\", \"security\", \"kernel\"\n-p	Use the given priority instead of INFO:\n	d: DEBUG  e: ERROR  f: FATAL  i: INFO  v: VERBOSE  w: WARN  s: SILENT\n-t	Use the given tag instead of \"log\""
 
 #define HELP_load_policy "usage: load_policy FILE\n\nLoad the specified SELinux policy file."
 
diff --git a/android/device/generated/newtoys.h b/android/device/generated/newtoys.h
index 69c2258..103b55e 100644
--- a/android/device/generated/newtoys.h
+++ b/android/device/generated/newtoys.h
@@ -169,7 +169,7 @@
 USE_LN(NEWTOY(ln, "<1rt:Tvnfs", TOYFLAG_BIN))
 USE_LOAD_POLICY(NEWTOY(load_policy, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN))
 USE_SH(NEWTOY(local, 0, TOYFLAG_NOFORK))
-USE_LOG(NEWTOY(log, "p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_LOG(NEWTOY(log, "b:p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
 USE_LOGGER(NEWTOY(logger, "t:p:s", TOYFLAG_USR|TOYFLAG_BIN))
 USE_LOGIN(NEWTOY(login, ">1f:ph:", TOYFLAG_BIN|TOYFLAG_NEEDROOT))
 USE_LOGNAME(NEWTOY(logname, ">0", TOYFLAG_USR|TOYFLAG_BIN))
diff --git a/android/linux/generated/flags.h b/android/linux/generated/flags.h
index 0fcbbc4..0da115e 100644
--- a/android/linux/generated/flags.h
+++ b/android/linux/generated/flags.h
@@ -1829,14 +1829,15 @@
 #undef FOR_local
 #endif
 
-// log   p:t:
+// log   b:p:t:
 #undef OPTSTR_log
-#define OPTSTR_log "p:t:"
+#define OPTSTR_log "b:p:t:"
 #ifdef CLEANUP_log
 #undef CLEANUP_log
 #undef FOR_log
 #undef FLAG_t
 #undef FLAG_p
+#undef FLAG_b
 #endif
 
 // logger   t:p:s
@@ -5659,6 +5660,7 @@
 #endif
 #define FLAG_t (FORCED_FLAG<<0)
 #define FLAG_p (FORCED_FLAG<<1)
+#define FLAG_b (FORCED_FLAG<<2)
 #endif
 
 #ifdef FOR_logger
diff --git a/android/linux/generated/help.h b/android/linux/generated/help.h
index 17e5456..dbd5d8c 100644
--- a/android/linux/generated/help.h
+++ b/android/linux/generated/help.h
@@ -40,7 +40,7 @@
 
 #define HELP_restorecon "usage: restorecon [-D] [-F] [-R] [-n] [-v] FILE...\n\nRestores the default security contexts for the given files.\n\n-D	Apply to /data/data too\n-F	Force reset\n-R	Recurse into directories\n-n	Don't make any changes; useful with -v to see what would change\n-v	Verbose"
 
-#define HELP_log "usage: log [-p PRI] [-t TAG] [MESSAGE...]\n\nLogs message (or stdin) to logcat.\n\n-p	Use the given priority instead of INFO:\n	d: DEBUG  e: ERROR  f: FATAL  i: INFO  v: VERBOSE  w: WARN  s: SILENT\n-t	Use the given tag instead of \"log\""
+#define HELP_log "usage: log [-b BUFFER] [-p PRI] [-t TAG] [MESSAGE...]\n\nLogs message (or stdin) to logcat.\n\n-b	Use the given log buffer instead of \"main\":\n	\"radio\", \"events\", \"system\", \"crash\", \"stats\", \"security\", \"kernel\"\n-p	Use the given priority instead of INFO:\n	d: DEBUG  e: ERROR  f: FATAL  i: INFO  v: VERBOSE  w: WARN  s: SILENT\n-t	Use the given tag instead of \"log\""
 
 #define HELP_load_policy "usage: load_policy FILE\n\nLoad the specified SELinux policy file."
 
diff --git a/android/linux/generated/newtoys.h b/android/linux/generated/newtoys.h
index 69c2258..103b55e 100644
--- a/android/linux/generated/newtoys.h
+++ b/android/linux/generated/newtoys.h
@@ -169,7 +169,7 @@
 USE_LN(NEWTOY(ln, "<1rt:Tvnfs", TOYFLAG_BIN))
 USE_LOAD_POLICY(NEWTOY(load_policy, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN))
 USE_SH(NEWTOY(local, 0, TOYFLAG_NOFORK))
-USE_LOG(NEWTOY(log, "p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_LOG(NEWTOY(log, "b:p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
 USE_LOGGER(NEWTOY(logger, "t:p:s", TOYFLAG_USR|TOYFLAG_BIN))
 USE_LOGIN(NEWTOY(login, ">1f:ph:", TOYFLAG_BIN|TOYFLAG_NEEDROOT))
 USE_LOGNAME(NEWTOY(logname, ">0", TOYFLAG_USR|TOYFLAG_BIN))
diff --git a/android/mac/generated/flags.h b/android/mac/generated/flags.h
index dc3be59..94e4df2 100644
--- a/android/mac/generated/flags.h
+++ b/android/mac/generated/flags.h
@@ -1829,14 +1829,15 @@
 #undef FOR_local
 #endif
 
-// log   p:t:
+// log   b:p:t:
 #undef OPTSTR_log
-#define OPTSTR_log "p:t:"
+#define OPTSTR_log "b:p:t:"
 #ifdef CLEANUP_log
 #undef CLEANUP_log
 #undef FOR_log
 #undef FLAG_t
 #undef FLAG_p
+#undef FLAG_b
 #endif
 
 // logger   t:p:s
@@ -5659,6 +5660,7 @@
 #endif
 #define FLAG_t (FORCED_FLAG<<0)
 #define FLAG_p (FORCED_FLAG<<1)
+#define FLAG_b (FORCED_FLAG<<2)
 #endif
 
 #ifdef FOR_logger
diff --git a/android/mac/generated/help.h b/android/mac/generated/help.h
index 17e5456..dbd5d8c 100644
--- a/android/mac/generated/help.h
+++ b/android/mac/generated/help.h
@@ -40,7 +40,7 @@
 
 #define HELP_restorecon "usage: restorecon [-D] [-F] [-R] [-n] [-v] FILE...\n\nRestores the default security contexts for the given files.\n\n-D	Apply to /data/data too\n-F	Force reset\n-R	Recurse into directories\n-n	Don't make any changes; useful with -v to see what would change\n-v	Verbose"
 
-#define HELP_log "usage: log [-p PRI] [-t TAG] [MESSAGE...]\n\nLogs message (or stdin) to logcat.\n\n-p	Use the given priority instead of INFO:\n	d: DEBUG  e: ERROR  f: FATAL  i: INFO  v: VERBOSE  w: WARN  s: SILENT\n-t	Use the given tag instead of \"log\""
+#define HELP_log "usage: log [-b BUFFER] [-p PRI] [-t TAG] [MESSAGE...]\n\nLogs message (or stdin) to logcat.\n\n-b	Use the given log buffer instead of \"main\":\n	\"radio\", \"events\", \"system\", \"crash\", \"stats\", \"security\", \"kernel\"\n-p	Use the given priority instead of INFO:\n	d: DEBUG  e: ERROR  f: FATAL  i: INFO  v: VERBOSE  w: WARN  s: SILENT\n-t	Use the given tag instead of \"log\""
 
 #define HELP_load_policy "usage: load_policy FILE\n\nLoad the specified SELinux policy file."
 
diff --git a/android/mac/generated/newtoys.h b/android/mac/generated/newtoys.h
index 69c2258..103b55e 100644
--- a/android/mac/generated/newtoys.h
+++ b/android/mac/generated/newtoys.h
@@ -169,7 +169,7 @@
 USE_LN(NEWTOY(ln, "<1rt:Tvnfs", TOYFLAG_BIN))
 USE_LOAD_POLICY(NEWTOY(load_policy, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN))
 USE_SH(NEWTOY(local, 0, TOYFLAG_NOFORK))
-USE_LOG(NEWTOY(log, "p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_LOG(NEWTOY(log, "b:p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
 USE_LOGGER(NEWTOY(logger, "t:p:s", TOYFLAG_USR|TOYFLAG_BIN))
 USE_LOGIN(NEWTOY(login, ">1f:ph:", TOYFLAG_BIN|TOYFLAG_NEEDROOT))
 USE_LOGNAME(NEWTOY(logname, ">0", TOYFLAG_USR|TOYFLAG_BIN))
diff --git a/lib/portability.h b/lib/portability.h
index 324ddc8..29d5469 100644
--- a/lib/portability.h
+++ b/lib/portability.h
@@ -305,12 +305,13 @@
 #endif
 #if !defined(__BIONIC__) || defined(__ANDROID_NDK__)
 // Android NDKv18 has liblog.so but not liblog.a for static builds.
-static inline int stub_out_log_write(int pri, const char *tag, const char *msg)
+static inline int stub_out_log_buf_write(int log_id, int pri, const char *tag,
+  const char *msg)
 {
   return -1;
 }
 #ifdef __ANDROID_NDK__
-#define __android_log_write(a, b, c) stub_out_log_write(a, b, c)
+#define __android_log_buf_write(a, b, c, d) stub_out_log_buf_write(a, b, c, d)
 #endif
 
 #endif
diff --git a/toys/android/log.c b/toys/android/log.c
index 005f714..1b05f4e 100644
--- a/toys/android/log.c
+++ b/toys/android/log.c
@@ -2,17 +2,19 @@
  *
  * Copyright 2016 The Android Open Source Project
 
-USE_LOG(NEWTOY(log, "p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_LOG(NEWTOY(log, "b:p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
 
 config LOG
   bool "log"
   depends on TOYBOX_ON_ANDROID
   default y
   help
-    usage: log [-p PRI] [-t TAG] [MESSAGE...]
+    usage: log [-b BUFFER] [-p PRI] [-t TAG] [MESSAGE...]
 
     Logs message (or stdin) to logcat.
 
+    -b	Use the given log buffer instead of "main":
+    	"radio", "events", "system", "crash", "stats", "security", "kernel"
     -p	Use the given priority instead of INFO:
     	d: DEBUG  e: ERROR  f: FATAL  i: INFO  v: VERBOSE  w: WARN  s: SILENT
     -t	Use the given tag instead of "log"
@@ -22,15 +24,15 @@
 #include "toys.h"
 
 GLOBALS(
-  char *t, *p;
+  char *t, *p, *b;
 
-  int pri;
+  int pri, buf;
 )
 
 static void log_line(char **pline, long len)
 {
   if (!pline) return;
-  __android_log_write(TT.pri, TT.t, *pline);
+  __android_log_buf_write(TT.buf, TT.pri, TT.t, *pline);
 }
 
 void log_main(void)
@@ -47,6 +49,9 @@
       ANDROID_LOG_VERBOSE, ANDROID_LOG_WARN}[i];
   }
   if (!TT.t) TT.t = "log";
+  if (TT.b) TT.buf = anystr(TT.b, (char *[]){"main", "radio", "events",
+    "system", "crash", "stats", "security", "kernel", 0})-1;
+  if (TT.buf<0) error_exit("unknown log buffer: %s", TT.b);
 
   if (toys.optc) {
     for (i = 0; toys.optargs[i]; i++) {
@@ -61,5 +66,5 @@
     }
   } else do_lines(0, '\n', log_line);
 
-  __android_log_write(TT.pri, TT.t, toybuf);
+  __android_log_buf_write(TT.buf, TT.pri, TT.t, toybuf);
 }