1 /* 2 * feature.c --- convert between features and strings 3 * 4 * Copyright (C) 1999 Theodore Ts'o <tytso (at) mit.edu> 5 * 6 * %Begin-Header% 7 * This file may be redistributed under the terms of the GNU Library 8 * General Public License, version 2. 9 * %End-Header% 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 20 struct hash { 21 int num; 22 const char *string; 23 }; 24 25 static 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 32 const char *e2p_hash2string(int num) 33 { 34 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 */ 48 int e2p_string2hash(char *string) 49 { 50 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 72