| /* vi: set sw=4 ts=4: */ |
| /* |
| * getostype.c - Get the Filesystem OS type |
| * |
| * Copyright (C) 2004,2005 Theodore Ts'o <tytso@mit.edu> |
| * |
| * This file can be redistributed under the terms of the GNU Library General |
| * Public License |
| */ |
| |
| #include "e2p.h" |
| #include <string.h> |
| #include <stdlib.h> |
| |
| static const char *const os_tab[] = |
| { "Linux", |
| "Hurd", |
| "Masix", |
| "FreeBSD", |
| "Lites", |
| 0 }; |
| |
| /* |
| * Convert an os_type to a string |
| */ |
| char *e2p_os2string(int os_type) |
| { |
| const char *os; |
| char *ret; |
| |
| if (os_type <= EXT2_OS_LITES) |
| os = os_tab[os_type]; |
| else |
| os = "(unknown os)"; |
| |
| ret = xstrdup(os); |
| return ret; |
| } |
| |
| /* |
| * Convert an os_type to a string |
| */ |
| int e2p_string2os(char *str) |
| { |
| const char *const *cpp; |
| int i = 0; |
| |
| for (cpp = os_tab; *cpp; cpp++, i++) { |
| if (!strcasecmp(str, *cpp)) |
| return i; |
| } |
| return -1; |
| } |
| |
| #ifdef TEST_PROGRAM |
| int main(int argc, char **argv) |
| { |
| char *s; |
| int i, os; |
| |
| for (i=0; i <= EXT2_OS_LITES; i++) { |
| s = e2p_os2string(i); |
| os = e2p_string2os(s); |
| printf("%d: %s (%d)\n", i, s, os); |
| if (i != os) { |
| fprintf(stderr, "Failure!\n"); |
| exit(1); |
| } |
| } |
| exit(0); |
| } |
| #endif |