Line data Source code
1 : /* Return a string describing the type of a file.
2 :
3 : Copyright (C) 1993, 1994, 2001, 2002, 2004, 2005, 2006 Free
4 : Software Foundation, Inc.
5 :
6 : This program is free software: you can redistribute it and/or modify
7 : it under the terms of the GNU General Public License as published by
8 : the Free Software Foundation; either version 3 of the License, or
9 : (at your option) any later version.
10 :
11 : This program is distributed in the hope that it will be useful,
12 : but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : GNU General Public License for more details.
15 :
16 : You should have received a copy of the GNU General Public License
17 : along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 :
19 : /* Written by Paul Eggert. */
20 :
21 : #include <config.h>
22 :
23 : #include "file-type.h"
24 :
25 : #include <gettext.h>
26 : #define _(text) gettext (text)
27 :
28 : char const *
29 40 : file_type (struct stat const *st)
30 : {
31 : /* See POSIX 1003.1-2001 XCU Table 4-8 lines 17093-17107 for some of
32 : these formats.
33 :
34 : To keep diagnostics grammatical in English, the returned string
35 : must start with a consonant. */
36 :
37 40 : if (S_ISREG (st->st_mode))
38 31 : return st->st_size == 0 ? _("regular empty file") : _("regular file");
39 :
40 9 : if (S_ISDIR (st->st_mode))
41 4 : return _("directory");
42 :
43 5 : if (S_ISBLK (st->st_mode))
44 0 : return _("block special file");
45 :
46 5 : if (S_ISCHR (st->st_mode))
47 0 : return _("character special file");
48 :
49 5 : if (S_ISFIFO (st->st_mode))
50 0 : return _("fifo");
51 :
52 5 : if (S_ISLNK (st->st_mode))
53 5 : return _("symbolic link");
54 :
55 0 : if (S_ISSOCK (st->st_mode))
56 0 : return _("socket");
57 :
58 : if (S_TYPEISMQ (st))
59 : return _("message queue");
60 :
61 : if (S_TYPEISSEM (st))
62 : return _("semaphore");
63 :
64 : if (S_TYPEISSHM (st))
65 : return _("shared memory object");
66 :
67 : if (S_TYPEISTMO (st))
68 : return _("typed memory object");
69 :
70 0 : return _("weird file");
71 : }
|