[CLASS2]
[reactos.git] / reactos / base / applications / cmdutils / fsutil / hardlink.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS FS utility tool
4 * FILE: base/applications/cmdutils/hardlink.c
5 * PURPOSE: FSutil hard links handling
6 * PROGRAMMERS: Pierre Schweitzer <pierre@reactos.org>
7 */
8
9 #include "fsutil.h"
10
11 /* Add handlers here for subcommands */
12 static HandlerProc CreateMain;
13 static HandlerItem HandlersList[] =
14 {
15 /* Proc, name, help */
16 { CreateMain, _T("create"), _T("Create a new hard link") },
17 };
18
19 static int
20 CreateMain(int argc, const TCHAR *argv[])
21 {
22 TCHAR Source[MAX_PATH], Target[MAX_PATH];
23
24 /* We need a source and a destination */
25 if (argc < 3)
26 {
27 _ftprintf(stderr, _T("Usage: fsutil hardlink create <new> <existing>\n"));
28 _ftprintf(stderr, _T("\tFor example: fsutil hardlink create c:\\target.txt c:\\source.txt\n"));
29 return 1;
30 }
31
32 /* Get full names */
33 if (GetFullPathName(argv[1], MAX_PATH, Target, NULL) == 0)
34 {
35 PrintErrorMessage(GetLastError());
36 return 1;
37 }
38
39 if (GetFullPathName(argv[2], MAX_PATH, Source, NULL) == 0)
40 {
41 PrintErrorMessage(GetLastError());
42 return 1;
43 }
44
45 /* Simply delegate to kernel32 */
46 if (!CreateHardLink(Target, Source, NULL))
47 {
48 PrintErrorMessage(GetLastError());
49 return 1;
50 }
51
52 /* Print the status */
53 _ftprintf(stdout, _T("Hard link created for %s <=> %s\n"), Target, Source);
54
55 return 0;
56 }
57
58 static void
59 PrintUsage(const TCHAR * Command)
60 {
61 PrintDefaultUsage(_T(" HARDLINK "), Command, (HandlerItem *)&HandlersList,
62 (sizeof(HandlersList) / sizeof(HandlersList[0])));
63 }
64
65 int
66 HardLinkMain(int argc, const TCHAR *argv[])
67 {
68 return FindHandler(argc, argv, (HandlerItem *)&HandlersList,
69 (sizeof(HandlersList) / sizeof(HandlersList[0])),
70 PrintUsage);
71 }