ostype.c revision e32677cd58456f7581ec5dcc6583f89cb4a1acdd
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
14static 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 */
25char *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 */
44int 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
57int 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