From 99003bc33fa71dfd91bafdbcc8b563f396d1bb52 Mon Sep 17 00:00:00 2001 From: Martin Pärtel Date: Tue, 3 Jul 2012 11:16:22 +0300 Subject: Made strerror() safe to use in DPRINTF. --- src/Makefile.am | 2 +- src/debug.c | 22 ++++++++++++++++++++++ src/debug.h | 14 ++++++++++++-- 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 src/debug.c (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 412045c..4ba20c4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,7 +3,7 @@ bin_PROGRAMS = bindfs noinst_HEADERS = debug.h permchain.h userinfo.h misc.h usermap.h -bindfs_SOURCES = bindfs.c permchain.c userinfo.c misc.c usermap.c +bindfs_SOURCES = bindfs.c debug.c permchain.c userinfo.c misc.c usermap.c AM_CPPFLAGS = ${my_CPPFLAGS} ${fuse_CFLAGS} AM_CFLAGS = ${my_CFLAGS} diff --git a/src/debug.c b/src/debug.c new file mode 100644 index 0000000..9a44a54 --- /dev/null +++ b/src/debug.c @@ -0,0 +1,22 @@ +/* + Copyright 2012 Martin Pärtel + + This file is part of bindfs. + + bindfs is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + bindfs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with bindfs. If not, see . +*/ + +#include "debug.h" + +pthread_mutex_t strerror_lock = PTHREAD_MUTEX_INITIALIZER; diff --git a/src/debug.h b/src/debug.h index 1883101..661c299 100644 --- a/src/debug.h +++ b/src/debug.h @@ -1,5 +1,5 @@ /* - Copyright 2006,2007,2008 Martin Pärtel + Copyright 2006,2007,2008,2012 Martin Pärtel This file is part of bindfs. @@ -21,10 +21,20 @@ #define INC_BINDFS_DEBUG_H #include +#include +#include +#include + +/* Handier to lock and use strerror() than allocate buffer for strerror_r(). */ +extern pthread_mutex_t strerror_lock; #if BINDFS_DEBUG #include -#define DPRINTF(fmt, ...) fprintf(stderr, "DEBUG: " fmt "\n", __VA_ARGS__) +#define DPRINTF(fmt, ...) do { \ + pthread_mutex_lock(&strerror_lock); \ + fprintf(stderr, "DEBUG: " fmt "\n", __VA_ARGS__); \ + pthread_mutex_unlock(&strerror_lock); \ + } while (0) #else #define DPRINTF(...) #endif -- cgit v1.2.3