unistd.c 788 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include <common/unistd.h>
  2. #include <common/glib.h>
  3. /**
  4. * @brief fork当前进程
  5. *
  6. * @return pid_t
  7. */
  8. pid_t fork(void)
  9. {
  10. return (pid_t)enter_syscall_int(SYS_FORK, 0, 0, 0, 0, 0, 0, 0, 0);
  11. }
  12. /**
  13. * @brief vfork当前进程
  14. *
  15. * @return pid_t
  16. */
  17. pid_t vfork(void)
  18. {
  19. return (pid_t)enter_syscall_int(SYS_VFORK, 0, 0, 0, 0, 0, 0, 0, 0);
  20. }
  21. void swab(void *restrict src, void *restrict dest, ssize_t nbytes)
  22. {
  23. unsigned char buf[32];
  24. char *_src = src;
  25. char *_dest = dest;
  26. uint32_t transfer;
  27. for (; nbytes > 0; nbytes -= transfer)
  28. {
  29. transfer = (nbytes > 32) ? 32 : nbytes;
  30. memcpy(buf, _src, transfer);
  31. memcpy(_src, _dest, transfer);
  32. memcpy(_dest, buf, transfer);
  33. _src += transfer;
  34. _dest += transfer;
  35. }
  36. }