// File: /workspace/github_cpp_makefile_star2_O3/demon386[P]git-store/./libs/filesystem/src/operations.cpp
// Function: boost::filesystem::detail::symlink_status(boost::filesystem::path const&, boost::system::error_code*)
BOOST_FILESYSTEM_DECL
  file_status symlink_status(const path& p, error_code* ec)
  {
#   ifdef BOOST_POSIX_API

    struct stat path_stat;
    if (::lstat(p.c_str(), &path_stat)!= 0)
    {
      if (ec != 0)                            // always report errno, even though some
        ec->assign(errno, system_category());   // errno values are not status_errors

      if (errno == ENOENT || errno == ENOTDIR) // these are not errors
      {
        return fs::file_status(fs::file_not_found, fs::no_perms);
      }
      if (ec == 0)
        BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status",
          p, error_code(errno, system_category())));
      return fs::file_status(fs::status_error);
    }
    if (ec != 0) ec->clear();
    if (S_ISREG(path_stat.st_mode))
      return fs::file_status(fs::regular_file,
        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
    if (S_ISDIR(path_stat.st_mode))
      return fs::file_status(fs::directory_file,
        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
    if (S_ISLNK(path_stat.st_mode))
      return fs::file_status(fs::symlink_file,
        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
    if (S_ISBLK(path_stat.st_mode))
      return fs::file_status(fs::block_file,
        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
    if (S_ISCHR(path_stat.st_mode))
      return fs::file_status(fs::character_file,
        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
    if (S_ISFIFO(path_stat.st_mode))
      return fs::file_status(fs::fifo_file,
        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
    if (S_ISSOCK(path_stat.st_mode))
      return fs::file_status(fs::socket_file,
        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
    return fs::file_status(fs::type_unknown);

#   else  // Windows

    DWORD attr(::GetFileAttributesW(p.c_str()));
    if (attr == 0xFFFFFFFF)
    {
      return process_status_failure(p, ec);
    }

    if (ec != 0) ec->clear();

    if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
      return is_reparse_point_a_symlink(p)
             ? file_status(symlink_file, make_permissions(p, attr))
             : file_status(reparse_file, make_permissions(p, attr));

    return (attr & FILE_ATTRIBUTE_DIRECTORY)
      ? file_status(directory_file, make_permissions(p, attr))
      : file_status(regular_file, make_permissions(p, attr));

#   endif
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xb0, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movq (%rdi), %rdi
leaq -0xd0(%rbp), %rsi
callq 0xb610
testl %eax, %eax
je 0x26988
callq 0xb060
movq %rax, %r15
testq %r14, %r14
je 0x26957
movl (%r15), %r12d
callq 0x2c4e2
movl %r12d, (%r14)
movq %rax, 0x8(%r14)
movl (%r15), %edx
xorl %eax, %eax
movl $0x1, %ecx
cmpl $0x2, %edx
je 0x26a2e
cmpl $0x14, %edx
je 0x26a2e
testq %r14, %r14
je 0x26a45
movl $0xffff, %eax           # imm = 0xFFFF
xorl %ecx, %ecx
jmp 0x26a2e
testq %r14, %r14
je 0x2699d
movl $0x0, (%r14)
callq 0x2c4e2
movq %rax, 0x8(%r14)
movl -0xb8(%rbp), %edx
movl %edx, %esi
andl $0xf000, %esi           # imm = 0xF000
addl $0xfffff000, %esi       # imm = 0xFFFFF000
shrl $0xc, %esi
movl $0xffff, %eax           # imm = 0xFFFF
movl $0xa, %ecx
cmpl $0xb, %esi
ja 0x26a2e
leaq 0xf046(%rip), %rdi      # 0x35a10
movslq (%rdi,%rsi,4), %rsi
addq %rdi, %rsi
jmpq *%rsi
andl $0xfff, %edx            # imm = 0xFFF
movl $0x7, %ecx
jmp 0x26a2c
andl $0xfff, %edx            # imm = 0xFFF
movl $0x4, %ecx
jmp 0x26a2c
andl $0xfff, %edx            # imm = 0xFFF
movl $0x6, %ecx
jmp 0x26a2c
andl $0xfff, %edx            # imm = 0xFFF
movl $0x8, %ecx
jmp 0x26a2c
andl $0xfff, %edx            # imm = 0xFFF
movl $0x3, %ecx
jmp 0x26a2c
andl $0xfff, %edx            # imm = 0xFFF
movl $0x5, %ecx
jmp 0x26a2c
andl $0xfff, %edx            # imm = 0xFFF
movl $0x2, %ecx
movl %edx, %eax
shlq $0x20, %rax
orq %rcx, %rax
addq $0xb0, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movl $0x50, %edi
callq 0xb250
movq %rax, %r14
leaq -0x30(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0xf4c7(%rip), %rsi      # 0x35f29
leaq 0xf4d9(%rip), %rdx      # 0x35f42
leaq -0x40(%rbp), %rdi
callq 0xf8ee
movl (%r15), %r15d
callq 0x2c4e2
leaq -0x40(%rbp), %rsi
movq %r14, %rdi
movq %rbx, %rdx
movl %r15d, %ecx
movq %rax, %r8
callq 0x2946c
leaq 0x24ad2(%rip), %rsi     # 0x4b568
leaq 0x2ad9(%rip), %rdx      # 0x29576
movq %r14, %rdi
callq 0xb7b0
movq %rax, %rbx
movq -0x40(%rbp), %rdi
cmpq %r12, %rdi
je 0x26ac3
callq 0xb430
jmp 0x26ac3
movq %rax, %rbx
movq %r14, %rdi
callq 0xb360
movq %rbx, %rdi
callq 0xb7f0