filetype.c (992B)
- // Collection of Unix tools, comparable to coreutils
- // SPDX-FileCopyrightText: 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
- // SPDX-License-Identifier: MPL-2.0
- #define _POSIX_C_SOURCE 200809L
- #define _XOPEN_SOURCE 700 // S_ISVTX, S_IFMT, S_IFDIR, …
- #include "./mode.h"
- #include <sys/stat.h>
- const char *
- filetype(struct stat *st)
- {
- #ifdef S_TYPEISMQ
- if(S_TYPEISMQ(st)) return "message queue";
- #endif
- #ifdef S_TYPEISSEM
- if(S_TYPEISSEM(st)) return "semaphore";
- #endif
- #ifdef S_TYPEISSHM
- if(S_TYPEISSHM(st)) return "shared memory object";
- #endif
- #ifdef S_TYPEISTMO
- if(S_TYPEISTMO(st)) return "typed memory object";
- #endif
- switch(st->st_mode & S_IFMT)
- {
- case S_IFBLK:
- return "block special";
- case S_IFCHR:
- return "character special";
- case S_IFIFO:
- return "FIFO special";
- case S_IFREG:
- return "regular file";
- case S_IFLNK:
- return "symbolic link";
- case S_IFDIR:
- return "directory";
- case S_IFSOCK:
- return "socket";
- }
- return "unknown filetype";
- }