// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIB_FDIO_VFS_H_
#define LIB_FDIO_VFS_H_

#include <zircon/compiler.h>
#include <zircon/listnode.h>
#include <zircon/processargs.h>
#include <zircon/types.h>

#include <stdio.h>
#include <unistd.h>  // ssize_t

__BEGIN_CDECLS

// On Fuchsia, the Block Device is transmitted by file descriptor, rather than
// by path. This can prevent some racy behavior relating to FS start-up.
#ifdef __Fuchsia__
#define FS_HANDLE_ROOT_ID PA_HND(PA_USER0, 0)
#define FS_HANDLE_BLOCK_DEVICE_ID PA_HND(PA_USER0, 1)
#endif

// POSIX defines st_blocks to be the number of 512 byte blocks allocated
// to the file. The "blkcnt" field of vnattr attempts to accomplish
// this same goal, but by indirecting through VNATTR_BLKSIZE, we
// reserve the right to change this "block size unit" (which is distinct from
// "blksize", because POSIX) whenever we want.
#define VNATTR_BLKSIZE 512

typedef struct vnattr {
  uint32_t valid;  // mask of which bits to set for setattr
  uint32_t mode;
  uint64_t inode;
  uint64_t size;
  uint64_t blksize;   // Block size for filesystem I/O
  uint64_t blkcount;  // Number of VNATTR_BLKSIZE byte blocks allocated
  uint64_t nlink;
  uint64_t create_time;  // posix time (seconds since epoch)
  uint64_t modify_time;  // posix time
} vnattr_t;

// mask that identifies what fields to set in setattr
#define ATTR_CTIME 0000001
#define ATTR_MTIME 0000002
#define ATTR_ATIME 0000004  // not yet implemented

// bits compatible with POSIX stat
#define V_TYPE_MASK 0170000
#define V_TYPE_SOCK 0140000
#define V_TYPE_LINK 0120000
#define V_TYPE_FILE 0100000
#define V_TYPE_BDEV 0060000
#define V_TYPE_DIR 0040000
#define V_TYPE_CDEV 0020000
#define V_TYPE_PIPE 0010000

#define V_ISUID 0004000
#define V_ISGID 0002000
#define V_ISVTX 0001000
#define V_IRWXU 0000700
#define V_IRUSR 0000400
#define V_IWUSR 0000200
#define V_IXUSR 0000100
#define V_IRWXG 0000070
#define V_IRGRP 0000040
#define V_IWGRP 0000020
#define V_IXGRP 0000010
#define V_IRWXO 0000007
#define V_IROTH 0000004
#define V_IWOTH 0000002
#define V_IXOTH 0000001

#define VTYPE_TO_DTYPE(mode) (((mode)&V_TYPE_MASK) >> 12)
#define DTYPE_TO_VTYPE(type) (((type)&15) << 12)

typedef struct vdirent {
  uint64_t ino;
  uint8_t size;
  uint8_t type;
  char name[0];
} __PACKED vdirent_t;

__END_CDECLS

#endif  // LIB_FDIO_VFS_H_
