user: 请将以下的汇编代码转换成C语言代码:

```asm
<tty_open>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%rbx
  mov    %rsi,%rbp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  mov    D171(%rip),%rax
  mov    (%rax),%esi
  call   <access@plt>
  test   %rax,%rax
  jne    L60
  mov    D309(%rip),%rax
  mov    (%rax),%esi
  mov    D74(%rip),%rax
  or     (%rax),%esi
  mov    %rbx,%rdi
  call   <open@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  js     L59
  mov    %rsp,%rsi
  mov    %eax,%edi
  call   <tcgetattr@plt>
  test   %eax,%eax
  js     L3
  movdqa (%rsp),%xmm0
  movups %xmm0,0x0(%rbp)
  mov    0x10(%rsp),%rdx
  mov    %rdx,0x10(%rbp)
  mov    D259(%rip),%rax
  mov    (%rax),%eax
  mov    D218(%rip),%rcx
  or     (%rcx),%eax
  mov    D174(%rip),%rcx
  or     (%rcx),%eax
  mov    D219(%rip),%rcx
  or     (%rcx),%eax
  not    %eax
  and    %eax,(%rsp)
  mov    D160(%rip),%rax
  mov    (%rax),%eax
  mov    D157(%rip),%rcx
  or     (%rcx),%eax
  mov    D38(%rip),%rcx
  or     (%rcx),%eax
  not    %eax
  and    0x4(%rsp),%eax
  mov    D45(%rip),%rcx
  or     (%rcx),%eax
  mov    %eax,0x4(%rsp)
  mov    D184(%rip),%rax
  mov    (%rax),%eax
  mov    D105(%rip),%rcx
  or     (%rcx),%eax
  mov    D244(%rip),%rcx
  or     (%rcx),%eax
  mov    D195(%rip),%rcx
  or     (%rcx),%eax
  not    %eax
  and    0x8(%rsp),%eax
  mov    D17(%rip),%rcx
  mov    (%rcx),%ecx
  mov    D212(%rip),%rsi
  or     (%rsi),%ecx
  mov    D229(%rip),%rsi
  or     (%rsi),%ecx
  mov    D44(%rip),%rsi
  or     (%rsi),%ecx
  or     %ecx,%eax
  mov    %eax,0x8(%rsp)
  mov    D143(%rip),%rax
  mov    (%rax),%eax
  mov    D235(%rip),%rcx
  or     (%rcx),%eax
  mov    D191(%rip),%rcx
  or     (%rcx),%eax
  mov    D56(%rip),%rcx
  or     (%rcx),%eax
  mov    D152(%rip),%rcx
  or     (%rcx),%eax
  mov    D99(%rip),%rcx
  or     (%rcx),%eax
  mov    D54(%rip),%rcx
  or     (%rcx),%eax
  mov    D134(%rip),%rcx
  or     (%rcx),%eax
  mov    D109(%rip),%rcx
  or     (%rcx),%eax
  not    %eax
  and    %eax,0xc(%rsp)
  mov    D137(%rip),%rax
  mov    (%rax),%rax
  movl   $0x0,(%rdx,%rax,4)
  mov    D247(%rip),%rax
  mov    (%rax),%rdx
  mov    0x10(%rsp),%rax
  movl   $0xa,(%rax,%rdx,4)
  mov    %rsp,%rdx
  mov    D21(%rip),%rax
  mov    (%rax),%esi
  mov    %ebx,%edi
  call   <tcsetattr@plt>
  test   %eax,%eax
  mov    $0xffffffff,%eax
  cmovs  %eax,%ebx
L58:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L28
  mov    %ebx,%eax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  ret
L3:
  mov    %ebx,%edi
  call   <close@plt>
  mov    $0xffffffff,%ebx
  jmp    L58
L60:
  mov    $0xffffffff,%ebx
  jmp    L58
L59:
  mov    $0xffffffff,%ebx
  jmp    L58
L28:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int tty_open(char *name, struct termios *sv_tios) {
  int ret;
  int fd;
  struct termios tios;
  if (access(name, F_OK) || (fd = open(name, O_RDWR | O_NONBLOCK)) < 0) {
    return -1;
  }
  if ((ret = tcgetattr(fd, &tios)) < 0) {
    close(fd);
    return -1;
  }
  *sv_tios = tios;
  tios.c_iflag &= ~(IXON | IXOFF | INLCR | ICRNL);
  tios.c_oflag &= ~(OPOST | ONLCR | OCRNL);
  tios.c_oflag |= ONLRET;
  tios.c_cflag &= ~(CBAUD | CSIZE | CSTOPB | PARENB);
  tios.c_cflag |= CLOCAL | CREAD | B9600 | CS8;
  tios.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOCTL | ISIG | IEXTEN);
  tios.c_cc[VMIN] = 0;
  tios.c_cc[VTIME] = 10;
  if ((ret = tcsetattr(fd, TCSAFLUSH, &tios)) < 0) {
    return -1;
  }
  return fd;
}
```