1 /*
2 * getostype.c - Get the Filesystem OS type
3 *
4 * Copyright (C) 2004,2005 Theodore Ts'o <tytso@mit.edu>
5 *
6 * %Begin-Header%
7 * This file may be redistributed under the terms of the GNU Library
8 * General Public License, version 2.
9 * %End-Header%
10 */
11
12 #include "e2p.h"
13 #include <string.h>
14 #include <stdlib.h>
15
16 static const char *os_tab[] =
17 { "Linux",
18 "Hurd",
19 "Masix",
20 "FreeBSD",
21 "Lites",
22 0 };
23
24 /*
25 * Convert an os_type to a string
26 */
e2p_os2string(int os_type)27 char *e2p_os2string(int os_type)
28 {
29 const char *os;
30 char *ret;
31
32 if (os_type <= EXT2_OS_LITES)
33 os = os_tab[os_type];
34 else
35 os = "(unknown os)";
36
37 ret = malloc(strlen(os)+1);
38 if (ret)
39 strcpy(ret, os);
40 return ret;
41 }
42
43 /*
44 * Convert an os_type to a string
45 */
e2p_string2os(char * str)46 int e2p_string2os(char *str)
47 {
48 const char **cpp;
49 int i = 0;
50
51 for (cpp = os_tab; *cpp; cpp++, i++) {
52 if (!strcasecmp(str, *cpp))
53 return i;
54 }
55 return -1;
56 }
57
58 #ifdef TEST_PROGRAM
main(int argc,char ** argv)59 int main(int argc, char **argv)
60 {
61 char *s;
62 int i, os;
63
64 for (i=0; i <= EXT2_OS_LITES; i++) {
65 s = e2p_os2string(i);
66 os = e2p_string2os(s);
67 printf("%d: %s (%d)\n", i, s, os);
68 if (i != os) {
69 fprintf(stderr, "Failure!\n");
70 exit(1);
71 }
72 }
73 exit(0);
74 }
75 #endif
76
77
78