a7344fd6d997c8de1bc47bdd8bb23cc4d400f38a
[reactos.git] / base / applications / network / net / cmdShare.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS net command
4 * FILE: base/applications/network/net/cmdShare.c
5 * PROGRAMMERS: Eric Kohl <eric.kohl@reactos.org>
6 */
7
8 #include "net.h"
9
10
11 NET_API_STATUS
12 EnumerateShares(VOID)
13 {
14 PSHARE_INFO_2 pBuffer = NULL;
15 DWORD dwRead = 0, dwTotal = 0;
16 DWORD ResumeHandle = 0, i;
17 NET_API_STATUS Status;
18
19 ConPuts(StdOut, L"\n");
20 PrintMessageString(4730);
21 ConPuts(StdOut, L"\n");
22 PrintPadding(L'-', 79);
23 ConPuts(StdOut, L"\n");
24
25 do
26 {
27 Status = NetShareEnum(NULL,
28 2,
29 (LPBYTE*)&pBuffer,
30 MAX_PREFERRED_LENGTH,
31 &dwRead,
32 &dwTotal,
33 &ResumeHandle);
34 if ((Status != NERR_Success) && (Status != ERROR_MORE_DATA))
35 return Status;
36
37 for (i = 0; i < dwRead; i++)
38 {
39 ConPrintf(StdOut, L"%-12s %-31s %s\n", pBuffer[i].shi2_netname, pBuffer[i].shi2_path, pBuffer[i].shi2_remark);
40 }
41
42 NetApiBufferFree(pBuffer);
43 pBuffer = NULL;
44 }
45 while (Status == ERROR_MORE_DATA);
46
47 return NERR_Success;
48 }
49
50
51 NET_API_STATUS
52 DisplayShare(
53 PWSTR pShareName)
54 {
55 PSHARE_INFO_2 pBuffer = NULL;
56 INT nPaddedLength = 22;
57 NET_API_STATUS Status;
58
59 Status = NetShareGetInfo(NULL,
60 pShareName,
61 2,
62 (LPBYTE*)&pBuffer);
63 if (Status != NERR_Success)
64 return Status;
65
66 PrintPaddedMessageString(4731, nPaddedLength);
67 ConPrintf(StdOut, L"%s\n", pBuffer->shi2_netname);
68
69 PrintPaddedMessageString(4339, nPaddedLength);
70 ConPrintf(StdOut, L"%s\n", pBuffer->shi2_path);
71
72 PrintPaddedMessageString(4334, nPaddedLength);
73 ConPrintf(StdOut, L"%s\n", pBuffer->shi2_remark);
74
75 PrintPaddedMessageString(4735, nPaddedLength);
76 if (pBuffer->shi2_max_uses == (DWORD)-1)
77 PrintMessageString(4736);
78 else
79 ConPrintf(StdOut, L"%lu", pBuffer->shi2_max_uses);
80 ConPrintf(StdOut, L"\n");
81
82 PrintPaddedMessageString(4737, nPaddedLength);
83 if (pBuffer->shi2_current_uses > 0)
84 ConPrintf(StdOut, L"%lu", pBuffer->shi2_current_uses);
85 ConPrintf(StdOut, L"\n");
86
87 NetApiBufferFree(pBuffer);
88
89 return NERR_Success;
90 }
91
92
93 INT
94 cmdShare(
95 INT argc,
96 WCHAR **argv)
97 {
98 PWSTR pShareName = NULL;
99 INT i, result = 0;
100 NET_API_STATUS Status;
101
102 i = 2;
103 if (argv[i][0] != L'/')
104 {
105 pShareName = argv[i];
106 i++;
107 }
108
109 for (; i < argc; i++)
110 {
111 if (_wcsicmp(argv[i], L"/help") == 0)
112 {
113 /* Print full help text*/
114 PrintMessageString(4381);
115 ConPuts(StdOut, L"\n");
116 PrintNetMessage(MSG_SHARE_SYNTAX);
117 PrintNetMessage(MSG_SHARE_HELP);
118 return 0;
119 }
120 }
121
122 if (pShareName == NULL)
123 {
124 Status = EnumerateShares();
125 ConPrintf(StdOut, L"Status: %lu\n", Status);
126 }
127 else
128 {
129 Status = DisplayShare(pShareName);
130 ConPrintf(StdOut, L"Status: %lu\n", Status);
131 }
132
133 return result;
134 }
135
136 /* EOF */