Author: pschweitzer Date: Fri Sep 8 20:51:16 2017 New Revision: 75804 URL: http://svn.reactos.org/svn/reactos?rev=75804&view=rev Log: [FSUTIL] Implement fsutil hardlink create
Added: trunk/reactos/base/applications/cmdutils/fsutil/hardlink.c (with props) Modified: trunk/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt trunk/reactos/base/applications/cmdutils/fsutil/fsutil.c Modified: trunk/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt?rev=75804&r1=75803&r2=75804&view=diff ============================================================================== --- trunk/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/base/applications/cmdutils/fsutil/CMakeLists.txt [iso-8859-1] Fri Sep 8 20:51:16 2017 @@ -3,6 +3,7 @@ dirty.c fsinfo.c fsutil.c + hardlink.c fsutil.h) add_executable(fsutil ${SOURCE} fsutil.rc) set_module_type(fsutil win32cui UNICODE) Modified: trunk/reactos/base/applications/cmdutils/fsutil/fsutil.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils/fsutil/fsutil.c?rev=75804&r1=75803&r2=75804&view=diff ============================================================================== --- trunk/reactos/base/applications/cmdutils/fsutil/fsutil.c [iso-8859-1] (original) +++ trunk/reactos/base/applications/cmdutils/fsutil/fsutil.c [iso-8859-1] Fri Sep 8 20:51:16 2017 @@ -11,11 +11,13 @@ /* Add handlers here for commands */ int DirtyMain(int argc, const TCHAR *argv[]); int FsInfoMain(int argc, const TCHAR *argv[]); +int HardLinkMain(int argc, const TCHAR *argv[]); static HandlerItem HandlersList[] = { /* Proc, name, help */ { DirtyMain, _T("dirty"), _T("Manipulates the dirty bit") }, { FsInfoMain, _T("fsinfo"), _T("Gathers informations about file systems") }, + { HardLinkMain, _T("hardlink"), _T("Handles hard links") }, }; static void Added: trunk/reactos/base/applications/cmdutils/fsutil/hardlink.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils/fsutil/hardlink.c?rev=75804 ============================================================================== --- trunk/reactos/base/applications/cmdutils/fsutil/hardlink.c (added) +++ trunk/reactos/base/applications/cmdutils/fsutil/hardlink.c [iso-8859-1] Fri Sep 8 20:51:16 2017 @@ -0,0 +1,71 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS FS utility tool + * FILE: base/applications/cmdutils/hardlink.c + * PURPOSE: FSutil hard links handling + * PROGRAMMERS: Pierre Schweitzer <pie...@reactos.org> + */ + +#include "fsutil.h" + +/* Add handlers here for subcommands */ +static int CreateMain(int argc, const TCHAR *argv[]); +static HandlerItem HandlersList[] = +{ + /* Proc, name, help */ + { CreateMain, _T("create"), _T("Create a new hard link") }, +}; + +static int +CreateMain(int argc, const TCHAR *argv[]) +{ + TCHAR Source[MAX_PATH], Target[MAX_PATH]; + + /* We need a source and a destination */ + if (argc < 3) + { + _ftprintf(stderr, _T("Usage: fsutil hardlink create <new> <existing>\n")); + _ftprintf(stderr, _T("\tFor example: fsutil hardlink create c:\\target.txt c:\\source.txt\n")); + return 1; + } + + /* Get full names */ + if (GetFullPathName(argv[1], MAX_PATH, Target, NULL) == 0) + { + PrintErrorMessage(GetLastError()); + return 1; + } + + if (GetFullPathName(argv[2], MAX_PATH, Source, NULL) == 0) + { + PrintErrorMessage(GetLastError()); + return 1; + } + + /* Simply delegate to kernel32 */ + if (!CreateHardLink(Target, Source, NULL)) + { + PrintErrorMessage(GetLastError()); + return 1; + } + + /* Print the status */ + _ftprintf(stdout, _T("Hard link created for %s <=> %s\n"), Target, Source); + + return 0; +} + +static void +PrintUsage(const TCHAR * Command) +{ + PrintDefaultUsage(_T(" HARDLINK "), Command, (HandlerItem *)&HandlersList, + (sizeof(HandlersList) / sizeof(HandlersList[0]))); +} + +int +HardLinkMain(int argc, const TCHAR *argv[]) +{ + return FindHandler(argc, argv, (HandlerItem *)&HandlersList, + (sizeof(HandlersList) / sizeof(HandlersList[0])), + PrintUsage); +} Propchange: trunk/reactos/base/applications/cmdutils/fsutil/hardlink.c ------------------------------------------------------------------------------ svn:eol-style = native