Skip to content

Commit

Permalink
sys-fs/mhddfs: revision bump
Browse files Browse the repository at this point in the history
Bump EAPI to 7. Fix segfault, use slotted sys-fs/fuse dependency
Committed straight to stable

Signed-off-by: Sergey Popov <[email protected]>
Closes: https://bugs.gentoo.org/570992
Closes: https://bugs.gentoo.org/673644

Package-Manager: Portage-2.3.49, Repoman-2.3.10
  • Loading branch information
Pinkbyte committed Jan 14, 2019
1 parent 8661ebe commit 8c31684
Show file tree
Hide file tree
Showing 3 changed files with 221 additions and 11 deletions.
207 changes: 207 additions & 0 deletions sys-fs/mhddfs/files/mhddfs-0.1.39-segfault-fix.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
Patch backported from
https://github.com/vdudouyt/mhddfs-nosegfault

Thanks to Gabor Kovari <[email protected]>

--- a/src/main.c 2012-06-17 16:09:56.000000000 +0200
+++ b/src/main.c 2015-12-21 16:32:29.000000000 +0100
@@ -33,6 +33,13 @@
#include <sys/time.h>
#include <utime.h>

+#include <execinfo.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <sys/resource.h>
+
#ifndef WITHOUT_XATTR
#include <attr/xattr.h>
#endif
@@ -42,7 +49,21 @@

#include "debug.h"

-#include <uthash.h>
+void save_backtrace(int sig)
+{
+ void *array[10];
+ size_t size;
+
+ // get void*'s for all entries on the stack
+ size = backtrace(array, 10);
+
+ // print out all the frames to stderr
+ fprintf(stderr, "Error: signal %d\n", sig);
+ FILE *log = fopen("/tmp/mhddfs_backtrace.log", "w");
+ backtrace_symbols_fd(array, size, fileno(log));
+ fclose(log);
+ exit(1);
+}

// getattr
static int mhdd_stat(const char *file_name, struct stat *buf)
@@ -161,16 +182,13 @@
mhdd_debug(MHDD_MSG, "mhdd_readdir: %s\n", dirname);
char **dirs = (char **) calloc(mhdd.cdirs+1, sizeof(char *));

+ struct stat st;
+
typedef struct dir_item {
char *name;
struct stat *st;
- UT_hash_handle hh;
} dir_item;

- dir_item * items_ht = NULL;
-
-
- struct stat st;

// find all dirs
for(i = j = found = 0; i<mhdd.cdirs; i++) {
@@ -194,6 +212,8 @@
return -errno;
}

