Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1006)

Side by Side Diff: ports/nacl-spawn/nacl_spawn.cc

Issue 1742043002: Make M-x shell work in emacs. (Closed) Base URL: https://chromium.googlesource.com/webports.git@master
Patch Set: fixes Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ports/nacl-spawn/nacl_apipe.c ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014 The Native Client Authors. All rights reserved. 1 // Copyright (c) 2014 The Native Client Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Emulates spawning/waiting process by asking JavaScript to do so. 5 // Emulates spawning/waiting process by asking JavaScript to do so.
6 6
7 // Include quoted spawn.h first so we can build in the presence of an installed 7 // Include quoted spawn.h first so we can build in the presence of an installed
8 // copy of nacl-spawn. 8 // copy of nacl-spawn.
9 #define IN_NACL_SPAWN_CC 9 #define IN_NACL_SPAWN_CC
10 #include "spawn.h" 10 #include "spawn.h"
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 } else if (S_ISDIR(st.st_mode)) { 347 } else if (S_ISDIR(st.st_mode)) {
348 // TODO(bradnelson): Land nacl_io ioctl to support this. 348 // TODO(bradnelson): Land nacl_io ioctl to support this.
349 } else if (S_ISCHR(st.st_mode)) { 349 } else if (S_ISCHR(st.st_mode)) {
350 // Unsupported. 350 // Unsupported.
351 } else if (S_ISBLK(st.st_mode)) { 351 } else if (S_ISBLK(st.st_mode)) {
352 // Unsupported. 352 // Unsupported.
353 } else if (S_ISFIFO(st.st_mode)) { 353 } else if (S_ISFIFO(st.st_mode)) {
354 char entry[100]; 354 char entry[100];
355 snprintf(entry, sizeof entry, 355 snprintf(entry, sizeof entry,
356 "NACL_SPAWN_FD_SETUP_%d=pipe:%d:%d:%d", count++, fd, 356 "NACL_SPAWN_FD_SETUP_%d=pipe:%d:%d:%d", count++, fd,
357 static_cast<int>(st.st_ino), st.st_rdev == O_WRONLY); 357 static_cast<int>(st.st_ino),
358 (st.st_rdev & O_WRONLY) == O_WRONLY);
358 nspawn_array_appendstring(envs_var, entry); 359 nspawn_array_appendstring(envs_var, entry);
359 } else if (S_ISLNK(st.st_mode)) { 360 } else if (S_ISLNK(st.st_mode)) {
360 // Unsupported. 361 // Unsupported.
361 } else if (S_ISSOCK(st.st_mode)) { 362 } else if (S_ISSOCK(st.st_mode)) {
362 // Unsupported. 363 // Unsupported.
363 } 364 }
364 } 365 }
365 return 0; 366 return 0;
366 } 367 }
367 368
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 memcpy(*data, result, result_len); 683 memcpy(*data, result, result_len);
683 (*data)[result_len] = '\0'; 684 (*data)[result_len] = '\0';
684 } 685 }
685 nspawn_var_release(result_var); 686 nspawn_var_release(result_var);
686 nspawn_var_release(result_dict_var); 687 nspawn_var_release(result_dict_var);
687 } 688 }
688 689
689 // Create a javascript pipe. pipefd[0] will be the read end of the pipe 690 // Create a javascript pipe. pipefd[0] will be the read end of the pipe
690 // and pipefd[1] the write end of the pipe. 691 // and pipefd[1] the write end of the pipe.
691 int nacl_spawn_pipe(int pipefd[2]) { 692 int nacl_spawn_pipe(int pipefd[2]) {
693 return nacl_spawn_pipe_flags(0, pipefd);
694 }
695
696 // Same as above with flags.
697 int nacl_spawn_pipe_flags(int flags, int pipefd[2]) {
692 if (pipefd == NULL) { 698 if (pipefd == NULL) {
693 errno = EFAULT; 699 errno = EFAULT;
694 return -1; 700 return -1;
695 } 701 }
696 702
697 struct PP_Var req_var = nspawn_dict_create(); 703 struct PP_Var req_var = nspawn_dict_create();
698 nspawn_dict_setstring(req_var, "command", "nacl_apipe"); 704 nspawn_dict_setstring(req_var, "command", "nacl_apipe");
699 705
700 struct PP_Var result_var = nspawn_send_request(req_var); 706 struct PP_Var result_var = nspawn_send_request(req_var);
701 int id = nspawn_dict_getint(result_var, "pipe_id"); 707 int id = nspawn_dict_getint(result_var, "pipe_id");
702 nspawn_var_release(result_var); 708 nspawn_var_release(result_var);
703 709
704 int read_fd; 710 int read_fd;
705 int write_fd; 711 int write_fd;
706 char path[100]; 712 char path[100];
707 sprintf(path, "/apipe/%d", id); 713 sprintf(path, "/apipe/%d", id);
708 read_fd = open(path, O_RDONLY); 714 // Filter out O_RDONLY + O_WRONLY
bsy_cr 2016/03/03 18:43:33 sorry about the drive-by. filtering out should be
bradn 2016/03/03 19:11:40 Thanks, that actually caught a mistake! Good to k
709 write_fd = open(path, O_WRONLY); 715 flags &= O_RDONLY | O_WRONLY;
716 read_fd = open(path, O_RDONLY | flags);
717 write_fd = open(path, O_WRONLY | flags);
710 if (read_fd < 0 || write_fd < 0) { 718 if (read_fd < 0 || write_fd < 0) {
711 if (read_fd >= 0) { 719 if (read_fd >= 0) {
712 close(read_fd); 720 close(read_fd);
713 } 721 }
714 if (write_fd >= 0) { 722 if (write_fd >= 0) {
715 close(write_fd); 723 close(write_fd);
716 } 724 }
717 return -1; 725 return -1;
718 } 726 }
719 pipefd[0] = read_fd; 727 pipefd[0] = read_fd;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 } 833 }
826 834
827 int execlpe(const char *path, const char *arg, ...) { /* char* const envp[] */ 835 int execlpe(const char *path, const char *arg, ...) { /* char* const envp[] */
828 NSPAWN_LOG("execlpe: %s", path); 836 NSPAWN_LOG("execlpe: %s", path);
829 VARG_TO_ARGV_ENVP; 837 VARG_TO_ARGV_ENVP;
830 // TODO(bradnelson): Limit path resolution to 'p' variants. 838 // TODO(bradnelson): Limit path resolution to 'p' variants.
831 return spawnve_impl(P_OVERLAY, path, argv, envp); 839 return spawnve_impl(P_OVERLAY, path, argv, envp);
832 } 840 }
833 841
834 }; // extern "C" 842 }; // extern "C"
OLDNEW
« no previous file with comments | « ports/nacl-spawn/nacl_apipe.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698