jpayne@69: /* jpayne@69: * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. jpayne@69: * jpayne@69: * Licensed under the OpenSSL license (the "License"). You may not use jpayne@69: * this file except in compliance with the License. You can obtain a copy jpayne@69: * in the file LICENSE in the source distribution or at jpayne@69: * https://www.openssl.org/source/license.html jpayne@69: */ jpayne@69: jpayne@69: #ifndef HEADER_TXT_DB_H jpayne@69: # define HEADER_TXT_DB_H jpayne@69: jpayne@69: # include jpayne@69: # include jpayne@69: # include jpayne@69: # include jpayne@69: jpayne@69: # define DB_ERROR_OK 0 jpayne@69: # define DB_ERROR_MALLOC 1 jpayne@69: # define DB_ERROR_INDEX_CLASH 2 jpayne@69: # define DB_ERROR_INDEX_OUT_OF_RANGE 3 jpayne@69: # define DB_ERROR_NO_INDEX 4 jpayne@69: # define DB_ERROR_INSERT_INDEX_CLASH 5 jpayne@69: # define DB_ERROR_WRONG_NUM_FIELDS 6 jpayne@69: jpayne@69: #ifdef __cplusplus jpayne@69: extern "C" { jpayne@69: #endif jpayne@69: jpayne@69: typedef OPENSSL_STRING *OPENSSL_PSTRING; jpayne@69: DEFINE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) jpayne@69: jpayne@69: typedef struct txt_db_st { jpayne@69: int num_fields; jpayne@69: STACK_OF(OPENSSL_PSTRING) *data; jpayne@69: LHASH_OF(OPENSSL_STRING) **index; jpayne@69: int (**qual) (OPENSSL_STRING *); jpayne@69: long error; jpayne@69: long arg1; jpayne@69: long arg2; jpayne@69: OPENSSL_STRING *arg_row; jpayne@69: } TXT_DB; jpayne@69: jpayne@69: TXT_DB *TXT_DB_read(BIO *in, int num); jpayne@69: long TXT_DB_write(BIO *out, TXT_DB *db); jpayne@69: int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), jpayne@69: OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp); jpayne@69: void TXT_DB_free(TXT_DB *db); jpayne@69: OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, jpayne@69: OPENSSL_STRING *value); jpayne@69: int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); jpayne@69: jpayne@69: #ifdef __cplusplus jpayne@69: } jpayne@69: #endif jpayne@69: jpayne@69: #endif