pipe.c 545 B

123456789101112131415161718192021222324252627282930
  1. /* Copyright (C) 2001 Lineo, <davidm@lineo.com> */
  2. #include <unistd.h>
  3. #include <syscall.h>
  4. int pipe(int *fd)
  5. {
  6. long __res, __res2;
  7. __asm__ __volatile__ (
  8. "mov %2, r3;"
  9. "mov %3, r4;"
  10. "trapa #0x13;"
  11. "mov r1, %1;"
  12. : "=z" (__res),
  13. "=r" ((long) __res2)
  14. : "r" ((long) __NR_pipe),
  15. "r" ((long) fd)
  16. : "cc", "memory", "r1", "r3", "r4");
  17. if ((unsigned long)(__res) >= (unsigned long)(-125)) {
  18. int __err = -(__res);
  19. errno = __err;
  20. return(-1);
  21. }
  22. fd[0] = __res;
  23. fd[1] = __res2;
  24. return(0);
  25. }