OSDN Git Service
Elliott Hughes [Tue, 2 May 2017 18:34:07 +0000 (11:34 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Change-Id: I1b1ca7c3fb41586cdbad50f49d67f61ff12c9718
Rob Landley [Sun, 30 Apr 2017 07:46:36 +0000 (02:46 -0500)]
Android NDK doesn't have cutils/sched_policy.h so add a probed config symbol.
Elliott Hughes [Fri, 28 Apr 2017 22:25:56 +0000 (15:25 -0700)]
Android needs -llog to link.
Elliott Hughes [Fri, 28 Apr 2017 22:21:36 +0000 (15:21 -0700)]
Building mkpasswd on Android makes no sense.
And won't work anyway because we don't have crypt(3).
Elliott Hughes [Wed, 26 Apr 2017 22:01:41 +0000 (15:01 -0700)]
Implement zlib-based gzip/gunzip/zcat.
Rob Landley [Wed, 26 Apr 2017 21:36:19 +0000 (16:36 -0500)]
Elliott wants to run the toybox tests on android host and there's an sh but
it isn't toysh, so test for a bash alias.
Rob Landley [Tue, 25 Apr 2017 07:21:39 +0000 (02:21 -0500)]
Forgot to check in one of the files for bzcat.test
Rob Landley [Tue, 25 Apr 2017 00:01:33 +0000 (19:01 -0500)]
Another FAQ, and some related tweaks as long as I was there.
Elliott Hughes [Mon, 24 Apr 2017 17:37:49 +0000 (10:37 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Change-Id: I1f472e17af7d5ead3a40bb174d554c6c92d33392
Rob Landley [Wed, 19 Apr 2017 06:44:16 +0000 (01:44 -0500)]
Add ls -ll (with --full-time as a compatibility synonym) to show nanoseconds.
(And, for some reason, timezone. Individual files have timezones?)
Rob Landley [Tue, 18 Apr 2017 18:19:07 +0000 (13:19 -0500)]
The kernel needs bc to build because
https://landley.net/notes-2013.html#28-03-2013 so add it to the airlock install.
Elliott Hughes [Mon, 17 Apr 2017 18:40:08 +0000 (11:40 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Elliott Hughes [Sat, 15 Apr 2017 18:27:18 +0000 (11:27 -0700)]
Use $(( rather than $[ for arithmetic in expand.test.
I can't find any reference to $[ for arithmetic on the bash man page, but it
seems to be a synonym for $((. mksh doesn't support this, so the expand tests
that use it fail on Android. No other toybox tests are using $[.
Elliott Hughes [Fri, 14 Apr 2017 20:43:16 +0000 (13:43 -0700)]
Make ls.test work without awk.
Elliott Hughes [Mon, 17 Apr 2017 16:57:16 +0000 (09:57 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Elliott Hughes [Sat, 8 Apr 2017 06:15:52 +0000 (23:15 -0700)]
Speed up tail.test for shells without builtin printf.
The test only needs echo, and Android currently doesn't use mksh's
builtin printf; the toybox printf is fuller featured and less buggy,
but a lot slower to call in a loop like this (and mksh doesn't fall
back to the printf on the path if given something it can't handle,
so we can't have the best of both worlds).
Without this hack, the tail test takes as long as all the other
tests put together.
Rob Landley [Wed, 12 Apr 2017 18:41:10 +0000 (13:41 -0500)]
Default to -b rather than -q when output is to a tty.
Elliott Hughes [Sat, 8 Apr 2017 06:00:54 +0000 (23:00 -0700)]
Fix "make test_split".
The test shouldn't assume there's a toybox binary on the path.
Elliott Hughes [Tue, 11 Apr 2017 19:36:15 +0000 (12:36 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Rob Landley [Tue, 11 Apr 2017 18:38:37 +0000 (13:38 -0500)]
Silence a broken warning by hitting it with a rock.
Elliott Hughes [Wed, 5 Apr 2017 17:13:47 +0000 (10:13 -0700)]
Make fdisk buildable.
The argument to help_exit is a char*, not a FILE*.
Elliott Hughes [Thu, 6 Apr 2017 21:44:45 +0000 (14:44 -0700)]
Fix touch -a/-m (and add the missing tests).
utimensat takes atime in [0] and mtime in [1], but since we're overwriting
with UTIME_OMIT, we actually want to flip the comparison so -a blats 1 and
-m blats 0.
Elliott Hughes [Mon, 3 Apr 2017 21:12:08 +0000 (14:12 -0700)]
Add "uudecode -o -" support.
busybox uudecode supports this, and POSIX explicitly mentions it (albeit
only in the "STDOUT" section). Plus Android doesn't have /dev/stdout and
/dev/stdin, so this lets us rewrite the uudecode tests so they pass on
Android too.
Rob Landley [Sat, 8 Apr 2017 18:52:18 +0000 (13:52 -0500)]
Fix the ls -m test (which is just a whitespace issue, but eh).
While we're at it, ls -m wordwrap was one column early.
Elliott Hughes [Fri, 7 Apr 2017 23:21:07 +0000 (16:21 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Elliott Hughes [Mon, 3 Apr 2017 15:57:42 +0000 (08:57 -0700)]
Make renice.test work without awk.
Also try to only kill processes we created.
Elliott Hughes [Mon, 3 Apr 2017 15:33:23 +0000 (08:33 -0700)]
Remove mount.test awk dependency.
Parsing file(1) output isn't a good way to determine file system type anyway.
Elliott Hughes [Sun, 2 Apr 2017 19:29:39 +0000 (12:29 -0700)]
Make pgrep tests runnable on toybox-only systems.
Also make the cleanup kill more focused.
Elliott Hughes [Sun, 2 Apr 2017 19:20:53 +0000 (12:20 -0700)]
Make pkill tests runnable on a toybox-only system.
Also use a much stricter regex in the regex test to avoid killing innocent
bystanders.
Elliott Hughes [Sun, 2 Apr 2017 19:27:38 +0000 (12:27 -0700)]
Make bzcat tests runnable on a toybox-only system.
Rob Landley [Tue, 4 Apr 2017 23:13:51 +0000 (18:13 -0500)]
Add "testcmd" function as an alternative to "testing" for tests/*.test, and
check in two converted commands.
Treehugger Robot [Tue, 4 Apr 2017 19:47:22 +0000 (19:47 +0000)]
Merge changes I85f365f5,I2b3c82fb,I4f196054,I9343237c,I53e4444f, ...
* changes:
Merge remote-tracking branch 'toybox/master' into HEAD
Implement dmesg -T.
Don't try to implement %s, we have @seconds, strptime() in libc tends not to have it, and implementing our own means a pattern like "Time %%%s%%" is expensive to handle the corner cases of.
New date range tests are simple, won't catch Feb 29 in non-leap-year (or April 31 in any year). Some normalization allowed, exclusions are just what http://pubs.opengroup.org/onlinepubs/
9699919799/basedefs/time.h.html says.
Replace chkmktime() (which produces false positive normalization failures) with range checks for seconds, minutes, hours, day of month, and month.
ps: don't query for terminal size if not a tty.
Fix the type of the callback in getprop.
We grew a few more commands that weren't on the roadmap (mostly from android) so throw them in the "requests" category so they show up in status.html.
Elliott Hughes [Tue, 4 Apr 2017 17:47:54 +0000 (10:47 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Change-Id: I85f365f5bc991ebefb12500ee1f53b3d250f814a
Elliott Hughes [Sun, 2 Apr 2017 18:58:49 +0000 (11:58 -0700)]
Fix ls -a and ls -A tests.
Rob Landley [Mon, 3 Apr 2017 21:57:40 +0000 (16:57 -0500)]
Trivial cleanup. (Whitespace, brackets, and remove unnecessary typecasts.)
Rob Landley [Mon, 3 Apr 2017 20:48:21 +0000 (15:48 -0500)]
Add gzip support. (Doesn't show source OS and timestamp, but reporting them
isn't obviously useful.)
Elliott Hughes [Sat, 25 Mar 2017 20:08:20 +0000 (13:08 -0700)]
Implement dmesg -T.
Also refactor so that legacy mode gets all the new functionality too, and
add -S to make it easier to test legacy mode on 3.5 or newer kernels (at least
on the host; on Android the syslog(2) system call is no longer allowed).
Bug: http://b/
36090178
Elliott Hughes [Mon, 3 Apr 2017 14:56:14 +0000 (14:56 +0000)]
Build toybox diff.
am:
98aae74f4a
Change-Id: Ib6b754428ce1f0836729fedaeab077aa539acb5d
Elliott Hughes [Sat, 1 Apr 2017 16:18:14 +0000 (09:18 -0700)]
Build toybox diff.
Necessary to run toybox tests on the device (and presumably any other
command-line testing that wants to compare actual to expected results).
Bug: N/A
Test: ran toybox tests on-device (script coming soon)
Change-Id: Ib7a6044d6d6af4fc34996e66cba0a023b3e8dce4
Rob Landley [Wed, 29 Mar 2017 01:39:31 +0000 (20:39 -0500)]
Don't try to implement %s, we have @seconds, strptime() in libc tends
not to have it, and implementing our own means a pattern like
"Time %%%s%%" is expensive to handle the corner cases of.
Rob Landley [Wed, 29 Mar 2017 01:19:28 +0000 (20:19 -0500)]
New date range tests are simple, won't catch Feb 29 in non-leap-year
(or April 31 in any year). Some normalization allowed, exclusions are just
what http://pubs.opengroup.org/onlinepubs/
9699919799/basedefs/time.h.html says.
Rob Landley [Wed, 29 Mar 2017 01:16:41 +0000 (20:16 -0500)]
Replace chkmktime() (which produces false positive normalization failures)
with range checks for seconds, minutes, hours, day of month, and month.
Elliott Hughes [Wed, 29 Mar 2017 00:36:33 +0000 (00:36 +0000)]
Use external/bzip2 for bunzip2 and bzcat.
am:
7602ee6309
Change-Id: I04637694adfadc341d8239cc63742c8fd4880f91
Josh Gao [Mon, 27 Mar 2017 22:53:03 +0000 (15:53 -0700)]
ps: don't query for terminal size if not a tty.
`ps -A | cat` shouldn't have different output depending on the size of
your terminal window.
Elliott Hughes [Tue, 28 Mar 2017 06:02:40 +0000 (23:02 -0700)]
Use external/bzip2 for bunzip2 and bzcat.
external/bzip2 also gives us bzip2.
Bug: http://b/
36653808
Test: builds
Change-Id: Ib73563face4e0d2677e06652cd3fb7b36c7e6e17
Elliott Hughes [Wed, 22 Mar 2017 17:35:14 +0000 (10:35 -0700)]
Fix the type of the callback in getprop.
Fixes:
toys/android/getprop.c:56:39: warning: incompatible pointer types
passing 'void (void *, const char *, const char *)' to parameter of
type 'void (*)(void *, const char *, const char *, uint32_t)'
(aka 'void (*)(void *, const char *, const char *, unsigned int)')
[-Wincompatible-pointer-types]
__system_property_read_callback(pi, read_callback, NULL);
^~~~~~~~~~~~~
Rob Landley [Fri, 24 Mar 2017 16:59:26 +0000 (11:59 -0500)]
We grew a few more commands that weren't on the roadmap (mostly from android)
so throw them in the "requests" category so they show up in status.html.
Elliott Hughes [Fri, 24 Mar 2017 16:57:43 +0000 (16:57 +0000)]
Merge remote-tracking branch 'toybox/master' into HEAD
am:
f6e803dd5c
Change-Id: I77b0ed43d8309eadd39cf63ea4b4e5e23cb37fe0
Elliott Hughes [Fri, 24 Mar 2017 06:19:37 +0000 (23:19 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Rob Landley [Thu, 23 Mar 2017 16:35:09 +0000 (11:35 -0500)]
Now that just about everything has --help, don't output help for argument errors
Jaesoo Lee [Thu, 23 Mar 2017 00:23:12 +0000 (00:23 +0000)]
Merge "removed toybox_static (and modprobe) from normal mode"
am:
78605fcb21
Change-Id: Idbf35653565bbbcbaa6b3679ceae5f63171a32ff
Jaesoo Lee [Thu, 23 Mar 2017 00:04:52 +0000 (00:04 +0000)]
Merge "removed toybox_static (and modprobe) from normal mode"
Elliott Hughes [Wed, 22 Mar 2017 19:48:54 +0000 (19:48 +0000)]
Merge remote-tracking branch 'toybox/master' into HEAD
am:
10d4b07439
Change-Id: I710d2f32c2ed213fdc6a9a64bdab2f8daf66c734
Elliott Hughes [Wed, 22 Mar 2017 17:39:36 +0000 (10:39 -0700)]
Fix a typo and explain a mystery in news.html.
Elliott Hughes [Wed, 22 Mar 2017 17:07:35 +0000 (10:07 -0700)]
Merge remote-tracking branch 'toybox/master' into HEAD
Change-Id: Icec8c3a977acd7e8123d1a7f0a2adf61cc6f59bb
Elliott Hughes [Tue, 21 Mar 2017 19:11:29 +0000 (12:11 -0700)]
Implement uptime -s.
Also add trivial tests.
Jaesoo Lee [Wed, 22 Mar 2017 07:16:51 +0000 (16:16 +0900)]
removed toybox_static (and modprobe) from normal mode
toybox_static (and modprobe) was installed for both normal/charger mode
and recovery mode. This change makes it to be installed in the rootfs
for the recovery mode only.
Bug:
35633646
Test: Built and tested on sailfish
Change-Id: Ie99abc4b6ad49262e1be4fd9b58256010bb888c0
Rob Landley [Wed, 22 Mar 2017 00:25:33 +0000 (19:25 -0500)]
dirtree_flagread() returns DIRTREE_ABORTVAL when the initial node doesn't
exist, which can hit ps when /proc isn't there or /proc/$PID/task isn't
there (because process exited between the time we checked its contents
and the time we looked for its threads).
Rob Landley [Mon, 20 Mar 2017 18:14:14 +0000 (13:14 -0500)]
Paste bugfix, more tests.
Rob Landley [Mon, 20 Mar 2017 17:41:22 +0000 (12:41 -0500)]
Add TOYBOX_PEDANTIC_ARGS to check arguments when there are no arguments,
and make uptime use it.
Rob Landley [Mon, 20 Mar 2017 16:11:34 +0000 (11:11 -0500)]
Rewrite paste so it actually works.
Jaesoo Lee [Thu, 16 Mar 2017 01:27:43 +0000 (01:27 +0000)]
added a new build module for statically linked toybox (toybox_static)
am:
95a47feaf3
Change-Id: I8b9ca8d6edb36a20a731a78d2bfcc501b4972855
Jaesoo Lee [Fri, 3 Mar 2017 04:07:39 +0000 (13:07 +0900)]
added a new build module for statically linked toybox (toybox_static)
In order to enable modprobe in recovery mode (for Treble), this change
add a target for building statically linked toybox (toybox_static). The
binary is installed in /sbin of root file system along with symbolic
link to it for 'modprobe'.
Bug:
35633646
Test: Build and tested it works in recovery
Change-Id: I589c4a248e135c6c0e25aadd063717c87369ef40
Rob Landley [Sun, 5 Mar 2017 02:42:06 +0000 (20:42 -0600)]
Another FAQ entry.
Rob Landley [Sat, 4 Mar 2017 03:21:26 +0000 (21:21 -0600)]
FAQ tweak: one more link on toybox history.
Rob Landley [Sat, 4 Mar 2017 03:13:57 +0000 (21:13 -0600)]
Check in web page announcement for 0.7.3.
Elliott Hughes [Mon, 27 Feb 2017 16:20:19 +0000 (16:20 +0000)]
Merge remote-tracking branch 'toybox/master' into HEAD
am:
180f3c7f4b
Change-Id: If5cb854b6027d42c7b05b8adc341479f04dce310
Elliott Hughes [Sun, 26 Feb 2017 19:21:39 +0000 (11:21 -0800)]
Merge remote-tracking branch 'toybox/master' into HEAD
Elliott Hughes [Tue, 21 Feb 2017 19:29:48 +0000 (19:29 +0000)]
Merge remote-tracking branch 'toybox/master' into HEAD
am:
4ab83f6960
Change-Id: I605c6cc8493cbfd4ff97a0c725a43ae1e01b8571
Elliott Hughes [Tue, 21 Feb 2017 17:51:19 +0000 (17:51 +0000)]
Merge remote-tracking branch 'toybox/master' into HEAD
am:
7c3d7b1386
Change-Id: I111760a61b029d81b24eeaa332a951558173d002
Elliott Hughes [Tue, 21 Feb 2017 17:40:41 +0000 (09:40 -0800)]
Merge remote-tracking branch 'toybox/master' into HEAD
Rob Landley [Tue, 21 Feb 2017 17:27:25 +0000 (11:27 -0600)]
It's past time for 0.7.3.
Elliott Hughes [Tue, 21 Feb 2017 04:29:13 +0000 (20:29 -0800)]
Merge remote-tracking branch 'toybox/master' into HEAD
Change-Id: I6222914d43f03b8cf07b13bee7735db71a663212
Rob Landley [Tue, 21 Feb 2017 04:40:10 +0000 (22:40 -0600)]
If the last ps field is left justified, it extends to the width of the screen.
(Recent "show + for last char when truncated" change broke that, putting it
back.)
Elliott Hughes [Sun, 19 Feb 2017 17:22:45 +0000 (09:22 -0800)]
4a4b3d65644ce403b0f22887fc0d38b0202ec8c7 upset clang.
Recent-ish clang doesn't like self-assignment. Google/Android code always
uses the [template-based moral equivalent of] __attribute__((__unused__))
to keep both compilers happy.
Rob Landley [Tue, 21 Feb 2017 03:42:58 +0000 (21:42 -0600)]
Declaring todo bankruptcy, dmesg goes back into pending until I get a chance
to unify the two codepaths in Elliott's rewrite.
Elliott Hughes [Wed, 4 Jan 2017 18:45:55 +0000 (10:45 -0800)]
Fix dmesg -c and -C.
I never use these, so I didn't notice I'd broken them until someone who
does bringup complained.
The "one weird trick" with SEEK_DATA is documented at the URL we already
point to. SEEK_DATA was added in Linux 3.1 (2011) and isn't available in
glibc 2.19 (2014), so I've added that to "portability.h" for the benefit
of Ubuntu 14.04.
Also make -c and -C mutually exclusive.
Also fix some of the formatting I introduced earlier. (A clang-format file
would help prevent these mistakes...)
Rob Landley [Sat, 18 Feb 2017 18:51:35 +0000 (12:51 -0600)]
Ascii only showed 15 rows instead of 16 and spacing was wrong for 96-100.
Elliott Hughes [Fri, 17 Feb 2017 22:43:56 +0000 (14:43 -0800)]
Fix the comment about the Android SIGPIPE behavior.
Elliott Hughes [Thu, 16 Feb 2017 01:23:19 +0000 (17:23 -0800)]
Teach file(1) about bzip2 files.
If we can read and write bzip2 files, we should be able to identify them
too...
Elliott Hughes [Thu, 16 Feb 2017 07:24:13 +0000 (07:24 +0000)]
Sort .config. am:
913e37db63 am:
e8583a8848
am:
2d4bf152e3
Change-Id: I0b85ff68e611ef014df32ef53c3ab1d9de98d96b
Elliott Hughes [Thu, 16 Feb 2017 07:20:13 +0000 (07:20 +0000)]
Sort .config. am:
913e37db63
am:
e8583a8848
Change-Id: I54fb5fd87c2dd0ba70280e6ed40023c14abd5acf
Elliott Hughes [Thu, 16 Feb 2017 07:16:13 +0000 (07:16 +0000)]
Sort .config.
am:
913e37db63
Change-Id: Ib6099889addbc0679dcb829e8d1368270525d521
Elliott Hughes [Thu, 16 Feb 2017 05:23:34 +0000 (21:23 -0800)]
Sort .config.
Since I'm just maintaining this by hand anyway, the groupings aren't helpful.
Bug: N/A
Test: builds
Change-Id: I735bfc4be30c0f8fe8a1a4618db0fd379becf5b7
Rob Landley [Thu, 16 Feb 2017 03:08:56 +0000 (03:08 +0000)]
Merge "Add back bionic SIGPIPE handler workaround accidentally removed in
3b51a07e478d" am:
5fb9bd50fb am:
9242133fd0
am:
9aa552faa2
Change-Id: I51f4badb23a73e826334e98e7b3e38d01df7d6c5
Rob Landley [Thu, 16 Feb 2017 03:05:24 +0000 (03:05 +0000)]
Merge "Add back bionic SIGPIPE handler workaround accidentally removed in
3b51a07e478d" am:
5fb9bd50fb
am:
9242133fd0
Change-Id: Ifcb87ec1bc9e94cd6f447427fc0f062cd42df372
Rob Landley [Thu, 16 Feb 2017 03:01:26 +0000 (03:01 +0000)]
Merge "Add back bionic SIGPIPE handler workaround accidentally removed in
3b51a07e478d"
am:
5fb9bd50fb
Change-Id: I99ba254641c48900c47c836f446709647ea25eb1
Treehugger Robot [Thu, 16 Feb 2017 02:52:52 +0000 (02:52 +0000)]
Merge "Add back bionic SIGPIPE handler workaround accidentally removed in
3b51a07e478d"
Rob Landley [Thu, 16 Feb 2017 02:38:54 +0000 (02:38 +0000)]
Merge changes I76c426ae,I204f2f6c,I7f4cfc18 am:
d4ea1b3b84 am:
c4249580f5
am:
50f7b20615
Change-Id: Ia730c0a29f202dbee9269a2329eaf257a322ef8f
Rob Landley [Thu, 16 Feb 2017 02:35:22 +0000 (02:35 +0000)]
Merge changes I76c426ae,I204f2f6c,I7f4cfc18 am:
d4ea1b3b84
am:
c4249580f5
Change-Id: I07a05d01c9eda01e31d9dcdc8c9d22cdb36ffd20
Rob Landley [Thu, 16 Feb 2017 02:32:03 +0000 (02:32 +0000)]
Merge changes I76c426ae,I204f2f6c,I7f4cfc18
am:
d4ea1b3b84
Change-Id: Ic3d3d90f3cc997904083e881fd03fbba3ae57d22
Treehugger Robot [Thu, 16 Feb 2017 02:27:32 +0000 (02:27 +0000)]
Merge changes I76c426ae,I204f2f6c,I7f4cfc18
* changes:
Document df -a
Add ascii: display ascii table.
ps -l has 4 chars left for "cmd", switch "ADDR" to "BIT" to save space.
Rob Landley [Fri, 10 Feb 2017 22:37:42 +0000 (16:37 -0600)]
Add back bionic SIGPIPE handler workaround accidentally removed in
3b51a07e478d
Rob Landley [Thu, 9 Feb 2017 19:58:03 +0000 (13:58 -0600)]
Document df -a
Rob Landley [Tue, 7 Feb 2017 22:27:37 +0000 (16:27 -0600)]
Add ascii: display ascii table.
Elliott Hughes [Tue, 7 Feb 2017 17:03:51 +0000 (17:03 +0000)]
Merge remote-tracking branch 'toybox/master' into HEAD am:
37852b74a7 am:
6e78ae7824
am:
b07116cee1
Change-Id: I9eaa38d5f984093d8fc90c6bd6e9241fb5b1ba8f
Elliott Hughes [Tue, 7 Feb 2017 17:01:51 +0000 (17:01 +0000)]
Merge remote-tracking branch 'toybox/master' into HEAD am:
37852b74a7
am:
6e78ae7824
Change-Id: I784367b02ebe929fa150a7da88facaa1ee7d013e
Elliott Hughes [Tue, 7 Feb 2017 16:59:52 +0000 (16:59 +0000)]
Merge remote-tracking branch 'toybox/master' into HEAD
am:
37852b74a7
Change-Id: Ia138161fc582f0097c6ecd543ef1d0783bec7dd5
Rob Landley [Tue, 7 Feb 2017 02:46:56 +0000 (20:46 -0600)]
ps -l has 4 chars left for "cmd", switch "ADDR" to "BIT" to save space.
Elliott Hughes [Tue, 7 Feb 2017 00:11:46 +0000 (16:11 -0800)]
Merge remote-tracking branch 'toybox/master' into HEAD
Change-Id: Ie9451588f4f8301e51db730255713b00a12ac6b0