blob: 697ffadc37eb934e80b418f533f6f637c123aa3f [file] [log] [blame]
"Robert P. J. Day"63fc1a92006-07-02 19:47:05 +00001/* vi: set sw=4 ts=4: */
Mike Frysingerd89e6292005-04-24 05:07:59 +00002/*
3 * feature.c --- convert between features and strings
Tim Rikerc1ef7bd2006-01-25 00:08:53 +00004 *
Mike Frysingerd89e6292005-04-24 05:07:59 +00005 * Copyright (C) 1999 Theodore Ts'o <tytso@mit.edu>
Tim Rikerc1ef7bd2006-01-25 00:08:53 +00006 *
Mike Frysingerd89e6292005-04-24 05:07:59 +00007 * This file can be redistributed under the terms of the GNU Library General
8 * Public License
Tim Rikerc1ef7bd2006-01-25 00:08:53 +00009 *
Mike Frysingerd89e6292005-04-24 05:07:59 +000010 */
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 {
Mike Frysinger85cffcc2005-06-11 00:08:50 +000021 int num;
22 const char *string;
Mike Frysingerd89e6292005-04-24 05:07:59 +000023};
24
"Vladimir N. Oleynik"1f0262b2005-10-20 11:17:48 +000025static const struct hash hash_list[] = {
Mike Frysinger85cffcc2005-06-11 00:08:50 +000026 { EXT2_HASH_LEGACY, "legacy" },
27 { EXT2_HASH_HALF_MD4, "half_md4" },
28 { EXT2_HASH_TEA, "tea" },
29 { 0, 0 },
Mike Frysingerd89e6292005-04-24 05:07:59 +000030};
31
32const char *e2p_hash2string(int num)
33{
"Vladimir N. Oleynik"1f0262b2005-10-20 11:17:48 +000034 const struct hash *p;
Mike Frysingerd89e6292005-04-24 05:07:59 +000035 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{
"Vladimir N. Oleynik"1f0262b2005-10-20 11:17:48 +000050 const struct hash *p;
Mike Frysinger85cffcc2005-06-11 00:08:50 +000051 char *eptr;
52 int num;
Mike Frysingerd89e6292005-04-24 05:07:59 +000053
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}