make update
[openssl.git] / crypto / conf / conf.h
index 45efed198fdac252d722255a9feea7b3010b015c..32246ff52c27cd61b6344f3546cf63a13a0b82de 100644 (file)
 #ifndef  HEADER_CONF_H
 #define HEADER_CONF_H
 
+#include <openssl/bio.h>
+#include <openssl/lhash.h>
+#include <openssl/stack.h>
+#include <openssl/safestack.h>
+#include <openssl/e_os2.h>
+
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
-#include <openssl/stack.h>
-#include <openssl/lhash.h>
-
 typedef struct
        {
        char *section;
@@ -73,42 +76,117 @@ typedef struct
        char *value;
        } CONF_VALUE;
 
-#ifndef NOPROTO
+DECLARE_STACK_OF(CONF_VALUE)
 
-LHASH *CONF_load(LHASH *conf,char *file,long *eline);
-STACK *CONF_get_section(LHASH *conf,char *section);
+struct conf_st;
+typedef struct conf_st CONF;
+struct conf_method_st;
+typedef struct conf_method_st CONF_METHOD;
+
+struct conf_method_st
+       {
+       const char *name;
+       CONF *(*create)(CONF_METHOD *meth);
+       int (*init)(CONF *conf);
+       int (*destroy)(CONF *conf);
+       int (*destroy_data)(CONF *conf);
+       int (*load_bio)(CONF *conf, BIO *bp, long *eline);
+       int (*dump)(CONF *conf, BIO *bp);
+       int (*is_number)(CONF *conf, char c);
+       int (*to_int)(CONF *conf, char c);
+       int (*load)(CONF *conf, const char *name, long *eline);
+       };
+
+int CONF_set_default_method(CONF_METHOD *meth);
+void CONF_set_nconf(CONF *conf,LHASH *hash);
+LHASH *CONF_load(LHASH *conf,const char *file,long *eline);
+#ifndef OPENSSL_NO_FP_API
+LHASH *CONF_load_fp(LHASH *conf, FILE *fp,long *eline);
+#endif
+LHASH *CONF_load_bio(LHASH *conf, BIO *bp,long *eline);
+STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,char *section);
 char *CONF_get_string(LHASH *conf,char *group,char *name);
 long CONF_get_number(LHASH *conf,char *group,char *name);
 void CONF_free(LHASH *conf);
+int CONF_dump_fp(LHASH *conf, FILE *out);
+int CONF_dump_bio(LHASH *conf, BIO *out);
 void ERR_load_CONF_strings(void );
 
-#else
+/* New conf code.  The semantics are different from the functions above.
+   If that wasn't the case, the above functions would have been replaced */
 
-LHASH *CONF_load();
-STACK *CONF_get_section();
-char *CONF_get_string();
-long CONF_get_number();
-void CONF_free();
-void ERR_load_CONF_strings();
+struct conf_st
+       {
+       CONF_METHOD *meth;
+       void *meth_data;
+       LHASH *data;
+       };
+
+CONF *NCONF_new(CONF_METHOD *meth);
+CONF_METHOD *NCONF_default();
+CONF_METHOD *NCONF_WIN32();
+#if 0 /* Just to give you an idea of what I have in mind */
+CONF_METHOD *NCONF_XML();
+#endif
+void NCONF_free(CONF *conf);
+void NCONF_free_data(CONF *conf);
 
+int NCONF_load(CONF *conf,const char *file,long *eline);
+#ifndef OPENSSL_NO_FP_API
+int NCONF_load_fp(CONF *conf, FILE *fp,long *eline);
+#endif
+int NCONF_load_bio(CONF *conf, BIO *bp,long *eline);
+STACK_OF(CONF_VALUE) *NCONF_get_section(CONF *conf,char *section);
+char *NCONF_get_string(CONF *conf,char *group,char *name);
+int NCONF_get_number_e(CONF *conf,char *group,char *name,long *result);
+int NCONF_dump_fp(CONF *conf, FILE *out);
+int NCONF_dump_bio(CONF *conf, BIO *out);
+
+#if 0 /* The following function has no error checking,
+        and should therefore be avoided */
+long NCONF_get_number(CONF *conf,char *group,char *name);
+#else
+#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r)
 #endif
 
+
 /* BEGIN ERROR CODES */
+/* The following lines are auto generated by the script mkerr.pl. Any changes
+ * made after this point may be overwritten when the script is next run.
+ */
+void ERR_load_CONF_strings(void);
+
 /* Error codes for the CONF functions. */
 
 /* Function codes. */
+#define CONF_F_CONF_DUMP_FP                             104
 #define CONF_F_CONF_LOAD                                100
+#define CONF_F_CONF_LOAD_BIO                            102
+#define CONF_F_CONF_LOAD_FP                             103
+#define CONF_F_NCONF_DUMP_BIO                           105
+#define CONF_F_NCONF_DUMP_FP                            106
+#define CONF_F_NCONF_GET_NUMBER                                 107
+#define CONF_F_NCONF_GET_NUMBER_E                       112
+#define CONF_F_NCONF_GET_SECTION                        108
+#define CONF_F_NCONF_GET_STRING                                 109
+#define CONF_F_NCONF_LOAD                               113
+#define CONF_F_NCONF_LOAD_BIO                           110
+#define CONF_F_NCONF_LOAD_FP                            114
+#define CONF_F_NCONF_NEW                                111
 #define CONF_F_STR_COPY                                         101
 
 /* Reason codes. */
 #define CONF_R_MISSING_CLOSE_SQUARE_BRACKET             100
 #define CONF_R_MISSING_EQUAL_SIGN                       101
 #define CONF_R_NO_CLOSE_BRACE                           102
+#define CONF_R_NO_CONF                                  105
+#define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE          106
+#define CONF_R_NO_SECTION                               107
+#define CONF_R_NO_VALUE                                         108
 #define CONF_R_UNABLE_TO_CREATE_NEW_SECTION             103
 #define CONF_R_VARIABLE_HAS_NO_VALUE                    104
+
 #ifdef  __cplusplus
 }
 #endif
 #endif
-