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
16static 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 */
27char *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 */
46int 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
59int 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