2005-04-24 10:37:59 +05:30
|
|
|
/*
|
|
|
|
* feature.c --- convert between features and strings
|
|
|
|
*
|
|
|
|
* Copyright (C) 1999 Theodore Ts'o <tytso@mit.edu>
|
|
|
|
*
|
|
|
|
* This file can be redistributed under the terms of the GNU Library General
|
|
|
|
* Public License
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <ctype.h>
|
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
#include "e2p.h"
|
|
|
|
|
|
|
|
struct hash {
|
2005-06-11 05:38:50 +05:30
|
|
|
int num;
|
|
|
|
const char *string;
|
2005-04-24 10:37:59 +05:30
|
|
|
};
|
|
|
|
|
2005-10-20 16:47:48 +05:30
|
|
|
static const struct hash hash_list[] = {
|
2005-06-11 05:38:50 +05:30
|
|
|
{ EXT2_HASH_LEGACY, "legacy" },
|
|
|
|
{ EXT2_HASH_HALF_MD4, "half_md4" },
|
|
|
|
{ EXT2_HASH_TEA, "tea" },
|
|
|
|
{ 0, 0 },
|
2005-04-24 10:37:59 +05:30
|
|
|
};
|
|
|
|
|
|
|
|
const char *e2p_hash2string(int num)
|
|
|
|
{
|
2005-10-20 16:47:48 +05:30
|
|
|
const struct hash *p;
|
2005-04-24 10:37:59 +05:30
|
|
|
static char buf[20];
|
|
|
|
|
|
|
|
for (p = hash_list; p->string; p++) {
|
|
|
|
if (num == p->num)
|
|
|
|
return p->string;
|
|
|
|
}
|
|
|
|
sprintf(buf, "HASHALG_%d", num);
|
|
|
|
return buf;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Returns the hash algorithm, or -1 on error
|
|
|
|
*/
|
|
|
|
int e2p_string2hash(char *string)
|
|
|
|
{
|
2005-10-20 16:47:48 +05:30
|
|
|
const struct hash *p;
|
2005-06-11 05:38:50 +05:30
|
|
|
char *eptr;
|
|
|
|
int num;
|
2005-04-24 10:37:59 +05:30
|
|
|
|
|
|
|
for (p = hash_list; p->string; p++) {
|
|
|
|
if (!strcasecmp(string, p->string)) {
|
|
|
|
return p->num;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (strncasecmp(string, "HASHALG_", 8))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
if (string[8] == 0)
|
|
|
|
return -1;
|
|
|
|
num = strtol(string+8, &eptr, 10);
|
|
|
|
if (num > 255 || num < 0)
|
|
|
|
return -1;
|
|
|
|
if (*eptr)
|
|
|
|
return -1;
|
|
|
|
return num;
|
|
|
|
}
|