text: #include <fcntl.h>
  #include <unistd.h>
  #include <errno.h>
  #include <string.h>
  #include <spawn.h>
  #include "stdio_impl.h"
  #include "syscall.h"
  
  extern char **__environ;
  
  FILE *popen(const char *cmd, const char *mode)
  {
  	int p[2], op, e;
  	pid_t pid;
  	FILE *f;
  	posix_spawn_file_actions_t fa;
  
  	if (*mode == 'r') {
  		op = 0;
  	} else if (*mode == 'w') {
  		op = 1;
  	} else {
  		errno = EINVAL;
  		return 0;
  	}
  	
  	if (pipe2(p, O_CLOEXEC)) return NULL;
  	f = fdopen(p[op], mode);
  	if (!f) {
  		int errno1 = errno;
  		close(p[0]);
  		close(p[1]);
  		errno = errno1;
  		return NULL;
  	}
  	FLOCK(f);
  
  	/* If the child's end of the pipe happens to already be on the final
  	 * fd number to which it will be assigned (either 0 or 1), it must
  	 * be moved to a different fd. Otherwise, there is no safe way to
  	 * remove the close-on-exec flag in the child without also creating
  	 * a file descriptor leak race condition in the parent. */
  	if (p[1-op] == 1-op) {
  		int tmp = fcntl(1-op, F_DUPFD_CLOEXEC, 0);
  		if (tmp < 0) {
  			e = errno;
  			goto fail;
  		}
  		int errno1 = errno;
  		close(p[1-op]);
  		errno = errno1;
  		p[1-op] = tmp;
  	}
  
  	e = ENOMEM;
  	if (!posix_spawn_file_actions_init(&fa)) {
  		if (!posix_spawn_file_actions_adddup2(&fa, p[1-op], 1-op)) {
  			if (!(e = posix_spawn(&pid, "/bin/sh", &fa, 0,
  			    (char *[]){ "sh", "-c", (char *)cmd, 0 }, __environ))) {
  				posix_spawn_file_actions_destroy(&fa);
  				f->pipe_pid = pid;
  				if (!strchr(mode, 'e'))
  					fcntl(p[op], F_SETFD, 0);
  				int errno1 = errno;
  				close(p[1-op]);
  				errno = errno1;
  				FUNLOCK(f);
  				return f;
  			}
  		}
  		posix_spawn_file_actions_destroy(&fa);
  	}
  fail:
  	fclose(f);
  	close(p[1-op]);
  
  	errno = e;
  	return 0;
  }
  