| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2008 The Native Client Authors. All rights reserved. | 2 * Copyright 2008 The Native Client Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can | 3 * Use of this source code is governed by a BSD-style license that can |
| 4 * be found in the LICENSE file. | 4 * be found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 | 7 |
| 8 #include <stdio.h> | 8 #include <stdio.h> |
| 9 #include <stdlib.h> | 9 #include <stdlib.h> |
| 10 #include <nacl/nacl_srpc.h> | 10 #include <nacl/nacl_srpc.h> |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 if (-1 != fstat(fd, &stb)) { | 35 if (-1 != fstat(fd, &stb)) { |
| 36 #define P(fmt, field) \ | 36 #define P(fmt, field) \ |
| 37 do { printf(#field " = " fmt "\n", (int) stb.field); } while (0) | 37 do { printf(#field " = " fmt "\n", (int) stb.field); } while (0) |
| 38 | 38 |
| 39 P("0x%04x", st_mode); | 39 P("0x%04x", st_mode); |
| 40 P("0x%x", st_nlink); | 40 P("0x%x", st_nlink); |
| 41 P("0x%x", st_size); | 41 P("0x%x", st_size); |
| 42 P("%d", st_size); | 42 P("%d", st_size); |
| 43 #undef P | 43 #undef P |
| 44 } | 44 } |
| 45 bufsize = out_args[0]->u.caval.count; | 45 bufsize = out_args[0]->u.count; |
| 46 printf("read loop, up to %d chars\n", bufsize); | 46 printf("read loop, up to %d chars\n", bufsize); |
| 47 if ((stb.st_mode & S_IFMT) == S_IFSHM) { | 47 if ((stb.st_mode & S_IFMT) == S_IFSHM) { |
| 48 /* Chrome integration returns a shared memory descriptor for this now. */ | 48 /* Chrome integration returns a shared memory descriptor for this now. */ |
| 49 char *file_map; | 49 char *file_map; |
| 50 printf("mmapping\n"); | 50 printf("mmapping\n"); |
| 51 file_map = (char *) mmap(NULL, stb.st_size, PROT_READ, MAP_SHARED, fd, 0); | 51 file_map = (char *) mmap(NULL, stb.st_size, PROT_READ, MAP_SHARED, fd, 0); |
| 52 if (MAP_FAILED == file_map) { | 52 if (MAP_FAILED == file_map) { |
| 53 printf("map failed"); | 53 printf("map failed"); |
| 54 done->Run(done); | 54 done->Run(done); |
| 55 return; | 55 return; |
| 56 } | 56 } |
| 57 for (nchar = 0; nchar < bufsize - 1; ++nchar) { | 57 for (nchar = 0; nchar < bufsize - 1; ++nchar) { |
| 58 ch = file_map[nchar]; | 58 ch = file_map[nchar]; |
| 59 out_args[0]->u.caval.carr[nchar] = ch; | 59 out_args[0]->arrays.carr[nchar] = ch; |
| 60 putchar(ch); | 60 putchar(ch); |
| 61 } | 61 } |
| 62 out_args[0]->u.caval.carr[nchar] = '\0'; | 62 out_args[0]->arrays.carr[nchar] = '\0'; |
| 63 printf("EOF\n"); | 63 printf("EOF\n"); |
| 64 } else { | 64 } else { |
| 65 FILE *iob = fdopen(fd, "r"); | 65 FILE *iob = fdopen(fd, "r"); |
| 66 printf("fdopening\n"); | 66 printf("fdopening\n"); |
| 67 if (NULL == iob) { | 67 if (NULL == iob) { |
| 68 printf("fdopen failed"); | 68 printf("fdopen failed"); |
| 69 done->Run(done); | 69 done->Run(done); |
| 70 return; | 70 return; |
| 71 } | 71 } |
| 72 for (nchar = 0; EOF != (ch = getc(iob)) && nchar < bufsize-1; ++nchar) { | 72 for (nchar = 0; EOF != (ch = getc(iob)) && nchar < bufsize-1; ++nchar) { |
| 73 out_args[0]->u.caval.carr[nchar] = ch; | 73 out_args[0]->arrays.carr[nchar] = ch; |
| 74 putchar(ch); | 74 putchar(ch); |
| 75 } | 75 } |
| 76 out_args[0]->u.caval.carr[nchar] = '\0'; | 76 out_args[0]->arrays.carr[nchar] = '\0'; |
| 77 printf("EOF\n"); | 77 printf("EOF\n"); |
| 78 fclose(iob); | 78 fclose(iob); |
| 79 } | 79 } |
| 80 printf("got %d bytes\n", nchar); | 80 printf("got %d bytes\n", nchar); |
| 81 printf("out param: %.*s\n", nchar, out_args[0]->u.caval.carr); | 81 printf("out param: %.*s\n", nchar, out_args[0]->arrays.carr); |
| 82 rpc->result = NACL_SRPC_RESULT_OK; | 82 rpc->result = NACL_SRPC_RESULT_OK; |
| 83 done->Run(done); | 83 done->Run(done); |
| 84 } | 84 } |
| 85 | 85 |
| 86 const struct NaClSrpcHandlerDesc srpc_methods[] = { | 86 const struct NaClSrpcHandlerDesc srpc_methods[] = { |
| 87 { "cat:h:C", Cat }, | 87 { "cat:h:C", Cat }, |
| 88 { NULL, NULL }, | 88 { NULL, NULL }, |
| 89 }; | 89 }; |
| 90 | 90 |
| 91 int main() { | 91 int main() { |
| 92 if (!NaClSrpcModuleInit()) { | 92 if (!NaClSrpcModuleInit()) { |
| 93 return 1; | 93 return 1; |
| 94 } | 94 } |
| 95 if (!NaClSrpcAcceptClientConnection(srpc_methods)) { | 95 if (!NaClSrpcAcceptClientConnection(srpc_methods)) { |
| 96 return 1; | 96 return 1; |
| 97 } | 97 } |
| 98 NaClSrpcModuleFini(); | 98 NaClSrpcModuleFini(); |
| 99 return 0; | 99 return 0; |
| 100 } | 100 } |
| OLD | NEW |