r6611: Add mailslot test program
[ira/wip.git] / testprogs / win32 / testmailslot / testmailslot.c
1 /*\r
2  * Very simple test application for mailslots\r
3  * (C) 2005 Jelmer Vernooij <jelmer@samba.org>\r
4  * Published to the public domain\r
5  */\r
6 \r
7 #include <windows.h>\r
8 #include <stdio.h>\r
9 \r
10 int read_slot(const char *mailslotname)\r
11 {\r
12         HANDLE h;\r
13         DWORD nr;\r
14         char data[30000];\r
15         DWORD nextsize, nummsg = 0;\r
16 \r
17         if (strncmp(mailslotname, "\\\\.\\mailslot\\", 13) && strncmp(mailslotname, "\\\\*\\mailslot\\", 13)) {\r
18                 printf("Must specify local mailslot name (starting with \\\\.\\mailslot\\)\n");\r
19                 return 1;\r
20         }\r
21 \r
22         h = CreateMailslot(mailslotname, 0, MAILSLOT_WAIT_FOREVER, NULL);\r
23 \r
24         if (h == INVALID_HANDLE_VALUE) {\r
25                 printf("Unable to create mailslot %s: %d\n", mailslotname, GetLastError());\r
26                 return 1;\r
27         }\r
28 \r
29         if (!ReadFile(h, data, sizeof(data)-1, &nr, NULL)) {\r
30                 printf("Error reading: %d\n", GetLastError());\r
31                 return 1;\r
32         }\r
33 \r
34         data[nr] = '\0';\r
35 \r
36         printf("%s\n", data);\r
37 \r
38         CloseHandle(h);\r
39 }\r
40 \r
41 int write_slot(const char *mailslotname)\r
42 {\r
43         HANDLE h;\r
44         DWORD nw;\r
45         char data[30000];\r
46         h = CreateFile(mailslotname, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,  NULL);\r
47 \r
48         if (h == INVALID_HANDLE_VALUE) {\r
49                 printf("Unable to open file: %d\n", GetLastError());\r
50                 return 1;\r
51         }\r
52 \r
53         gets(data);\r
54 \r
55         if (!WriteFile(h, data, strlen(data), &nw, NULL)) {\r
56                 printf("Error writing file: %d\n", GetLastError());\r
57                 return 1;\r
58         }\r
59 \r
60         CloseHandle(h); \r
61 }\r
62 \r
63 int main(int argc, char **argv)\r
64 {\r
65         if (argc < 3 || \r
66                         (strcmp(argv[1], "read") && strcmp(argv[1], "write"))) {\r
67                 printf("Usage: %s read|write mailslot\n", argv[0]);\r
68                 return 1;\r
69         }\r
70 \r
71         if (!strcmp(argv[1], "read")) {\r
72                 return read_slot(argv[2]);\r
73         }\r
74 \r
75         if (!strcmp(argv[1], "write")) {\r
76                 return write_slot(argv[2]);\r
77         }\r
78 \r
79         return 0;\r
80 }\r