+ GHashTable* hash = g_hash_table_new(g_str_hash, g_str_equal);
+
// read directories
for (i = 0; dirs[i]; i++) {
struct dirent *de;
@@ -204,51 +224,43 @@
while((de = readdir(dh))) {
// find dups

- struct dir_item *prev;
-
- HASH_FIND_STR(items_ht, de->d_name, prev);
-
- if (prev) {
+ if(g_hash_table_lookup(hash, de->d_name))
+ {
continue;
}

// add item
char *object_name = create_path(dirs[i], de->d_name);
- struct dir_item *new_item =
- calloc(1, sizeof(struct dir_item));
+ struct dir_item *new_item = calloc(1, sizeof(struct dir_item));

new_item->name = strdup(de->d_name);
new_item->st = calloc(1, sizeof(struct stat));
lstat(object_name, new_item->st);

- HASH_ADD_KEYPTR(
- hh,
- items_ht,
- new_item->name,
- strlen(new_item->name),
- new_item
- );
+ g_hash_table_insert(hash, new_item->name, new_item);
free(object_name);
}

closedir(dh);
}

- dir_item *item, *tmp;
-
- // fill list
- HASH_ITER(hh, items_ht, item, tmp) {
- if (filler(buf, item->name, item->st, 0))
- break;
- }
+ dir_item *item;

- // free memory
- HASH_ITER(hh, items_ht, item, tmp) {
+ gpointer key, value;
+ GHashTableIter iter;
+ g_hash_table_iter_init(&iter, hash);
+
+ while(g_hash_table_iter_next (&iter, &key, &value))
+ {
+ item = (dir_item*) value;
+ int result = filler(buf, item->name, item->st, 0);
free(item->name);
free(item->st);
free(item);
+ if(result) break;
}
- HASH_CLEAR(hh, items_ht);
+
+ g_hash_table_destroy(hash);

for (i = 0; dirs[i]; i++)
free(dirs[i]);
@@ -1008,6 +1020,19 @@
}
#endif

+static void limits_init()
+{
+ struct rlimit limit;
+ limit.rlim_cur = 512000;
+ limit.rlim_max = 512000;
+
+ if(setrlimit(RLIMIT_NOFILE, &limit) != 0)
+ {
+ perror("setrlimit() failed");
+ exit(-1);
+ }
+}
+
// functions links
static struct fuse_operations mhdd_oper = {
.getattr = mhdd_stat,
@@ -1048,5 +1073,7 @@
mhdd_debug_init();
struct fuse_args *args = parse_options(argc, argv);
flist_init();
+ limits_init();
+ signal(SIGSEGV, save_backtrace);
return fuse_main(args->argc, args->argv, &mhdd_oper, 0);
}
--- a/src/usage.c 2012-06-17 16:09:56.000000000 +0200
+++ b/src/usage.c 2015-12-21 16:32:29.000000000 +0100
@@ -25,6 +25,7 @@
"\n"
"Multi-hdd FUSE filesystem\n"
" Copyright (C) 2008, Dmitry E. Oboukhov <[email protected]>\n"
+ " Copyright (C) 2015, Valentin Dudouyt <[email protected]>\n"
"\n"
"Usage:\n"
" mhddfs dir1,dir2.. mountpoint [ -o OPTIONS ]\n"
--- a/Makefile 2016-01-05 16:45:10.184105001 +0100
+++ b/Makefile 2015-12-21 16:32:29.000000000 +0100
@@ -22,13 +22,13 @@

TARGET = mhddfs

-CFLAGS += -Wall $(shell pkg-config fuse --cflags) \
- -DFUSE_USE_VERSION=26 -MMD
+CFLAGS = -Wall $(shell pkg-config fuse glib-2.0 --cflags) \
+ -DFUSE_USE_VERSION=26 -MMD -g -rdynamic -O0
ifdef WITHOUT_XATTR
CFLAGS += -DWITHOUT_XATTR
endif

-LIBS = $(shell pkg-config fuse --libs)
+LDFLAGS = $(shell pkg-config fuse glib-2.0 --libs)

FORTAR = src COPYING LICENSE README Makefile \
README.ru.UTF-8 ChangeLog mhddfs.1 \
@@ -53,7 +53,7 @@
ifeq ($(DEBVERSION), $(VERSION))
all: $(TARGET)
else
-all: update_version $(TARGET)
+all: $(TARGET)
endif

update_version:

4 changes: 2 additions & 2 deletions sys-fs/mhddfs/files/mhddfs-respect-compiler-vars.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
--- Makefile.orig 2012-11-19 15:25:21.665692111 +0400
+++ Makefile 2012-11-19 15:27:08.406691288 +0400
--- a/Makefile 2012-11-19 15:25:21.665692111 +0400
+++ b/Makefile 2012-11-19 15:27:08.406691288 +0400
@@ -22,13 +22,13 @@

TARGET = mhddfs
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Copyright 1999-2016 Gentoo Foundation
# Copyright 1999-2019 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=4
EAPI=7

inherit base eutils toolchain-funcs
inherit toolchain-funcs

MY_P="${PN}_${PV}"

Expand All @@ -14,14 +14,17 @@ SRC_URI="http://mhddfs.uvw.ru/downloads/${MY_P}.tar.gz"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="amd64"

IUSE="l10n_ru suid"

RDEPEND=">=sys-fs/fuse-2.7.0"
DEPEND="${RDEPEND}
dev-libs/uthash"
RDEPEND="sys-fs/fuse:0"
DEPEND="${RDEPEND}"

DOCS="ChangeLog README"
PATCHES=( "${FILESDIR}/${PN}-respect-compiler-vars.patch" )
DOCS=( ChangeLog README )
PATCHES=(
"${FILESDIR}/${PN}-respect-compiler-vars.patch"
"${FILESDIR}/${P}-segfault-fix.patch"
)

src_compile() {
emake CC="$(tc-getCC)"
Expand All @@ -30,7 +33,7 @@ src_compile() {
src_install() {
dobin mhddfs
doman mhddfs.1
dodoc ${DOCS}
einstalldocs
use l10n_ru && dodoc README.ru.UTF-8
use suid && fperms u+s /usr/bin/${PN}
}
Expand Down

0 comments on commit 8c31684

Please sign in to comment.