ostype.c revision d1154eb460efe588eaed3d439c1caaca149fa362
13d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes/*
23d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes * getostype.c          - Get the Filesystem OS type
33d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes *
43d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes * Copyright (C) 2004,2005  Theodore Ts'o <tytso@mit.edu>
50a16b22e64336d01967bc2a25c7c3a3bde0358afOscar Fuentes *
60a16b22e64336d01967bc2a25c7c3a3bde0358afOscar Fuentes * %Begin-Header%
70a16b22e64336d01967bc2a25c7c3a3bde0358afOscar Fuentes * This file may be redistributed under the terms of the GNU Library
81221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi * General Public License, version 2.
91221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi * %End-Header%
101221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi */
111221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi
121221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi#include "config.h"
131221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi#include "e2p.h"
141221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi#include <string.h>
151221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi#include <stdlib.h>
161221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi
171221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumistatic const char *os_tab[] =
181221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi	{ "Linux",
191221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi	  "Hurd",
201221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi	  "Masix",
211221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi	  "FreeBSD",
221221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi	  "Lites",
231221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi	  0 };
241221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi
251221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi/*
261221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi * Convert an os_type to a string
271221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumi */
281221139f1089c7f7afaf0aff1049625a8d31be9dNAKAMURA Takumichar *e2p_os2string(int os_type)
29da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes{
30da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes        const char	*os;
31420d23c3d6c0fd0a5ec8f03acbbd222a377339daRafael Espindola	char 		*ret;
323d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
332c5e0b8b981dc9d1ea575037b9befa8c3b6102b8Oscar Fuentes	if (os_type <= EXT2_OS_LITES)
343d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes		os = os_tab[os_type];
35da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes	else
36da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes		os = "(unknown os)";
37da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes
383d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes        ret = malloc(strlen(os)+1);
3960b531270b412621bf3d94186e96a38920ae78e8Oscar Fuentes	if (ret)
403d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes		strcpy(ret, os);
413d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes        return ret;
4260b531270b412621bf3d94186e96a38920ae78e8Oscar Fuentes}
433d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
443d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes/*
453d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes * Convert an os_type to a string
463d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes */
473d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentesint e2p_string2os(char *str)
4860b531270b412621bf3d94186e96a38920ae78e8Oscar Fuentes{
493d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	const char	**cpp;
503d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	int		i = 0;
5160b531270b412621bf3d94186e96a38920ae78e8Oscar Fuentes
523d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	for (cpp = os_tab; *cpp; cpp++, i++) {
533d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes		if (!strcasecmp(str, *cpp))
5460b531270b412621bf3d94186e96a38920ae78e8Oscar Fuentes			return i;
553d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	}
563d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	return -1;
573d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes}
583d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
593d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes#ifdef TEST_PROGRAM
603d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentesint main(int argc, char **argv)
613d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes{
623d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	char 	*s;
633d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	int	i, os;
643d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes
653d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	for (i=0; i <= EXT2_OS_LITES; i++) {
66de98db33fb10a13ead2fa56d6d4c944cedb8fbadOscar Fuentes		s = e2p_os2string(i);
673d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes		os = e2p_string2os(s);
686a660d4a438ba79d5d1aaccfe2ffecdef3d7d2f1Oscar Fuentes		printf("%d: %s (%d)\n", i, s, os);
696a660d4a438ba79d5d1aaccfe2ffecdef3d7d2f1Oscar Fuentes		if (i != os) {
706a660d4a438ba79d5d1aaccfe2ffecdef3d7d2f1Oscar Fuentes			fprintf(stderr, "Failure!\n");
713d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes			exit(1);
72006bfeba06b99ac08a829b12a5f3cb748b810b02Oscar Fuentes		}
733d01fc7de86c75926e4e5ac7cc49f0116018893dOscar Fuentes	}
74da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes	exit(0);
75da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes}
76da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes#endif
77da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes
78da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes
79da7e2870eb43c464d06a2eea5edf42abdc59a9f1Oscar Fuentes