1/* vi: set sw=4 ts=4: */ 2/* 3 * feature.c --- convert between features and strings 4 * 5 * Copyright (C) 1999 Theodore Ts'o <tytso@mit.edu> 6 * 7 * This file can be redistributed under the terms of the GNU Library General 8 * Public License 9 * 10 */ 11 12#include <stdio.h> 13#include <stdlib.h> 14#include <string.h> 15#include <ctype.h> 16#include <errno.h> 17 18#include "e2p.h" 19 20struct hash { 21 int num; 22 const char *string; 23}; 24 25static const struct hash hash_list[] = { 26 { EXT2_HASH_LEGACY, "legacy" }, 27 { EXT2_HASH_HALF_MD4, "half_md4" }, 28 { EXT2_HASH_TEA, "tea" }, 29 { 0, 0 }, 30}; 31 32const char *e2p_hash2string(int num) 33{ 34 const struct hash *p; 35 static char buf[20]; 36 37 for (p = hash_list; p->string; p++) { 38 if (num == p->num) 39 return p->string; 40 } 41 sprintf(buf, "HASHALG_%d", num); 42 return buf; 43} 44 45/* 46 * Returns the hash algorithm, or -1 on error 47 */ 48int e2p_string2hash(char *string) 49{ 50 const struct hash *p; 51 char *eptr; 52 int num; 53 54 for (p = hash_list; p->string; p++) { 55 if (!strcasecmp(string, p->string)) { 56 return p->num; 57 } 58 } 59 if (strncasecmp(string, "HASHALG_", 8)) 60 return -1; 61 62 if (string[8] == 0) 63 return -1; 64 num = strtol(string+8, &eptr, 10); 65 if (num > 255 || num < 0) 66 return -1; 67 if (*eptr) 68 return -1; 69 return num; 70} 71