From: Darrick J. Wong <djwong@xxxxxxxxxx> Hook the com_err library so that error messages coming from libext2fs such as: Illegal block number passed to ext2fs_test_block_bitmap #9462 for block bitmap for /dev/sda are actually printed with the standard "FUSE2FS (sda):" prefix. Libraries shouldn't be printing that kind of stuff, but it is what it is, and what it is is against the normal conventions. Signed-off-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --- misc/fuse2fs.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index cbe9afd4ba1290..d78ab5558b6182 100644 --- a/misc/fuse2fs.c +++ b/misc/fuse2fs.c @@ -127,6 +127,8 @@ errcode_t ext2fs_run_ext3_journal(ext2_filsys *fs); +const char *err_shortdev; + #ifdef CONFIG_JBD_DEBUG /* Enabled by configure --enable-jbd-debug */ int journal_enable_debug = -1; #endif @@ -4736,6 +4738,18 @@ static unsigned long long default_cache_size(void) return ret; } +static void fuse2fs_com_err_proc(const char *whoami, errcode_t code, + const char *fmt, va_list args) +{ + fprintf(stderr, "FUSE2FS (%s): ", err_shortdev ? err_shortdev : "?"); + if (whoami) + fprintf(stderr, "%s: ", whoami); + fprintf(stderr, "%s ", error_message(code)); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); + fflush(stderr); +} + int main(int argc, char *argv[]) { struct fuse_args args = FUSE_ARGS_INIT(argc, argv); @@ -4765,6 +4779,10 @@ int main(int argc, char *argv[]) else fctx.shortdev = fctx.device; + /* capture library error messages */ + err_shortdev = fctx.shortdev; + set_com_err_hook(fuse2fs_com_err_proc); + #ifdef ENABLE_NLS setlocale(LC_MESSAGES, ""); setlocale(LC_CTYPE, ""); @@ -4956,6 +4974,8 @@ int main(int argc, char *argv[]) fflush(orig_stderr); } close_fs(&fctx); + reset_com_err_hook(); + err_shortdev = NULL; if (fctx.device) free(fctx.device); fuse_opt_free_args(&args);