mirror of
https://github.com/xorgy/mediafire-fuse
synced 2026-01-13 21:24:28 -08:00
add valgrind test for mediafire-fuse and fix memleaks
This commit is contained in:
@@ -25,4 +25,5 @@ target_link_libraries(mediafire-fuse curl ssl fuse jansson mfapi mfutils)
|
|||||||
|
|
||||||
add_test(iwyu ${CMAKE_SOURCE_DIR}/tests/iwyu.py ${CMAKE_BINARY_DIR})
|
add_test(iwyu ${CMAKE_SOURCE_DIR}/tests/iwyu.py ${CMAKE_BINARY_DIR})
|
||||||
add_test(indent ${CMAKE_SOURCE_DIR}/tests/indent.sh ${CMAKE_SOURCE_DIR})
|
add_test(indent ${CMAKE_SOURCE_DIR}/tests/indent.sh ${CMAKE_SOURCE_DIR})
|
||||||
add_test(valgrind ${CMAKE_SOURCE_DIR}/tests/valgrind.sh ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
|
add_test(valgrind_fuse ${CMAKE_SOURCE_DIR}/tests/valgrind_fuse.sh ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
|
||||||
|
add_test(valgrind_shell ${CMAKE_SOURCE_DIR}/tests/valgrind_shell.sh ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
|
||||||
|
|||||||
29
fuse/main.c
29
fuse/main.c
@@ -160,6 +160,8 @@ static void mediafirefs_destroy()
|
|||||||
fclose(fd);
|
fclose(fd);
|
||||||
|
|
||||||
folder_tree_destroy(tree);
|
folder_tree_destroy(tree);
|
||||||
|
|
||||||
|
mfconn_destroy(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mediafirefs_mkdir(const char *path, mode_t mode)
|
static int mediafirefs_mkdir(const char *path, mode_t mode)
|
||||||
@@ -421,7 +423,7 @@ static void parse_config(int *argc, char ***argv, char *configfile)
|
|||||||
static void parse_arguments(int *argc, char ***argv,
|
static void parse_arguments(int *argc, char ***argv,
|
||||||
struct mediafirefs_user_options *options)
|
struct mediafirefs_user_options *options)
|
||||||
{
|
{
|
||||||
char **argv_new;
|
int i;
|
||||||
|
|
||||||
/* In the first pass, we only search for the help, version and config file
|
/* In the first pass, we only search for the help, version and config file
|
||||||
* options.
|
* options.
|
||||||
@@ -445,11 +447,6 @@ static void parse_arguments(int *argc, char ***argv,
|
|||||||
FUSE_OPT_END
|
FUSE_OPT_END
|
||||||
};
|
};
|
||||||
|
|
||||||
// copy argv into a new area so that we can realloc later
|
|
||||||
argv_new = malloc(sizeof(char *) * (*argc));
|
|
||||||
memcpy(argv_new, *argv, sizeof(char *) * (*argc));
|
|
||||||
*argv = argv_new;
|
|
||||||
|
|
||||||
struct fuse_args args_fst = FUSE_ARGS_INIT(*argc, *argv);
|
struct fuse_args args_fst = FUSE_ARGS_INIT(*argc, *argv);
|
||||||
|
|
||||||
if (fuse_opt_parse
|
if (fuse_opt_parse
|
||||||
@@ -457,6 +454,7 @@ static void parse_arguments(int *argc, char ***argv,
|
|||||||
mediafirefs_opt_proc) == -1) {
|
mediafirefs_opt_proc) == -1) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
*argc = args_fst.argc;
|
*argc = args_fst.argc;
|
||||||
*argv = args_fst.argv;
|
*argv = args_fst.argv;
|
||||||
|
|
||||||
@@ -488,6 +486,13 @@ static void parse_arguments(int *argc, char ***argv,
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (*argv != args_snd.argv) {
|
||||||
|
for (i = 0; i < *argc; i++) {
|
||||||
|
free((*argv)[i]);
|
||||||
|
}
|
||||||
|
free(*argv);
|
||||||
|
}
|
||||||
|
|
||||||
*argc = args_snd.argc;
|
*argc = args_snd.argc;
|
||||||
*argv = args_snd.argv;
|
*argv = args_snd.argv;
|
||||||
}
|
}
|
||||||
@@ -543,6 +548,9 @@ static void connect_mf(struct mediafirefs_user_options *options)
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
int ret,
|
||||||
|
i;
|
||||||
|
|
||||||
struct mediafirefs_user_options options = {
|
struct mediafirefs_user_options options = {
|
||||||
NULL, NULL, NULL, NULL, -1, NULL
|
NULL, NULL, NULL, NULL, -1, NULL
|
||||||
};
|
};
|
||||||
@@ -551,5 +559,12 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
connect_mf(&options);
|
connect_mf(&options);
|
||||||
|
|
||||||
return fuse_main(argc, argv, &mediafirefs_oper, NULL);
|
ret = fuse_main(argc, argv, &mediafirefs_oper, NULL);
|
||||||
|
|
||||||
|
for (i = 0; i < argc; i++) {
|
||||||
|
free(argv[i]);
|
||||||
|
}
|
||||||
|
free(argv);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
46
tests/valgrind_fuse.sh
Executable file
46
tests/valgrind_fuse.sh
Executable file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
case $# in
|
||||||
|
0)
|
||||||
|
source_dir="."
|
||||||
|
binary_dir="."
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
source_dir=$1
|
||||||
|
binary_dir=$2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "usage: $0 [source_dir] [binary_dir]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
cmd="valgrind --suppressions="${source_dir}/valgrind.supp" --fullpath-after="$source_dir" --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes --track-origins=yes --error-exitcode=1 --quiet"
|
||||||
|
|
||||||
|
if [ ! -f "./.mediafire-tools.conf" -a ! -f "~/.mediafire-tools.conf" ]; then
|
||||||
|
echo "no configuration file found" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ `mount -t fuse.mediafire-fuse | wc -l` -ne 0 ]; then
|
||||||
|
echo "a fuse fs is already mounted" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
$cmd "${binary_dir}/mediafire-fuse" -s -f -d /mnt &
|
||||||
|
fusepid="$!"
|
||||||
|
|
||||||
|
# once the file system is found to be mounted, print the tree and unmount
|
||||||
|
while sleep 1; do
|
||||||
|
if [ `mount -t fuse.mediafire-fuse | wc -l` -ne 0 ]; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
tree /mnt
|
||||||
|
|
||||||
|
fusermount -u /mnt
|
||||||
|
|
||||||
|
wait "$fusepid"
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
case $# in
|
case $# in
|
||||||
0)
|
0)
|
||||||
source_dir="."
|
source_dir="."
|
||||||
@@ -113,3 +113,15 @@
|
|||||||
obj:*/libjansson.so*
|
obj:*/libjansson.so*
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
fuse_opt_parse
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:strdup
|
||||||
|
obj:*libfuse.so*
|
||||||
|
obj:*libfuse.so*
|
||||||
|
fun:fuse_opt_parse
|
||||||
|
fun:parse_arguments
|
||||||
|
fun:main
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user