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

// Partial <sys/stat.h>-lookalike-ish. Note that this is a C header, so that
// crappy (and non-crappy) C programs can use it.
//
// In general, functions/types/macros are given "mojio_"/"MOJIO_"/etc. prefixes.
// There are a handful of exceptions (noted below).

#ifndef SERVICES_FILES_C_MOJIO_SYS_STAT_H_
#define SERVICES_FILES_C_MOJIO_SYS_STAT_H_

// Includes --------------------------------------------------------------------

// <sys/stat.h> is required to define a large number of types defined in
// <sys/types.h>, so we just include our equivalent of the latter.
#include "services/files/c/mojio_sys_types.h"

// We need our |struct timespec| equivalent.
#include "services/files/c/mojio_time.h"

// Macros ----------------------------------------------------------------------

#define MOJIO_S_IRWXU (MOJIO_S_IRUSR | MOJIO_S_IWUSR | MOJIO_S_IXUSR)
#define MOJIO_S_IRUSR 00400
#define MOJIO_S_IWUSR 00200
#define MOJIO_S_IXUSR 00100

#define MOJIO_S_IRWXG (MOJIO_S_IRGRP | MOJIO_S_IWGRP | MOJIO_S_IXGRP)
#define MOJIO_S_IRGRP 00040
#define MOJIO_S_IWGRP 00020
#define MOJIO_S_IXGRP 00010

#define MOJIO_S_IRWXO (MOJIO_S_IROTH | MOJIO_S_IWOTH | MOJIO_S_IXOTH)
#define MOJIO_S_IROTH 00004
#define MOJIO_S_IWOTH 00002
#define MOJIO_S_IXOTH 00001

#define MOJIO_S_ISUID 04000
#define MOJIO_S_ISGID 02000
#define MOJIO_S_ISVTX 01000

// Mask for the values below.
#define MOJIO_S_IFMT 0170000
// These values are mysterious, but are the standard values on Linux.
#define MOJIO_S_IFBLK 0060000
#define MOJIO_S_IFCHR 0020000
#define MOJIO_S_IFDIR 0040000
#define MOJIO_S_IFIFO 0010000
#define MOJIO_S_IFLNK 0120000
#define MOJIO_S_IFREG 0100000
#define MOJIO_S_IFSOCK 0140000

#define MOJIO_S_ISBLK(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFBLK)
#define MOJIO_S_ISCHR(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFCHR)
#define MOJIO_S_ISDIR(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFDIR)
#define MOJIO_S_ISFIFO(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFIFO)
#define MOJIO_S_ISLNK(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFLNK)
#define MOJIO_S_ISREG(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFREG)
#define MOJIO_S_ISSOCK(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFSOCK)

// These are for backwards compatibility with older versions of POSIX. Since we
// didn't prefix the names of the members in |struct mojio_stat| below, we don't
// prefix these macro names either. This means that we'll collide with the
// "real" <sys/stat.h>, but that should be fine as long as it follows
// POSIX.1-2008 to the letter (since the macro definitions will be identical,
// which is valid).
#define st_atime st_atim.tv_sec
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec

// Types -----------------------------------------------------------------------

struct mojio_stat {
  mojio_dev_t st_dev;
  mojio_ino_t st_ino;
  mojio_mode_t st_mode;
  mojio_nlink_t st_nlink;
  mojio_uid_t st_uid;
  mojio_gid_t st_gid;
  mojio_dev_t st_rdev;
  mojio_off_t st_size;
  struct mojio_timespec st_atim;
  struct mojio_timespec st_mtim;
  struct mojio_timespec st_ctim;
  mojio_blksize_t st_blksize;
  mojio_blkcnt_t st_blocks;
};

// Functions -------------------------------------------------------------------

#ifdef __cplusplus
extern "C" {
#endif

// TODO(vtl): Below is a complete list of functions in <sys/stat.h> (according
// to POSIX.1-2008, 2013 edition). Figure out which ones we want/need to
// support.
//
//   int chmod(const char*, mode_t);
//   int fchmod(int, mode_t);
//   int fchmodat(int, const char*, mode_t, int);
//   [DONE] int fstat(int, struct stat*);
//   int fstatat(int, const char* restrict, struct stat* restrict, int);
//   int futimens(int, const struct timespec [2]);
//   int lstat(const char* restrict, struct stat* restrict);
//   int mkdir(const char*, mode_t);
//   int mkdirat(int, const char*, mode_t);
//   int mkfifo(const char*, mode_t);
//   int mkfifoat(int, const char*, mode_t);
//   [XSI] int mknod(const char*, mode_t, dev_t);
//   [XSI] int mknodat(int, const char*, mode_t, dev_t);
//   int stat(const char* restrict, struct stat* restrict);
//   mode_t umask(mode_t);
//   int utimensat(int, const char*, const struct timespec [2], int);

int mojio_fstat(int fd, struct mojio_stat* buf);

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // SERVICES_FILES_C_MOJIO_SYS_STAT_H_
