various fixes
diff --git a/lib/fuse.c b/lib/fuse.c
index b29db9d..59f8b45 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -17,6 +17,9 @@
#include <errno.h>
#include <sys/param.h>
+#define FUSE_VERSION_FILE_OLD "/proc/fs/fuse/version"
+#define FUSE_DEV_OLD "/proc/fs/fuse/dev"
+
#define FUSE_MAX_PATH 4096
#define PARAM(inarg) (((char *)(inarg)) + sizeof(*inarg))
@@ -1722,12 +1725,18 @@
const char *version_file = FUSE_VERSION_FILE;
FILE *vf = fopen(version_file, "r");
if (vf == NULL) {
- version_file = "/sys/fs/fuse/version";
+ version_file = FUSE_VERSION_FILE_OLD;
vf = fopen(version_file, "r");
if (vf == NULL) {
- fprintf(stderr, "fuse: kernel interface too old, need >= %i.%i\n",
- FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION);
- return -1;
+ struct stat tmp;
+ if (stat(FUSE_DEV_OLD, &tmp) != -1) {
+ fprintf(stderr, "fuse: kernel interface too old, need >= %i.%i\n",
+ FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION);
+ return -1;
+ } else {
+ fprintf(stderr, "fuse: warning: version of kernel interface unknown\n");
+ return 0;
+ }
}
}
res = fscanf(vf, "%i.%i", &f->majorver, &f->minorver);
@@ -1817,7 +1826,17 @@
if (f->id_table == NULL)
goto out_free_name_table;
- pthread_mutex_init(&f->lock, NULL);
+#ifndef USE_UCLIBC
+ pthread_mutex_init(&f->lock, NULL);
+#else
+ {
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init(&attr);
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
+ pthread_mutex_init(&f->lock, &attr);
+ pthread_mutexattr_destroy(&attr);
+ }
+#endif
f->numworker = 0;
f->numavail = 0;
f->op = *op;