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