1 /*
2  * FILE  : lsdd.c
3  * AUTHOR: Emanuele ALIBERTI
4  * DATE  : 2000-08-04
5  * DESC  : List DOS devices, i.e. symbolic links created
6  *         in the \?? object manager's name space.
7  */
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <stdarg.h>
11 
12 #include <windef.h>
13 #include <winbase.h>
14 
15 
16 #include <reactos/buildno.h>
17 
18 #include "../win32err.h"
19 
20 #define LINKS_SIZE 32768
21 #define DEVICE_SIZE 8192
22 
23 static const LPWSTR error_prefix = L"lsdd: ";
24 
25 static char SymbolicLinks [LINKS_SIZE];
26 static char DosDeviceName [DEVICE_SIZE];
27 
28 static char DeviceNames [DEVICE_SIZE];
29 static char DeviceName [DEVICE_SIZE];
30 
31 
32 BOOL
33 WINAPI
GetNextString(char * BufferIn,char * BufferOut,char ** Next)34 GetNextString (
35 	char *	BufferIn,
36 	char *	BufferOut,
37 	char ** Next
38 	)
39 {
40 	char * next = *Next;
41 	char * w;
42 
43 	if ('\0' == *next) return FALSE;
44 	for (	w = BufferOut;
45 		('\0' != *next);
46 		next ++
47 		)
48 	{
49 		*(w ++) = *next;
50 	}
51 	*w = '\0';
52 	*Next = ++ next;
53 	return TRUE;
54 }
55 
56 
57 int
main(int argc,char * argv[])58 main (int argc, char * argv [] )
59 {
60 	printf (
61 		"ReactOS/Win32 %s - List DOS Devices Utility\n"
62 		"Written by E.Aliberti (%s)\n\n",
63 		KERNEL_VERSION_STR,
64 		__DATE__
65 		);
66 
67 	if (0 != QueryDosDevice (
68 			NULL, /* dump full directory */
69 			SymbolicLinks,
70 			sizeof SymbolicLinks
71 			)
72 		)
73 	{
74 		char * NextDosDevice = SymbolicLinks;
75 		char * NextDevice;
76 
77 		while (TRUE == GetNextString (
78 					SymbolicLinks,
79 					DosDeviceName,
80 					& NextDosDevice
81 					)
82 				)
83 		{
84 			printf ("%s\n", DosDeviceName);
85 			if (0 != QueryDosDevice (
86 					DosDeviceName,
87 					DeviceNames,
88 					sizeof DeviceNames
89 					)
90 				)
91 			{
92 				NextDevice = DeviceNames;
93 				while (TRUE == GetNextString (
94 							DeviceNames,
95 							DeviceName,
96 							& NextDevice
97 						)
98 					)
99 				{
100 					printf ("  -> \"%s\"\n", DeviceName);
101 				}
102 			}
103 			else
104 			{
105 				PrintWin32Error (
106 					error_prefix,
107 					GetLastError ()
108 					);
109 			}
110 			printf ("\n");
111 		}
112 	}
113 	else
114 	{
115 		PrintWin32Error (
116 			error_prefix,
117 			GetLastError ()
118 			);
119 		return EXIT_FAILURE;
120 	}
121 	return EXIT_SUCCESS;
122 }
123 
124 
125 /* EOF */
126