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