diff --git a/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt b/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt index 457915a2be9..d47224b6f5f 100644 --- a/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt +++ b/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt @@ -1,4 +1,5 @@ list(APPEND SOURCE + common.c dirty.c fsutil.c fsutil.h) diff --git a/reactos/base/applications/cmdutils/fsutil/common.c b/reactos/base/applications/cmdutils/fsutil/common.c new file mode 100644 index 00000000000..563b52cf6c3 --- /dev/null +++ b/reactos/base/applications/cmdutils/fsutil/common.c @@ -0,0 +1,47 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS FS utility tool + * FILE: base/applications/cmdutils/common.c + * PURPOSE: FSutil common functions + * PROGRAMMERS: Pierre Schweitzer + */ + +#include "fsutil.h" + +int FindHandler(int argc, + const TCHAR *argv[], + HandlerItem * HandlersList, + int HandlerListCount, + void (*UsageHelper)(const TCHAR *)) +{ + int i; + int ret; + const TCHAR * Command; + + ret = 1; + Command = NULL; + i = HandlerListCount; + + /* If we have a command, does it match a known one? */ + if (argc > 1) + { + /* Browse all the known commands finding the right one */ + Command = argv[1]; + for (i = 0; i < HandlerListCount; ++i) + { + if (_tcsicmp(Command, HandlersList[i].Command) == 0) + { + ret = HandlersList[i].Handler(argc - 1, &argv[1]); + break; + } + } + } + + /* We failed finding someone to handle the caller's needs, print out */ + if (i == HandlerListCount) + { + UsageHelper(Command); + } + + return ret; +} diff --git a/reactos/base/applications/cmdutils/fsutil/dirty.c b/reactos/base/applications/cmdutils/fsutil/dirty.c index ead5a3686a5..cec651ea311 100644 --- a/reactos/base/applications/cmdutils/fsutil/dirty.c +++ b/reactos/base/applications/cmdutils/fsutil/dirty.c @@ -93,34 +93,7 @@ PrintUsage(const TCHAR * Command) int DirtyMain(int argc, const TCHAR *argv[]) { - int i; - int ret; - const TCHAR * Command; - - ret = 1; - Command = NULL; - i = (sizeof(HandlersList) / sizeof(HandlersList[0])); - - /* If we have a command, does it match a known one? */ - if (argc > 1) - { - /* Browse all the known commands finding the right one */ - Command = argv[1]; - for (i = 0; i < (sizeof(HandlersList) / sizeof(HandlersList[0])); ++i) - { - if (_tcsicmp(Command, HandlersList[i].Command) == 0) - { - ret = HandlersList[i].Handler(argc - 1, &argv[1]); - break; - } - } - } - - /* We failed finding someone to handle the caller's needs, print out */ - if (i == (sizeof(HandlersList) / sizeof(HandlersList[0]))) - { - PrintUsage(Command); - } - - return ret; + return FindHandler(argc, argv, (HandlerItem *)&HandlersList, + (sizeof(HandlersList) / sizeof(HandlersList[0])), + PrintUsage); } diff --git a/reactos/base/applications/cmdutils/fsutil/fsutil.c b/reactos/base/applications/cmdutils/fsutil/fsutil.c index 9269f0f2d9c..293b721215e 100644 --- a/reactos/base/applications/cmdutils/fsutil/fsutil.c +++ b/reactos/base/applications/cmdutils/fsutil/fsutil.c @@ -39,34 +39,7 @@ int __cdecl _tmain(int argc, const TCHAR *argv[]) { - int i; - int ret; - const TCHAR * Command; - - ret = 1; - Command = NULL; - i = (sizeof(HandlersList) / sizeof(HandlersList[0])); - - /* If we have a command, does it match a known one? */ - if (argc > 1) - { - /* Browse all the known commands finding the right one */ - Command = argv[1]; - for (i = 0; i < (sizeof(HandlersList) / sizeof(HandlersList[0])); ++i) - { - if (_tcsicmp(Command, HandlersList[i].Command) == 0) - { - ret = HandlersList[i].Handler(argc - 1, &argv[1]); - break; - } - } - } - - /* We failed finding someone to handle the caller's needs, print out */ - if (i == (sizeof(HandlersList) / sizeof(HandlersList[0]))) - { - PrintUsage(Command); - } - - return ret; + return FindHandler(argc, argv, (HandlerItem *)&HandlersList, + (sizeof(HandlersList) / sizeof(HandlersList[0])), + PrintUsage); } diff --git a/reactos/base/applications/cmdutils/fsutil/fsutil.h b/reactos/base/applications/cmdutils/fsutil/fsutil.h index 1eaaba0e6bb..bd4a3067d49 100644 --- a/reactos/base/applications/cmdutils/fsutil/fsutil.h +++ b/reactos/base/applications/cmdutils/fsutil/fsutil.h @@ -12,4 +12,10 @@ typedef struct const TCHAR * Desc; } HandlerItem; +int FindHandler(int argc, + const TCHAR *argv[], + HandlerItem * HandlersList, + int HandlerListCount, + void (*UsageHelper)(const TCHAR *)); + #endif