diff --git a/qse/cmd/http/httpd.c b/qse/cmd/http/httpd.c index cf3c06a8..76bc6c4c 100644 --- a/qse/cmd/http/httpd.c +++ b/qse/cmd/http/httpd.c @@ -290,7 +290,7 @@ static void sig_reconf (int sig) if (g_httpd) { httpd_xtn_t* httpd_xtn; - httpd_xtn = qse_httpd_getxtnstd (g_httpd); + httpd_xtn = qse_httpd_getxtn(g_httpd); httpd_xtn->impede_code = sig; qse_httpd_impede (g_httpd); } @@ -429,7 +429,7 @@ static int make_resource ( { server_xtn_t* server_xtn; - server_xtn = qse_httpd_getserverstdxtn (httpd, client->server); + server_xtn = qse_httpd_getserverxtn(httpd, client->server); if (server_xtn->orgmakersrc (httpd, client, req, rsrc) <= -1) return -1; if (server_xtn->nodir && rsrc->type == QSE_HTTPD_RSRC_DIR) @@ -448,7 +448,7 @@ static void free_resource ( { server_xtn_t* server_xtn; - server_xtn = qse_httpd_getserverstdxtn (httpd, client->server); + server_xtn = qse_httpd_getserverxtn(httpd, client->server); server_xtn->orgfreersrc (httpd, client, req, rsrc); } /* --------------------------------------------------------------------- */ @@ -748,8 +748,8 @@ static int query_server ( server_xtn_t* server_xtn; loccfg_t* loccfg = QSE_NULL; - httpd_xtn = qse_httpd_getxtnstd (httpd); - server_xtn = qse_httpd_getserverstdxtn (httpd, server); + httpd_xtn = qse_httpd_getxtn(httpd); + server_xtn = qse_httpd_getserverxtn(httpd, server); if (code == QSE_HTTPD_SERVERSTD_SSL) { @@ -1733,7 +1733,7 @@ static int load_loccfg (qse_httpd_t* httpd, qse_xli_t* xli, qse_xli_list_t* list { /*httpd_xtn_t* httpd_xtn; - httpd_xtn = qse_httpd_getxtnstd (httpd);*/ + httpd_xtn = qse_httpd_getxtn(httpd);*/ if (load_loccfg_basic (httpd, xli, list, cfg) <= -1 || load_loccfg_index (httpd, xli, list, cfg) <= -1 || @@ -1900,8 +1900,8 @@ static int load_server_config (qse_httpd_t* httpd, qse_httpd_server_t* server, q QSE_HTB_HASHER_DEFAULT }; - httpd_xtn = qse_httpd_getxtnstd (httpd); - server_xtn = qse_httpd_getserverstdxtn (httpd, server); + httpd_xtn = qse_httpd_getxtn(httpd); + server_xtn = qse_httpd_getserverxtn(httpd, server); /* load the server-wide configuration not specific to host/location */ for (i = 0; i < SCFG_MAX; i++) @@ -2007,7 +2007,7 @@ static void free_server_config (qse_httpd_t* httpd, qse_httpd_server_t* server) server_xtn_t* server_xtn; qse_size_t i; - server_xtn = qse_httpd_getserverstdxtn (httpd, server); + server_xtn = qse_httpd_getserverxtn(httpd, server); for (i = 0; i < SCFG_MAX; i++) { @@ -2033,7 +2033,7 @@ static qse_httpd_server_t* attach_server (qse_httpd_t* httpd, int num, qse_xli_l server_xtn_t* server_xtn; qse_xli_pair_t* pair; - httpd_xtn = qse_httpd_getxtnstd (httpd); + httpd_xtn = qse_httpd_getxtn(httpd); qse_memset (&dope, 0, QSE_SIZEOF(dope)); @@ -2081,7 +2081,7 @@ static qse_httpd_server_t* attach_server (qse_httpd_t* httpd, int num, qse_xli_l return QSE_NULL; } - server_xtn = qse_httpd_getserverstdxtn (httpd, xserver); + server_xtn = qse_httpd_getserverxtn(httpd, xserver); /* remember original callbacks */ qse_httpd_getserverstdopt (httpd, xserver, QSE_HTTPD_SERVERSTD_QUERY, &server_xtn->orgquery); @@ -2110,7 +2110,7 @@ static int load_hook_modules (qse_httpd_t* httpd, qse_xli_list_t* hook_list) int i; - httpd_xtn = qse_httpd_getxtnstd (httpd); + httpd_xtn = qse_httpd_getxtn(httpd); for (i = 0; ; i++) { @@ -2315,7 +2315,7 @@ static int open_config_file (qse_httpd_t* httpd) }; - httpd_xtn = (httpd_xtn_t*) qse_httpd_getxtnstd (httpd); + httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); QSE_ASSERT (httpd_xtn->xli == QSE_NULL); httpd_xtn->xli = qse_xli_openstd (0, 0, QSE_NULL); @@ -2372,7 +2372,7 @@ static int close_config_file (qse_httpd_t* httpd) { httpd_xtn_t* httpd_xtn; - httpd_xtn = (httpd_xtn_t*) qse_httpd_getxtnstd (httpd); + httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); if (httpd_xtn->xli) { qse_xli_close (httpd_xtn->xli); @@ -2387,7 +2387,7 @@ static void set_limit (qse_httpd_t* httpd, const qse_char_t* name, int what) qse_xli_pair_t* pair; httpd_xtn_t* httpd_xtn; - httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtnstd (httpd); + httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); pair = qse_xli_findpair (httpd_xtn->xli, QSE_NULL, name); if (pair) @@ -2426,7 +2426,7 @@ static int load_config (qse_httpd_t* httpd) httpd_xtn_t* httpd_xtn; int i; - httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtnstd (httpd); + httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); if (open_config_file (httpd) <= -1) goto oops; @@ -2506,14 +2506,13 @@ oops: static void reconf_server (qse_httpd_t* httpd, qse_httpd_server_t* server) { - httpd_xtn_t* httpd_xtn; + httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); server_xtn_t* server_xtn; qse_xli_pair_t* pair; /* reconfigure the server when the server is impeded in sig_reconf(). */ - httpd_xtn = qse_httpd_getxtnstd (httpd); - server_xtn = qse_httpd_getserverstdxtn (httpd, server); + server_xtn = qse_httpd_getserverxtn(httpd, server); if (httpd_xtn->xli) { @@ -2531,11 +2530,10 @@ static void reconf_server (qse_httpd_t* httpd, qse_httpd_server_t* server) static void impede_httpd (qse_httpd_t* httpd) { - httpd_xtn_t* httpd_xtn; + httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); /* reconfigure the server when the server is impeded in sig_reconf(). */ - httpd_xtn = qse_httpd_getxtnstd (httpd); if (httpd_xtn->impede_code == 9999) { qse_httpd_stop (httpd); @@ -2564,9 +2562,7 @@ static void impede_httpd (qse_httpd_t* httpd) static int prerewrite_url (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req, const qse_mchar_t* host, qse_mchar_t** url) { - httpd_xtn_t* httpd_xtn; - - httpd_xtn = qse_httpd_getxtnstd (httpd); + httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); printf ("PREREWRITING.....................\n"); /* @@ -2583,11 +2579,9 @@ printf ("PREREWRITING.....................\n"); static void logact_httpd (qse_httpd_t* httpd, const qse_httpd_act_t* act) { - /*httpd_xtn_t* httpd_xtn;*/ + /*httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd);*/ qse_char_t tmp[128], tmp2[128], tmp3[128]; - /*httpd_xtn = qse_httpd_getxtnstd (httpd);*/ - switch (act->code) { case QSE_HTTPD_CATCH_MERRMSG: @@ -2727,8 +2721,7 @@ wrongusage: static void free_httpd_xtn (qse_httpd_t* httpd) { - httpd_xtn_t* httpd_xtn; - httpd_xtn = qse_httpd_getxtnstd (httpd); + httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); free_loccfg_contents (httpd, &httpd_xtn->dflcfg); } @@ -2746,7 +2739,7 @@ static int httpd_main (int argc, qse_char_t* argv[]) if (ret <= -1) return -1; if (ret == 0) return 0; - httpd = qse_httpd_openstd (QSE_SIZEOF(httpd_xtn_t), QSE_NULL); + httpd = qse_httpd_openstd(QSE_SIZEOF(httpd_xtn_t), QSE_NULL); if (httpd == QSE_NULL) { qse_fprintf (QSE_STDERR, QSE_T("ERROR: Cannot open httpd\n")); @@ -2756,7 +2749,7 @@ static int httpd_main (int argc, qse_char_t* argv[]) qse_memset (&ecb, 0, QSE_SIZEOF(ecb)); ecb.close = free_httpd_xtn; qse_httpd_pushecb (httpd, &ecb); - httpd_xtn = qse_httpd_getxtnstd (httpd); + httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); httpd_xtn->cfgfile = g_cfgfile; if (load_config (httpd) <= -1) goto oops; @@ -2815,11 +2808,10 @@ static void interrupt new_keyboard_handler (void) { if (!impeded_for_keyboard && g_httpd) { - httpd_xtn_t* httpd_xtn; + httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(g_httpd); int c; /* TODO: read a keystroke... etc */ - httpd_xtn = qse_httpd_getxtnstd (g_httpd); httpd_xtn->impede_code = 9999; qse_httpd_impede (g_httpd); impeded_for_keyboard = 1; diff --git a/qse/include/qse/awk/awk.h b/qse/include/qse/awk/awk.h index a1233c2e..738ea20a 100644 --- a/qse/include/qse/awk/awk.h +++ b/qse/include/qse/awk/awk.h @@ -1559,12 +1559,16 @@ QSE_EXPORT void qse_awk_close ( qse_awk_t* awk /**< awk */ ); +#if defined(QSE_HAVE_INLINE) +/** + * The qse_awk_getxtn() function returns the pointer to the extension area + * placed behind the actual awk object. + */ +static QSE_INLINE void* qse_awk_getxtn (qse_awk_t* awk) { return (void*)((qse_uint8_t*)awk + ((qse_awk_alt_t*)awk)->_instsize); } /** * The qse_awk_getmmgr() function gets the memory manager used in * qse_awk_open(). */ -#if defined(QSE_HAVE_INLINE) -static QSE_INLINE void* qse_awk_getxtn (qse_awk_t* awk) { return (void*)((qse_uint8_t*)awk + ((qse_awk_alt_t*)awk)->_instsize); } static QSE_INLINE qse_mmgr_t* qse_awk_getmmgr (qse_awk_t* awk) { return ((qse_awk_alt_t*)awk)->_mmgr; } static QSE_INLINE qse_cmgr_t* qse_awk_getcmgr (qse_awk_t* awk) { return ((qse_awk_alt_t*)awk)->_cmgr; } static QSE_INLINE void qse_awk_setcmgr (qse_awk_t* awk, qse_cmgr_t* cmgr) { ((qse_awk_alt_t*)awk)->_cmgr = cmgr; } @@ -1609,7 +1613,7 @@ QSE_EXPORT void qse_awk_clear ( * The qse_awk_geterrstr() gets an error string getter. */ QSE_EXPORT qse_awk_errstr_t qse_awk_geterrstr ( - const qse_awk_t* awk /**< awk */ + qse_awk_t* awk /**< awk */ ); /** @@ -1647,7 +1651,7 @@ QSE_EXPORT void qse_awk_seterrstr ( * \return error number */ QSE_EXPORT qse_awk_errnum_t qse_awk_geterrnum ( - const qse_awk_t* awk /**< awk */ + qse_awk_t* awk /**< awk */ ); /** @@ -1655,7 +1659,7 @@ QSE_EXPORT qse_awk_errnum_t qse_awk_geterrnum ( * last error has occurred. */ QSE_EXPORT const qse_awk_loc_t* qse_awk_geterrloc ( - const qse_awk_t* awk /**< awk */ + qse_awk_t* awk /**< awk */ ); /** @@ -1665,7 +1669,7 @@ QSE_EXPORT const qse_awk_loc_t* qse_awk_geterrloc ( * \return error message */ QSE_EXPORT const qse_char_t* qse_awk_geterrmsg ( - const qse_awk_t* awk /**< awk */ + qse_awk_t* awk /**< awk */ ); QSE_EXPORT const qse_char_t* qse_awk_backuperrmsg ( @@ -1678,7 +1682,7 @@ QSE_EXPORT const qse_char_t* qse_awk_backuperrmsg ( * pointed to by \a errinf from \a awk. */ QSE_EXPORT void qse_awk_geterrinf ( - const qse_awk_t* awk, /**< awk */ + qse_awk_t* awk, /**< awk */ qse_awk_errinf_t* errinf /**< error information buffer */ ); @@ -1718,7 +1722,7 @@ QSE_EXPORT void qse_awk_seterrinf ( * The qse_awk_geterror() function gets error information via parameters. */ QSE_EXPORT void qse_awk_geterror ( - const qse_awk_t* awk, /**< awk */ + qse_awk_t* awk, /**< awk */ qse_awk_errnum_t* errnum, /**< error number */ const qse_char_t** errmsg, /**< error message */ qse_awk_loc_t* errloc /**< error location */ @@ -2331,7 +2335,7 @@ QSE_EXPORT qse_htb_t* qse_awk_rtx_getnvmap ( * \return error number */ QSE_EXPORT qse_awk_errnum_t qse_awk_rtx_geterrnum ( - const qse_awk_rtx_t* rtx /**< runtime context */ + qse_awk_rtx_t* rtx /**< runtime context */ ); /** @@ -2340,7 +2344,7 @@ QSE_EXPORT qse_awk_errnum_t qse_awk_rtx_geterrnum ( * \return error location */ QSE_EXPORT const qse_awk_loc_t* qse_awk_rtx_geterrloc ( - const qse_awk_rtx_t* rtx /**< runtime context */ + qse_awk_rtx_t* rtx /**< runtime context */ ); /** @@ -2349,7 +2353,7 @@ QSE_EXPORT const qse_awk_loc_t* qse_awk_rtx_geterrloc ( * \return error message */ QSE_EXPORT const qse_char_t* qse_awk_rtx_geterrmsg ( - const qse_awk_rtx_t* rtx /**< runtime context */ + qse_awk_rtx_t* rtx /**< runtime context */ ); QSE_EXPORT const qse_char_t* qse_awk_rtx_backuperrmsg ( @@ -2361,7 +2365,7 @@ QSE_EXPORT const qse_char_t* qse_awk_rtx_backuperrmsg ( * pointed to by \a errinf from a runtime context \a rtx. */ QSE_EXPORT void qse_awk_rtx_geterrinf ( - const qse_awk_rtx_t* rtx, /**< runtime context */ + qse_awk_rtx_t* rtx, /**< runtime context */ qse_awk_errinf_t* errinf /**< error information */ ); @@ -2372,7 +2376,7 @@ QSE_EXPORT void qse_awk_rtx_geterrinf ( * \a errmsg; the error line into memory pointed to by \a errlin. */ QSE_EXPORT void qse_awk_rtx_geterror ( - const qse_awk_rtx_t* rtx, /**< runtime context */ + qse_awk_rtx_t* rtx, /**< runtime context */ qse_awk_errnum_t* errnum, /**< error number */ const qse_char_t** errmsg, /**< error message */ qse_awk_loc_t* errloc /**< error location */ diff --git a/qse/include/qse/http/httpd.h b/qse/include/qse/http/httpd.h index bc7ce4c0..6d57b162 100644 --- a/qse/include/qse/http/httpd.h +++ b/qse/include/qse/http/httpd.h @@ -37,6 +37,18 @@ #include typedef struct qse_httpd_t qse_httpd_t; + +#define QSE_HTTPD_HDR \ + qse_size_t _instsize; \ + qse_mmgr_t* _mmgr + +typedef struct qse_httpd_alt_t qse_httpd_alt_t; +struct qse_httpd_alt_t +{ + /* ensure that qse_httpd_alt_t matches the beginning part of qse_httpd_t */ + QSE_HTTPD_HDR; +}; + typedef struct qse_httpd_mate_t qse_httpd_mate_t; typedef struct qse_httpd_server_t qse_httpd_server_t; typedef struct qse_httpd_client_t qse_httpd_client_t; @@ -676,6 +688,7 @@ typedef enum qse_httpd_mate_type_t qse_httpd_mate_type_t; /* it contains header fields common between * qse_httpd_cleint_t and qse_httpd_server_t. */ #define QSE_HTTPD_MATE_HDR \ + qse_size_t _instsize; \ qse_httpd_mate_type_t type struct qse_httpd_mate_t @@ -1077,13 +1090,22 @@ QSE_EXPORT void qse_httpd_close ( qse_httpd_t* httpd ); -QSE_EXPORT qse_mmgr_t* qse_httpd_getmmgr ( - qse_httpd_t* httpd -); -QSE_EXPORT void* qse_httpd_getxtn ( - qse_httpd_t* httpd -); +#if defined(QSE_HAVE_INLINE) +/** + * The qse_httpd_getxtn() function returns the pointer to the extension area + * placed behind the actual httpd object. + */ +static QSE_INLINE void* qse_httpd_getxtn (qse_httpd_t* httpd) { return (void*)((qse_uint8_t*)httpd + ((qse_httpd_alt_t*)httpd)->_instsize); } +/** + * The qse_httpd_gethttpd() function gets the memory manager used in + * qse_httpd_open(). + */ +static QSE_INLINE qse_mmgr_t* qse_httpd_getmmgr (qse_httpd_t* httpd) { return ((qse_httpd_alt_t*)httpd)->_mmgr; } +#else +# define qse_httpd_getxtn(httpd) ((void*)((qse_uint8_t*)httpd + ((qse_httpd_alt_t*)httpd)->_instsize)) +# define qse_httpd_getmmgr(httpd) (((qse_httpd_alt_t*)(httpd))->_mmgr) +#endif /* QSE_HAVE_INLINE */ QSE_EXPORT qse_httpd_errnum_t qse_httpd_geterrnum ( qse_httpd_t* httpd @@ -1140,9 +1162,6 @@ QSE_EXPORT void qse_httpd_stop ( QSE_EXPORT void qse_httpd_impede ( qse_httpd_t* httpd ); - -#define qse_httpd_getserverxtn(httpd,server) ((void*)(server+1)) - QSE_EXPORT qse_httpd_server_t* qse_httpd_attachserver ( qse_httpd_t* httpd, const qse_httpd_server_dope_t* dope, @@ -1154,6 +1173,12 @@ QSE_EXPORT void qse_httpd_detachserver ( qse_httpd_server_t* server ); +#if defined(QSE_HAVE_INLINE) +static QSE_INLINE void* qse_httpd_getserverxtn (qse_httpd_t* httpd, qse_httpd_server_t* server) { return (void*)((qse_uint8_t*)server + ((qse_httpd_mate_t*)server)->_instsize); } +#else +# define qse_httpd_getserverxtn(httpd, server) ((void*)((qse_uint8_t*)server + ((qse_httpd_mate_t*)server)->_instsize)) +#endif + QSE_EXPORT qse_httpd_server_t* qse_httpd_getfirstserver ( qse_httpd_t* httpd ); diff --git a/qse/include/qse/http/stdhttpd.h b/qse/include/qse/http/stdhttpd.h index 0c1657f5..d51e6e5b 100644 --- a/qse/include/qse/http/stdhttpd.h +++ b/qse/include/qse/http/stdhttpd.h @@ -233,10 +233,6 @@ QSE_EXPORT qse_httpd_t* qse_httpd_openstdwithmmgr ( qse_httpd_errnum_t* errnum ); -QSE_EXPORT void* qse_httpd_getxtnstd ( - qse_httpd_t* httpd -); - QSE_EXPORT qse_httpd_server_t* qse_httpd_attachserverstd ( qse_httpd_t* httpd, const qse_httpd_server_dope_t* dope, @@ -268,11 +264,6 @@ QSE_EXPORT int qse_httpd_setserverstdopt ( const void* value ); -QSE_EXPORT void* qse_httpd_getserverstdxtn ( - qse_httpd_t* httpd, - qse_httpd_server_t* server -); - QSE_EXPORT int qse_httpd_loopstd ( qse_httpd_t* httpd, const qse_httpd_dnsstd_t* dns, diff --git a/qse/include/qse/sed/Sed.hpp b/qse/include/qse/sed/Sed.hpp index 07294238..7aceba44 100644 --- a/qse/include/qse/sed/Sed.hpp +++ b/qse/include/qse/sed/Sed.hpp @@ -306,13 +306,10 @@ protected: private: - static ssize_t sin ( - sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* buf, size_t len); - static ssize_t xin ( - sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* buf, size_t len); - static ssize_t xout ( - sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* dat, size_t len); - static const char_t* xerrstr (const sed_t* s, errnum_t num); + static ssize_t sin (sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* buf, size_t len); + static ssize_t xin (sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* buf, size_t len); + static ssize_t xout (sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* dat, size_t len); + static const char_t* xerrstr (sed_t* s, errnum_t num); }; ///////////////////////////////// diff --git a/qse/include/qse/sed/sed.h b/qse/include/qse/sed/sed.h index 09e8e75d..1e79cf45 100644 --- a/qse/include/qse/sed/sed.h +++ b/qse/include/qse/sed/sed.h @@ -62,6 +62,17 @@ */ typedef struct qse_sed_t qse_sed_t; +#define QSE_SED_HDR \ + qse_size_t _instsize; \ + qse_mmgr_t* _mmgr + +typedef struct qse_sed_alt_t qse_sed_alt_t; +struct qse_sed_alt_t +{ + /* ensure that qse_sed_alt_t matches the beginning part of qse_sed_t */ + QSE_SED_HDR; +}; + typedef struct qse_sed_loc_t qse_sed_loc_t; typedef struct qse_sed_adr_t qse_sed_adr_t; typedef struct qse_sed_cmd_t qse_sed_cmd_t; @@ -274,7 +285,7 @@ typedef enum qse_sed_errnum_t qse_sed_errnum_t; * editor with the qse_sed_seterrstr() function to customize an error string. */ typedef const qse_char_t* (*qse_sed_errstr_t) ( - const qse_sed_t* sed, /**< stream editor */ + qse_sed_t* sed, /**< stream editor */ qse_sed_errnum_t num /**< an error number */ ); @@ -436,22 +447,23 @@ QSE_EXPORT void qse_sed_close ( qse_sed_t* sed /**< stream editor */ ); -/** - * The qse_sed_getmmgr() function returns the memory - * manager used in qse_sed_open(). - */ -QSE_EXPORT qse_mmgr_t* qse_sed_getmmgr ( - qse_sed_t* sed -); + +#if defined(QSE_HAVE_INLINE) /** - * The qse_sed_getxtn() function returns the pointer - * to the beginning of the extension area created with + * The qse_sed_getxtn() function returns the pointer to the extension area + * placed behind the actual sed object. + */ +static QSE_INLINE void* qse_sed_getxtn (qse_sed_t* sed) { return (void*)((qse_uint8_t*)sed + ((qse_sed_alt_t*)sed)->_instsize); } +/** + * The qse_sed_getmmgr() function gets the memory manager used in * qse_sed_open(). */ -QSE_EXPORT void* qse_sed_getxtn ( - qse_sed_t* sed -); +static QSE_INLINE qse_mmgr_t* qse_sed_getmmgr (qse_sed_t* sed) { return ((qse_sed_alt_t*)sed)->_mmgr; } +#else +# define qse_sed_getxtn(sed) ((void*)((qse_uint8_t*)sed + ((qse_sed_alt_t*)sed)->_instsize)) +# define qse_sed_getmmgr(sed) (((qse_sed_alt_t*)(sed))->_mmgr) +#endif /* QSE_HAVE_INLINE */ /** @@ -492,7 +504,7 @@ QSE_EXPORT int qse_sed_setopt ( * The qse_sed_geterrstr() gets an error string getter. */ QSE_EXPORT qse_sed_errstr_t qse_sed_geterrstr ( - const qse_sed_t* sed /**< stream editor */ + qse_sed_t* sed /**< stream editor */ ); /** @@ -529,7 +541,7 @@ QSE_EXPORT void qse_sed_seterrstr ( * @return error number */ QSE_EXPORT qse_sed_errnum_t qse_sed_geterrnum ( - const qse_sed_t* sed /**< stream editor */ + qse_sed_t* sed /**< stream editor */ ); /** @@ -538,7 +550,7 @@ QSE_EXPORT qse_sed_errnum_t qse_sed_geterrnum ( * @return error location */ QSE_EXPORT const qse_sed_loc_t* qse_sed_geterrloc ( - const qse_sed_t* sed /**< stream editor */ + qse_sed_t* sed /**< stream editor */ ); /** @@ -546,7 +558,7 @@ QSE_EXPORT const qse_sed_loc_t* qse_sed_geterrloc ( * @return error message pointer */ QSE_EXPORT const qse_char_t* qse_sed_geterrmsg ( - const qse_sed_t* sed /**< stream editor */ + qse_sed_t* sed /**< stream editor */ ); /** @@ -555,7 +567,7 @@ QSE_EXPORT const qse_char_t* qse_sed_geterrmsg ( * to by each parameter. */ QSE_EXPORT void qse_sed_geterror ( - const qse_sed_t* sed, /**< stream editor */ + qse_sed_t* sed, /**< stream editor */ qse_sed_errnum_t* errnum, /**< error number */ const qse_char_t** errmsg, /**< error message */ qse_sed_loc_t* errloc /**< error location */ diff --git a/qse/include/qse/sed/stdsed.h b/qse/include/qse/sed/stdsed.h index 29fe8069..7f8003ee 100644 --- a/qse/include/qse/sed/stdsed.h +++ b/qse/include/qse/sed/stdsed.h @@ -103,8 +103,7 @@ extern "C" { /** * The qse_sed_openstd() function creates a stream editor with the default - * memory manager and initializes it. Use qse_sed_getxtnstd() to get the - * pointer to the extension area. Do not use qse_sed_getxtn() for this. + * memory manager and initializes it. * \return pointer to a stream editor on success, #QSE_NULL on failure. */ QSE_EXPORT qse_sed_t* qse_sed_openstd ( @@ -115,8 +114,7 @@ QSE_EXPORT qse_sed_t* qse_sed_openstd ( /** * The qse_sed_openstdwithmmgr() function creates a stream editor with a * user-defined memory manager. It is equivalent to qse_sed_openstd(), - * except that you can specify your own memory manager.Use qse_sed_getxtnstd(), - * not qse_sed_getxtn() to get the pointer to the extension area. + * except that you can specify your own memory manager. * \return pointer to a stream editor on success, #QSE_NULL on failure. */ QSE_EXPORT qse_sed_t* qse_sed_openstdwithmmgr ( @@ -125,15 +123,6 @@ QSE_EXPORT qse_sed_t* qse_sed_openstdwithmmgr ( qse_sed_errnum_t* errnum ); -/** - * The qse_sed_getxtnstd() gets the pointer to extension space. - * Note that you must not call qse_sed_getxtn() for a stream editor - * created with qse_sed_openstd() and qse_sed_openstdwithmmgr(). - */ -QSE_EXPORT void* qse_sed_getxtnstd ( - qse_sed_t* sed /**< stream editor */ -); - /** * The qse_sed_compstd() function compiles sed scripts specified in * an array of stream resources. The end of the array is indicated diff --git a/qse/lib/http/httpd-cgi.c b/qse/lib/http/httpd-cgi.c index 3faf3908..0e3f41a9 100644 --- a/qse/lib/http/httpd-cgi.c +++ b/qse/lib/http/httpd-cgi.c @@ -478,16 +478,16 @@ static int cgi_add_env ( tmp[1] = suffix; tmp[2] = QSE_NULL; - tr = qse_mbsadup (tmp, QSE_NULL, httpd->mmgr); + tr = qse_mbsadup(tmp, QSE_NULL, qse_httpd_getmmgr(httpd)); if (tr) { qse_canonmbspath (tr, tr, 0); if (qse_env_insertmbs (env, QSE_MT("PATH_TRANSLATED"), tr) <= -1) { - QSE_MMGR_FREE (httpd->mmgr, tr); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tr); goto oops_nomem; } - QSE_MMGR_FREE (httpd->mmgr, tr); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tr); } if (qse_env_insertmbs (env, QSE_MT("PATH_INFO"), suffix) <= -1) goto oops_nomem; } @@ -795,7 +795,7 @@ static int task_init_cgi ( else { /* do chunking to cgi */ - cgi->reqfwdbuf = qse_mbs_open (httpd->mmgr, 0, (len < 512? 512: len)); + cgi->reqfwdbuf = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, (len < 512? 512: len)); if (cgi->reqfwdbuf == QSE_NULL) { httpd->errnum = QSE_HTTPD_ENOMEM; @@ -832,7 +832,7 @@ static int task_init_cgi ( { /* create a buffer to hold request content from the client * and copy content received already */ - cgi->reqfwdbuf = qse_mbs_open (httpd->mmgr, 0, (len < 512? 512: len)); + cgi->reqfwdbuf = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, (len < 512? 512: len)); if (cgi->reqfwdbuf == QSE_NULL) { httpd->errnum = QSE_HTTPD_ENOMEM; @@ -886,7 +886,7 @@ static int task_init_cgi ( } done: - cgi->env = qse_env_open (httpd->mmgr, 0, 0); + cgi->env = qse_env_open (qse_httpd_getmmgr(httpd), 0, 0); if (cgi->env == QSE_NULL) { httpd->errnum = QSE_HTTPD_ENOMEM; @@ -1462,7 +1462,7 @@ static int task_main_cgi ( else { cgi_script_htrd_xtn_t* xtn; - cgi->script_htrd = qse_htrd_open (httpd->mmgr, QSE_SIZEOF(cgi_script_htrd_xtn_t)); + cgi->script_htrd = qse_htrd_open (qse_httpd_getmmgr(httpd), QSE_SIZEOF(cgi_script_htrd_xtn_t)); if (cgi->script_htrd == QSE_NULL) goto oops; xtn = (cgi_script_htrd_xtn_t*) qse_htrd_getxtn (cgi->script_htrd); @@ -1477,7 +1477,7 @@ static int task_main_cgi ( QSE_HTRD_REQUEST ); - cgi->res = qse_mbs_open (httpd->mmgr, 0, 256); + cgi->res = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, 256); if (cgi->res == QSE_NULL) goto oops; } @@ -1507,17 +1507,17 @@ static int task_main_cgi ( tmp[1] = QSE_MT(" "); tmp[2] = cgi->path; tmp[3] = QSE_NULL; - xpath = qse_mbsadup (tmp, QSE_NULL, httpd->mmgr); + xpath = qse_mbsadup (tmp, QSE_NULL, qse_httpd_getmmgr(httpd)); if (xpath == QSE_NULL) goto oops; } else xpath = cgi->path; } x = qse_pio_init ( - &cgi->pio, httpd->mmgr, (const qse_char_t*)xpath, + &cgi->pio, qse_httpd_getmmgr(httpd), (const qse_char_t*)xpath, cgi->env, pio_options); if (xpath != cgi->path && - xpath != (qse_mchar_t*)&cgi->fnc) QSE_MMGR_FREE (httpd->mmgr, xpath); + xpath != (qse_mchar_t*)&cgi->fnc) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), xpath); if (x <= -1) { diff --git a/qse/lib/http/httpd-dir.c b/qse/lib/http/httpd-dir.c index 731d82d1..8be4cbb4 100644 --- a/qse/lib/http/httpd-dir.c +++ b/qse/lib/http/httpd-dir.c @@ -160,7 +160,7 @@ static qse_size_t format_dirent ( * a lot of file names to escape. */ /* perform percent-encoding for the anchor */ - encname = qse_perenchttpstrdup (0, dirent->name, httpd->mmgr); + encname = qse_perenchttpstrdup (0, dirent->name, qse_httpd_getmmgr(httpd)); if (encname == QSE_NULL) { httpd->errnum = QSE_HTTPD_ENOMEM; @@ -171,7 +171,7 @@ static qse_size_t format_dirent ( escname = qse_httpd_escapehtml (httpd, dirent->name); if (escname == QSE_NULL) { - if (encname != dirent->name) QSE_MMGR_FREE (httpd->mmgr, encname); + if (encname != dirent->name) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), encname); return -1; } @@ -205,7 +205,7 @@ static qse_size_t format_dirent ( ); if (escname != dirent->name) qse_httpd_freemem (httpd, escname); - if (encname != dirent->name) QSE_MMGR_FREE (httpd->mmgr, encname); + if (encname != dirent->name) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), encname); if (x == (qse_size_t)-1) httpd->errnum = QSE_HTTPD_ENOBUF; return x; diff --git a/qse/lib/http/httpd-proxy.c b/qse/lib/http/httpd-proxy.c index c8339954..0222fc10 100644 --- a/qse/lib/http/httpd-proxy.c +++ b/qse/lib/http/httpd-proxy.c @@ -1055,7 +1055,7 @@ static int task_init_proxy (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_ /* TODO: DETERMINE THIS SIZE */ len = MAX_SEND_SIZE; - proxy->reqfwdbuf = qse_mbs_open (httpd->mmgr, 0, (len < 512? 512: len)); + proxy->reqfwdbuf = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, (len < 512? 512: len)); if (proxy->reqfwdbuf == QSE_NULL) goto nomem_oops; if (proxy->flags & PROXY_RAW) @@ -1094,12 +1094,12 @@ static int task_init_proxy (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_ qse_size_t x; qpath = qse_htre_getqpath(arg->req); - qpath_enc = qse_perenchttpstrdup (QSE_PERENCHTTPSTR_KEEP_SLASH, qpath, httpd->mmgr); + qpath_enc = qse_perenchttpstrdup (QSE_PERENCHTTPSTR_KEEP_SLASH, qpath, qse_httpd_getmmgr(httpd)); if (qpath_enc == QSE_NULL) goto nomem_oops; x = qse_mbs_cat (proxy->reqfwdbuf, qpath_enc); - if (qpath != qpath_enc) QSE_MMGR_FREE (httpd->mmgr, qpath_enc); + if (qpath != qpath_enc) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), qpath_enc); if (x == (qse_size_t)-1) goto nomem_oops; #else @@ -2381,7 +2381,7 @@ static int task_main_proxy (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_ if (!(proxy->flags & PROXY_RAW)) { /* set up a http reader to read a response from the peer */ - proxy->peer_htrd = qse_htrd_open (httpd->mmgr, QSE_SIZEOF(proxy_peer_htrd_xtn_t)); + proxy->peer_htrd = qse_htrd_open (qse_httpd_getmmgr(httpd), QSE_SIZEOF(proxy_peer_htrd_xtn_t)); if (proxy->peer_htrd == QSE_NULL) goto oops; xtn = (proxy_peer_htrd_xtn_t*) qse_htrd_getxtn (proxy->peer_htrd); xtn->proxy = proxy; @@ -2391,7 +2391,7 @@ static int task_main_proxy (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_ qse_htrd_setopt (proxy->peer_htrd, QSE_HTRD_RESPONSE | QSE_HTRD_TRAILERS); } - proxy->res = qse_mbs_open (httpd->mmgr, 0, 256); + proxy->res = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, 256); if (proxy->res == QSE_NULL) goto oops; proxy->res_consumed = 0; proxy->res_pending = 0; diff --git a/qse/lib/http/httpd-std-dns.h b/qse/lib/http/httpd-std-dns.h index 850e051c..abf54d8b 100644 --- a/qse/lib/http/httpd-std-dns.h +++ b/qse/lib/http/httpd-std-dns.h @@ -295,9 +295,7 @@ static int dns_open (qse_httpd_t* httpd, qse_httpd_dns_t* dns) { qse_nwad_t nwad; dns_ctx_t* dc; - httpd_xtn_t* httpd_xtn; - - httpd_xtn = qse_httpd_getxtn (httpd); + httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); dns->handle[0] = QSE_INVALID_SCKHND; dns->handle[1] = QSE_INVALID_SCKHND; @@ -605,7 +603,7 @@ static dns_ans_t* dns_get_answer_from_cache (dns_ctx_t* dc, const qse_mchar_t* n static int dns_recv (qse_httpd_t* httpd, qse_httpd_dns_t* dns, qse_httpd_hnd_t handle) { dns_ctx_t* dc = (dns_ctx_t*)dns->ctx; - httpd_xtn_t* httpd_xtn; + httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); qse_skad_t fromaddr; qse_sck_len_t fromlen; @@ -627,8 +625,6 @@ static int dns_recv (qse_httpd_t* httpd, qse_httpd_dns_t* dns, qse_httpd_hnd_t h qse_nwad_t* resolved_nwad = QSE_NULL; int cache_ttl = 0; - httpd_xtn = qse_httpd_getxtn (httpd); - fromlen = QSE_SIZEOF(fromaddr); len = recvfrom (handle, buf, QSE_SIZEOF(buf), 0, (struct sockaddr*)&fromaddr, &fromlen); @@ -838,7 +834,7 @@ static void tmr_dns_tmout_handle (qse_tmr_t* tmr, const qse_ntime_t* now, qse_tm /*httpd_xtn_t* httpd_xtn;*/ qse_tmr_event_t tmout_event; - /*httpd_xtn = qse_httpd_getxtn (dc->httpd);*/ + /*httpd_xtn = GET_HTTPD_XTN(dc->httpd);*/ QSE_MEMSET (&tmout_event, 0, QSE_SIZEOF(tmout_event)); qse_gettime (&tmout_event.when); @@ -898,7 +894,7 @@ static void tmr_dns_tmout_handle (qse_tmr_t* tmr, const qse_ntime_t* now, qse_tm static int dns_send (qse_httpd_t* httpd, qse_httpd_dns_t* dns, const qse_mchar_t* name, qse_httpd_resolve_t resol, const qse_httpd_dns_server_t* dns_server, void* ctx) { dns_ctx_t* dc = (dns_ctx_t*)dns->ctx; - httpd_xtn_t* httpd_xtn; + httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); qse_uint32_t seq; qse_uint16_t xid; @@ -908,8 +904,6 @@ static int dns_send (qse_httpd_t* httpd, qse_httpd_dns_t* dns, const qse_mchar_t qse_tmr_event_t tmout_event; int dns_flags; - httpd_xtn = qse_httpd_getxtn (httpd); - ans = dns_get_answer_from_cache (dc, name); if (ans) { diff --git a/qse/lib/http/httpd-std-mod.h b/qse/lib/http/httpd-std-mod.h index c98081db..3ee8cffa 100644 --- a/qse/lib/http/httpd-std-mod.h +++ b/qse/lib/http/httpd-std-mod.h @@ -15,7 +15,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) #if defined(QSE_CHAR_IS_MCHAR) modpath = sysname; #else - modpath = qse_wcstombsdup (sysname, QSE_NULL, httpd->mmgr); + modpath = qse_wcstombsdup (sysname, QSE_NULL, qse_httpd_getmmgr(httpd)); if (!modpath) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); @@ -29,7 +29,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) #if defined(QSE_CHAR_IS_MCHAR) /* do nothing */ #else - QSE_MMGR_FREE (httpd->mmgr, modpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), modpath); #endif return h; @@ -54,7 +54,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) #if defined(QSE_CHAR_IS_MCHAR) modpath = sysname; #else - modpath = qse_wcstombsdup (sysname, QSE_NULL, httpd->mmgr); + modpath = qse_wcstombsdup (sysname, QSE_NULL, qse_httpd_getmmgr(httpd)); if (!modpath) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); @@ -74,7 +74,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) #if defined(QSE_CHAR_IS_MCHAR) /* do nothing */ #else - QSE_MMGR_FREE (httpd->mmgr, modpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), modpath); #endif QSE_ASSERT (QSE_SIZEOF(h) <= QSE_SIZEOF(void*)); @@ -91,7 +91,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) #if defined(QSE_CHAR_IS_MCHAR) modpath = sysname; #else - modpath = qse_wcstombsdup (sysname, QSE_NULL, httpd->mmgr); + modpath = qse_wcstombsdup (sysname, QSE_NULL, qse_httpd_getmmgr(httpd)); if (!modpath) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); @@ -105,7 +105,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) #if defined(QSE_CHAR_IS_MCHAR) /* do nothing */ #else - QSE_MMGR_FREE (httpd->mmgr, modpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), modpath); #endif QSE_ASSERT (QSE_SIZEOF(h) <= QSE_SIZEOF(void*)); @@ -118,7 +118,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) #if defined(QSE_CHAR_IS_MCHAR) modpath = sysname; #else - modpath = qse_wcstombsdup (sysname, QSE_NULL, httpd->mmgr); + modpath = qse_wcstombsdup (sysname, QSE_NULL, qse_httpd_getmmgr(httpd)); if (!modpath) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); @@ -132,7 +132,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) #if defined(QSE_CHAR_IS_MCHAR) /* do nothing */ #else - QSE_MMGR_FREE (httpd->mmgr, modpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), modpath); #endif return h; @@ -168,7 +168,7 @@ static void* mod_symbol (qse_httpd_t* httpd, void* handle, const qse_char_t* nam #if defined(QSE_CHAR_IS_MCHAR) mname = name; #else - mname = qse_wcstombsdup (name, QSE_NULL, httpd->mmgr); + mname = qse_wcstombsdup (name, QSE_NULL, qse_httpd_getmmgr(httpd)); if (!mname) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); @@ -207,7 +207,7 @@ static void* mod_symbol (qse_httpd_t* httpd, void* handle, const qse_char_t* nam #if defined(QSE_CHAR_IS_MCHAR) /* nothing to do */ #else - QSE_MMGR_FREE (httpd->mmgr, mname); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), mname); #endif return s; diff --git a/qse/lib/http/httpd-std-urs.h b/qse/lib/http/httpd-std-urs.h index 8f06e524..3635f703 100644 --- a/qse/lib/http/httpd-std-urs.h +++ b/qse/lib/http/httpd-std-urs.h @@ -100,11 +100,9 @@ static int urs_open (qse_httpd_t* httpd, qse_httpd_urs_t* urs) { qse_nwad_t nwad; urs_ctx_t* dc; - httpd_xtn_t* httpd_xtn; + httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); int type, proto = 0; /*IPPROTO_UDP;*/ /*IPPROTO_SCTP*/ - httpd_xtn = qse_httpd_getxtn (httpd); - urs->handle[0] = QSE_INVALID_SCKHND; urs->handle[1] = QSE_INVALID_SCKHND; urs->handle[2] = QSE_INVALID_SCKHND; @@ -280,7 +278,7 @@ static void urs_close (qse_httpd_t* httpd, qse_httpd_urs_t* urs) static int urs_recv (qse_httpd_t* httpd, qse_httpd_urs_t* urs, qse_httpd_hnd_t handle) { urs_ctx_t* dc = (urs_ctx_t*)urs->ctx; - /*httpd_xtn_t* httpd_xtn;*/ + /*httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd);*/ qse_skad_t fromaddr; qse_sck_len_t fromlen; @@ -291,8 +289,6 @@ static int urs_recv (qse_httpd_t* httpd, qse_httpd_urs_t* urs, qse_httpd_hnd_t h urs_req_t* req; qse_mchar_t* spc; - /*httpd_xtn = qse_httpd_getxtn (httpd);*/ - /* TODO: use recvmsg with MSG_ERRQUEUE... set socket option IP_RECVERR... */ fromlen = QSE_SIZEOF(fromaddr); len = recvfrom (handle, dc->rcvbuf, QSE_SIZEOF(dc->rcvbuf) - 1, 0, (struct sockaddr*)&fromaddr, &fromlen); @@ -363,11 +359,9 @@ static void tmr_urs_tmout_handle (qse_tmr_t* tmr, const qse_ntime_t* now, qse_tm *---------------------------------------------------------------- */ if (req->urs_retries > 0) { - /*httpd_xtn_t* httpd_xtn;*/ + /*httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(dc->httpd);*/ qse_tmr_event_t tmout_event; - /*httpd_xtn = qse_httpd_getxtn (dc->httpd);*/ - QSE_MEMSET (&tmout_event, 0, QSE_SIZEOF(tmout_event)); qse_gettime (&tmout_event.when); qse_addtime (&tmout_event.when, &req->urs_tmout, &tmout_event.when); @@ -422,7 +416,7 @@ printf ("urs timed out....\n"); static int urs_send (qse_httpd_t* httpd, qse_httpd_urs_t* urs, const qse_mchar_t* url, qse_httpd_rewrite_t rewrite, const qse_httpd_urs_server_t* urs_server, void* ctx) { urs_ctx_t* dc = (urs_ctx_t*)urs->ctx; - httpd_xtn_t* httpd_xtn; + httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); qse_uint16_t xid; qse_uint32_t seq; @@ -430,8 +424,6 @@ static int urs_send (qse_httpd_t* httpd, qse_httpd_urs_t* urs, const qse_mchar_t qse_size_t url_len; qse_tmr_event_t tmout_event; - httpd_xtn = qse_httpd_getxtn (httpd); - if (dc->req_count >= QSE_COUNTOF(dc->reqs)) { /* too many pending requests */ diff --git a/qse/lib/http/httpd-std.c b/qse/lib/http/httpd-std.c index 8684e466..68338b76 100644 --- a/qse/lib/http/httpd-std.c +++ b/qse/lib/http/httpd-std.c @@ -168,7 +168,6 @@ typedef struct server_xtn_t server_xtn_t; struct server_xtn_t { qse_httpd_server_detach_t detach; - qse_httpd_serverstd_query_t query; qse_httpd_serverstd_makersrc_t makersrc; qse_httpd_serverstd_freersrc_t freersrc; @@ -635,15 +634,22 @@ struct httpd_xtn_t qse_httpd_ursstd_t urs; }; +#if defined(QSE_HAVE_INLINE) +static QSE_INLINE httpd_xtn_t* GET_HTTPD_XTN(qse_httpd_t* httpd) { return (httpd_xtn_t*)((qse_uint8_t*)qse_httpd_getxtn(httpd) - QSE_SIZEOF(httpd_xtn_t)); } +static QSE_INLINE server_xtn_t* GET_SERVER_XTN(qse_httpd_t* httpd,qse_httpd_server_t* server) { return (server_xtn_t*)((qse_uint8_t*)qse_httpd_getserverxtn(httpd, server) - QSE_SIZEOF(server_xtn_t)); } +#else +#define GET_HTTPD_XTN(httpd) ((httpd_xtn_t*)((qse_uint8_t*)qse_httpd_getxtn(httpd) - QSE_SIZEOF(httpd_xtn_t))) +#define GET_SERVER_XTN(httpd,server) ((server_xtn_t*)((qse_uint8_t*)qse_httpd_getserverxtn(httpd, server) - QSE_SIZEOF(server_xtn_t))) +#endif + + #if defined(USE_SSL) static int init_server_ssl (qse_httpd_t* httpd, qse_httpd_server_t* server) { SSL_CTX* ssl_ctx = QSE_NULL; - server_xtn_t* server_xtn; + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, server); qse_httpd_serverstd_ssl_t ssl; - server_xtn = (server_xtn_t*)qse_httpd_getserverxtn (httpd, server); - if (server_xtn->query (httpd, server, QSE_HTTPD_SERVERSTD_SSL, QSE_NULL, &ssl) <= -1) { goto oops; @@ -707,9 +713,7 @@ static void fini_server_ssl (server_xtn_t* xtn) static int init_xtn_peer_ssl (qse_httpd_t* httpd) { SSL_CTX* peer_ctx = QSE_NULL; - httpd_xtn_t* xtn; - - xtn = (httpd_xtn_t*)qse_httpd_getxtn (httpd); + httpd_xtn_t* xtn = GET_HTTPD_XTN(httpd); peer_ctx = SSL_CTX_new (SSLv23_client_method()); if (!peer_ctx) @@ -738,8 +742,7 @@ static void fini_xtn_peer_ssl (httpd_xtn_t* xtn) static void cleanup_standard_httpd (qse_httpd_t* httpd) { - httpd_xtn_t* xtn; - xtn = (httpd_xtn_t*)qse_httpd_getxtn (httpd); + httpd_xtn_t* xtn = GET_HTTPD_XTN(httpd); #if defined(USE_SSL) if (xtn->ssl_peer_ctx) fini_xtn_peer_ssl (xtn); @@ -766,7 +769,9 @@ qse_httpd_t* qse_httpd_openstdwithmmgr (qse_mmgr_t* mmgr, qse_size_t xtnsize, qs httpd = qse_httpd_open (mmgr, QSE_SIZEOF(httpd_xtn_t) + xtnsize, errnum); if (httpd == QSE_NULL) goto oops; - xtn = (httpd_xtn_t*)qse_httpd_getxtn (httpd); + httpd->_instsize += QSE_SIZEOF(httpd_xtn_t); + + xtn = GET_HTTPD_XTN(httpd); /* the extension area has been cleared in qse_httpd_open(). * QSE_MEMSET (xtn, 0, QSE_SIZEOF(*xtn));*/ @@ -817,11 +822,6 @@ oops: return QSE_NULL; } -void* qse_httpd_getxtnstd (qse_httpd_t* httpd) -{ - return (void*)((httpd_xtn_t*)QSE_XTN(httpd) + 1); -} - /* ------------------------------------------------------------------- */ static qse_sck_hnd_t open_client_socket (qse_httpd_t* httpd, int domain, int type, int proto) @@ -1299,9 +1299,7 @@ static int client_accepted (qse_httpd_t* httpd, qse_httpd_client_t* client) #if defined(USE_SSL) int ret; SSL* ssl; - server_xtn_t* server_xtn; - - server_xtn = (server_xtn_t*)qse_httpd_getserverxtn (httpd, client->server); + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); if (!server_xtn->ssl_ctx) { @@ -1389,7 +1387,7 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) { /* -------------------------------------------------------------------- */ - httpd_xtn_t* xtn; + httpd_xtn_t* xtn = GET_HTTPD_XTN(httpd); qse_skad_t connaddr, bindaddr; int connaddrsize, bindaddrsize; int connected = 1; @@ -1409,7 +1407,6 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) int flag; #endif - xtn = (httpd_xtn_t*) qse_httpd_getxtn (httpd); /* turn off internally used bits */ peer->flags &= ~QSE_HTTPD_PEER_ALL_INTERNALS; @@ -1775,7 +1772,7 @@ static void dispatch_muxcb (qse_mux_t* mux, const qse_mux_evt_t* evt) qse_httpd_hnd_t handle; int mask = 0; - xtn = qse_mux_getxtn (mux); + xtn = qse_mux_getxtn(mux); handle = evt->hnd; if (evt->mask & QSE_MUX_IN) mask |= QSE_HTTPD_MUX_READ; @@ -1790,14 +1787,14 @@ static void* mux_open (qse_httpd_t* httpd, qse_httpd_muxcb_t cbfun) qse_mux_t* mux; mux_xtn_t* xtn; - mux = qse_mux_open (httpd->mmgr, QSE_SIZEOF(*xtn), dispatch_muxcb, 256, QSE_NULL); + mux = qse_mux_open (qse_httpd_getmmgr(httpd), QSE_SIZEOF(*xtn), dispatch_muxcb, 256, QSE_NULL); if (!mux) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ESYSERR); return QSE_NULL; } - xtn = qse_mux_getxtn (mux); + xtn = qse_mux_getxtn(mux); xtn->httpd = httpd; xtn->cbfun = cbfun; return mux; @@ -2148,7 +2145,7 @@ static qse_fio_t* __open_file (qse_httpd_t* httpd, const qse_mchar_t* path, int fio = qse_httpd_allocmem (httpd, QSE_SIZEOF(*fio)); if (fio == QSE_NULL) return QSE_NULL; - if (qse_fio_init (fio, httpd->mmgr, (const qse_char_t*)path, fio_flags, fio_mode) <= -1) + if (qse_fio_init (fio, qse_httpd_getmmgr(httpd), (const qse_char_t*)path, fio_flags, fio_mode) <= -1) { qse_httpd_seterrnum (httpd, fioerr_to_errnum(qse_fio_geterrnum(fio))); qse_httpd_freemem (httpd, fio); @@ -2327,23 +2324,23 @@ static int dir_open (qse_httpd_t* httpd, const qse_mchar_t* path, qse_httpd_hnd_ dir_t* d; qse_dir_errnum_t direrrnum; - d = QSE_MMGR_ALLOC (httpd->mmgr, QSE_SIZEOF(*d)); + d = QSE_MMGR_ALLOC (qse_httpd_getmmgr(httpd), QSE_SIZEOF(*d)); if (d == QSE_NULL) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); return -1; } - d->path = qse_mbsdup (path, httpd->mmgr); + d->path = qse_mbsdup (path, qse_httpd_getmmgr(httpd)); if (d->path == QSE_NULL) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); - QSE_MMGR_FREE (httpd->mmgr, d); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d); return -1; } d->dp = qse_dir_open ( - httpd->mmgr, 0, + qse_httpd_getmmgr(httpd), 0, (const qse_char_t*)d->path, QSE_DIR_MBSPATH | QSE_DIR_SORT, &direrrnum @@ -2351,8 +2348,8 @@ static int dir_open (qse_httpd_t* httpd, const qse_mchar_t* path, qse_httpd_hnd_ if (d->dp == QSE_NULL) { qse_httpd_seterrnum (httpd, direrr_to_errnum(direrrnum)); - QSE_MMGR_FREE (httpd->mmgr, d->path); - QSE_MMGR_FREE (httpd->mmgr, d); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d->path); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d); return -1; } @@ -2372,8 +2369,8 @@ static void dir_close (qse_httpd_t* httpd, qse_httpd_hnd_t handle) qse_dir_close (d->dp); - QSE_MMGR_FREE (httpd->mmgr, d->path); - QSE_MMGR_FREE (httpd->mmgr, d); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d->path); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d); } static int dir_read (qse_httpd_t* httpd, qse_httpd_hnd_t handle, qse_httpd_dirent_t* dirent) @@ -2394,7 +2391,7 @@ static int dir_read (qse_httpd_t* httpd, qse_httpd_hnd_t handle, qse_httpd_diren else if (n == 0) return 0; /* i assume that d->path ends with a slash */ - fpath = qse_mbsdup2 (d->path, (const qse_mchar_t*)de.name, httpd->mmgr); + fpath = qse_mbsdup2 (d->path, (const qse_mchar_t*)de.name, qse_httpd_getmmgr(httpd)); if (fpath == QSE_NULL) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); @@ -2402,7 +2399,7 @@ static int dir_read (qse_httpd_t* httpd, qse_httpd_hnd_t handle, qse_httpd_diren } n = stat_file (httpd, fpath, &dirent->stat, 0); - QSE_MMGR_FREE (httpd->mmgr, fpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), fpath); if (n <= -1) QSE_MEMSET (dirent, 0, QSE_SIZEOF(*dirent)); dirent->name = (const qse_mchar_t*)de.name; @@ -2426,15 +2423,13 @@ static qse_htb_walk_t walk (qse_htb_t* htb, qse_htb_pair_t* pair, void* ctx) } #endif -static int process_request ( - qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req, int peek) +static int process_request (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req, int peek) { + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); qse_httpd_task_t* task; - server_xtn_t* server_xtn; qse_http_method_t mth; qse_httpd_rsrc_t rsrc; - server_xtn = (server_xtn_t*)qse_httpd_getserverxtn (httpd, client->server); /* percent-decode the query path to the original buffer * since i'm not going to need it in the original form @@ -2628,15 +2623,12 @@ static int poke_request ( return process_request (httpd, client, req, 0); } -static int format_error ( - qse_httpd_t* httpd, qse_httpd_client_t* client, int code, qse_mchar_t* buf, int bufsz) +static int format_error (qse_httpd_t* httpd, qse_httpd_client_t* client, int code, qse_mchar_t* buf, int bufsz) { + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); qse_size_t n; - server_xtn_t* server_xtn; const qse_mchar_t* head, * foot, * msg; - server_xtn = qse_httpd_getserverxtn (httpd, client->server); - if (server_xtn->query (httpd, client->server, QSE_HTTPD_SERVERSTD_ERRHEAD, QSE_NULL, &head) <= -1) head = QSE_NULL; if (head == QSE_NULL) head = QSE_MT(""); @@ -2796,32 +2788,32 @@ static void free_resource ( { case QSE_HTTPD_RSRC_CGI: if (target->u.cgi.suffix) - QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.cgi.suffix); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.cgi.suffix); if (target->u.cgi.script != qpath) - QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.cgi.script); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.cgi.script); if (!(target->u.cgi.flags & QSE_HTTPD_RSRC_CGI_FNC)) { if (target->u.cgi.path != qpath) - QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.cgi.path); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.cgi.path); if (target->u.cgi.shebang) - QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.cgi.shebang); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.cgi.shebang); } break; case QSE_HTTPD_RSRC_DIR: if (target->u.dir.path != qpath) - QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.dir.path); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.dir.path); break; case QSE_HTTPD_RSRC_FILE: if (target->u.file.path != qpath) - QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.file.path); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.file.path); break; case QSE_HTTPD_RSRC_RELOC: if (target->u.reloc.target != qpath) - QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.reloc.target); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.reloc.target); break; default: @@ -2844,7 +2836,7 @@ static qse_mchar_t* merge_paths ( ta[idx++] = path; } ta[idx++] = QSE_NULL; - xpath = qse_mbsadup (ta, QSE_NULL, httpd->mmgr); + xpath = qse_mbsadup (ta, QSE_NULL, qse_httpd_getmmgr(httpd)); if (xpath == QSE_NULL) { httpd->errnum = QSE_HTTPD_ENOMEM; @@ -2904,14 +2896,12 @@ static int attempt_cgi ( qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req, struct rsrc_tmp_t* tmp, qse_httpd_rsrc_t* target) { - server_xtn_t* server_xtn; + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); qse_mchar_t* shebang = QSE_NULL; qse_mchar_t* suffix = QSE_NULL; qse_mchar_t* script = QSE_NULL; qse_httpd_serverstd_cgi_t cgi; - server_xtn = qse_httpd_getserverxtn (httpd, client->server); - if (tmp->final_match) { qse_httpd_serverstd_query_info_t qinfo; @@ -2940,7 +2930,7 @@ static int attempt_cgi ( /* free tmp->xpath here upon success since it's not used for relocation. * upon failure, it is freed by the caller. so the 'oops' part * of this function doesn't free it. */ - QSE_MMGR_FREE (httpd->mmgr, tmp->xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp->xpath); return 1; } else script = (qse_mchar_t*)tmp->qpath; @@ -3004,8 +2994,8 @@ static int attempt_cgi ( /* the script name is composed of the orginal query path. * the pointer held in 'slash' is valid for tmp->qpath as * tmp->qpath_rp is at most the tail part of tmp->qpath. */ - script = qse_mbsxdup (tmp->qpath, slash - tmp->qpath, httpd->mmgr); - suffix = qse_mbsdup (slash, httpd->mmgr); + script = qse_mbsxdup (tmp->qpath, slash - tmp->qpath, qse_httpd_getmmgr(httpd)); + suffix = qse_mbsdup (slash, qse_httpd_getmmgr(httpd)); if (!script || !suffix) goto oops; goto bingo; @@ -3051,7 +3041,7 @@ static int attempt_cgi ( if (server_xtn->query (httpd, client->server, QSE_HTTPD_SERVERSTD_CGI, &qinfo, &cgi) >= 0 && cgi.cgi && cgi.fncptr) { /* virtual cgi script */ - script = qse_mbsdup (tmp->qpath, httpd->mmgr); + script = qse_mbsdup (tmp->qpath, qse_httpd_getmmgr(httpd)); if (!script) goto oops; suffix = QSE_NULL; @@ -3085,7 +3075,7 @@ bingo: { if (cgi.shebang) { - shebang = qse_mbsdup (cgi.shebang, httpd->mmgr); + shebang = qse_mbsdup (cgi.shebang, qse_httpd_getmmgr(httpd)); if (shebang == QSE_NULL) goto oops; } @@ -3101,9 +3091,9 @@ bingo: oops: httpd->errnum = QSE_HTTPD_ENOMEM; - if (shebang) QSE_MMGR_FREE (httpd->mmgr, shebang); - if (suffix) QSE_MMGR_FREE (httpd->mmgr, suffix); - if (script && script != tmp->qpath) QSE_MMGR_FREE (httpd->mmgr, script); + if (shebang) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), shebang); + if (suffix) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), suffix); + if (script && script != tmp->qpath) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), script); return -1; } @@ -3111,7 +3101,7 @@ static int make_resource ( qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req, qse_httpd_rsrc_t* target) { - server_xtn_t* server_xtn; + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); struct rsrc_tmp_t tmp; qse_httpd_stat_t st; @@ -3125,8 +3115,6 @@ static int make_resource ( QSE_MEMSET (target, 0, QSE_SIZEOF(*target)); - server_xtn = qse_httpd_getserverxtn (httpd, client->server); - QSE_MEMSET (&qinfo, 0, QSE_SIZEOF(qinfo)); qinfo.req = req; qinfo.client = client; @@ -3314,20 +3302,20 @@ auth_ok: tpath = merge_paths (httpd, tmp.xpath, ptr); if (tpath == QSE_NULL) { - QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); return -1; } if (httpd->opt.scb.file.stat (httpd, tpath, &st) >= 0 && !st.isdir) { /* the index file is found */ - QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); tmp.xpath = tpath; tmp.idxfile = ptr; goto attempt_file; } - QSE_MMGR_FREE (httpd->mmgr, tpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tpath); } } @@ -3340,7 +3328,7 @@ auth_ok: qse_htre_discardcontent (req); target->type = QSE_HTTPD_RSRC_ERROR; /* free xpath since it won't be used */ - QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); } else if (tmp.qpath[tmp.qpath_len - 1] != QSE_MT('/')) { @@ -3350,7 +3338,7 @@ auth_ok: target->u.reloc.flags = QSE_HTTPD_RSRC_RELOC_APPENDSLASH | QSE_HTTPD_RSRC_RELOC_PERMANENT; target->u.reloc.target = tmp.qpath; /* free xpath since it won't be used */ - QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); } else { @@ -3375,7 +3363,7 @@ auth_ok: n = attempt_cgi (httpd, client, req, &tmp, target); if (n <= -1) { - QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); return -1; } if (n >= 1) @@ -3384,7 +3372,7 @@ auth_ok: { /* tmp.xpath is not set to target->u.cgi.path when * this flag is set. it must be deallocated */ - QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); } return 0; } @@ -3400,7 +3388,7 @@ auth_ok: { /* free xpath since it won't be used */ qse_htre_discardcontent (req); - QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); target->type = QSE_HTTPD_RSRC_ERROR; } else @@ -3411,7 +3399,7 @@ auth_ok: qse_htre_discardcontent (req); /* free xpath since it won't be used */ - QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); /* create a relocation resource */ target->type = QSE_HTTPD_RSRC_RELOC; @@ -3447,11 +3435,9 @@ auth_ok: static void detach_server (qse_httpd_t* httpd, qse_httpd_server_t* server) { - server_xtn_t* server_xtn; - - server_xtn = (server_xtn_t*) qse_httpd_getserverxtn (httpd, server); + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, server); if (server_xtn->detach) server_xtn->detach (httpd, server); - if (server_xtn->auth.ptr) QSE_MMGR_FREE (httpd->mmgr, server_xtn->auth.ptr); + if (server_xtn->auth.ptr) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), server_xtn->auth.ptr); #if defined(USE_SSL) if (server_xtn->ssl_ctx) fini_server_ssl (server_xtn); @@ -3605,10 +3591,12 @@ qse_httpd_server_t* qse_httpd_attachserverstd ( /* detach_server() is called when the server is detached */ xdope.detach = detach_server; - xserver = qse_httpd_attachserver (httpd, &xdope, QSE_SIZEOF(*server_xtn) + xtnsize); + xserver = qse_httpd_attachserver(httpd, &xdope, QSE_SIZEOF(*server_xtn) + xtnsize); if (xserver == QSE_NULL) return QSE_NULL; - server_xtn = qse_httpd_getserverxtn (httpd, xserver); + xserver->_instsize += QSE_SIZEOF(*server_xtn); + + server_xtn = GET_SERVER_XTN(httpd, xserver); QSE_MEMSET (server_xtn, 0, QSE_SIZEOF(*server_xtn)); /* chain the original detach function */ @@ -3705,9 +3693,7 @@ int qse_httpd_getserverstdopt ( qse_httpd_t* httpd, qse_httpd_server_t* server, qse_httpd_serverstd_opt_t id, void* value) { - server_xtn_t* server_xtn; - - server_xtn = qse_httpd_getserverxtn (httpd, server); + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, server); switch (id) { @@ -3733,9 +3719,7 @@ int qse_httpd_setserverstdopt ( qse_httpd_t* httpd, qse_httpd_server_t* server, qse_httpd_serverstd_opt_t id, const void* value) { - server_xtn_t* server_xtn; - - server_xtn = qse_httpd_getserverxtn (httpd, server); + server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, server); switch (id) { @@ -3756,18 +3740,11 @@ int qse_httpd_setserverstdopt ( return -1; } - -void* qse_httpd_getserverstdxtn (qse_httpd_t* httpd, qse_httpd_server_t* server) -{ - server_xtn_t* xtn = qse_httpd_getserverxtn (httpd, server); - return (void*)(xtn + 1); -} - /* ------------------------------------------------------------------- */ int qse_httpd_loopstd (qse_httpd_t* httpd, const qse_httpd_dnsstd_t* dns, const qse_httpd_ursstd_t* urs) { - httpd_xtn_t* httpd_xtn = qse_httpd_getxtn (httpd); + httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); /* default dns server info */ if (dns) diff --git a/qse/lib/http/httpd.c b/qse/lib/http/httpd.c index 886e990b..34d61358 100644 --- a/qse/lib/http/httpd.c +++ b/qse/lib/http/httpd.c @@ -72,7 +72,7 @@ qse_httpd_t* qse_httpd_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, qse_httpd_err { qse_httpd_t* httpd; - httpd = (qse_httpd_t*) QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_httpd_t) + xtnsize); + httpd = (qse_httpd_t*)QSE_MMGR_ALLOC(mmgr, QSE_SIZEOF(qse_httpd_t) + xtnsize); if (httpd) { if (qse_httpd_init (httpd, mmgr) <= -1) @@ -91,7 +91,7 @@ qse_httpd_t* qse_httpd_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, qse_httpd_err void qse_httpd_close (qse_httpd_t* httpd) { qse_httpd_fini (httpd); - QSE_MMGR_FREE (httpd->mmgr, httpd); + QSE_MMGR_FREE (httpd->_mmgr, httpd); } int qse_httpd_init (qse_httpd_t* httpd, qse_mmgr_t* mmgr) @@ -100,7 +100,9 @@ int qse_httpd_init (qse_httpd_t* httpd, qse_mmgr_t* mmgr) QSE_MEMSET (httpd, 0, QSE_SIZEOF(*httpd)); - httpd->mmgr = mmgr; + httpd->_instsize = QSE_SIZEOF(*httpd); + httpd->_mmgr = mmgr; + httpd->tmr = qse_tmr_open (mmgr, QSE_SIZEOF(tmr_xtn_t), 2048); if (httpd->tmr == QSE_NULL) return -1; @@ -119,6 +121,7 @@ int qse_httpd_init (qse_httpd_t* httpd, qse_mmgr_t* mmgr) void qse_httpd_fini (qse_httpd_t* httpd) { qse_httpd_ecb_t* ecb; + qse_size_t i; unload_all_modules (httpd); @@ -127,6 +130,16 @@ void qse_httpd_fini (qse_httpd_t* httpd) free_server_list (httpd); qse_tmr_close (httpd->tmr); + + for (i = 0; i < QSE_COUNTOF(httpd->opt.mod); i++) + { + if (httpd->opt.mod[i].ptr) + { + qse_httpd_freemem (httpd, httpd->opt.mod[i].ptr); + httpd->opt.mod[i].ptr = QSE_NULL; + httpd->opt.mod[i].len = 0; + } + } } void qse_httpd_stop (qse_httpd_t* httpd) @@ -149,21 +162,11 @@ void qse_httpd_seterrnum (qse_httpd_t* httpd, qse_httpd_errnum_t errnum) httpd->errnum = errnum; } -qse_mmgr_t* qse_httpd_getmmgr (qse_httpd_t* httpd) -{ - return httpd->mmgr; -} - -void* qse_httpd_getxtn (qse_httpd_t* httpd) -{ - return QSE_XTN (httpd); -} - static int dup_str_opt (qse_httpd_t* httpd, const void* value, qse_cstr_t* tmp) { if (value) { - tmp->ptr = qse_strdup (value, httpd->mmgr); + tmp->ptr = qse_strdup(value, qse_httpd_getmmgr(httpd)); if (tmp->ptr == QSE_NULL) { qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); @@ -236,10 +239,10 @@ int qse_httpd_setopt (qse_httpd_t* httpd, qse_httpd_opt_t id, const void* value) qse_cstr_t tmp; int idx; - if (dup_str_opt (httpd, value, &tmp) <= -1) return -1; + if (dup_str_opt(httpd, value, &tmp) <= -1) return -1; idx = id - QSE_HTTPD_MODPREFIX; - if (httpd->opt.mod[idx].ptr) QSE_MMGR_FREE (httpd->mmgr, httpd->opt.mod[idx].ptr); + if (httpd->opt.mod[idx].ptr) qse_httpd_freemem (httpd, httpd->opt.mod[idx].ptr); httpd->opt.mod[idx] = tmp; return 0; @@ -276,32 +279,32 @@ void qse_httpd_pushecb (qse_httpd_t* httpd, qse_httpd_ecb_t* ecb) /* ----------------------------------------------------------------------- */ -QSE_INLINE void* qse_httpd_allocmem (qse_httpd_t* httpd, qse_size_t size) +void* qse_httpd_allocmem (qse_httpd_t* httpd, qse_size_t size) { - void* ptr = QSE_MMGR_ALLOC (httpd->mmgr, size); + void* ptr = QSE_MMGR_ALLOC (qse_httpd_getmmgr(httpd), size); if (ptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; return ptr; } -QSE_INLINE void* qse_httpd_callocmem (qse_httpd_t* httpd, qse_size_t size) +void* qse_httpd_callocmem (qse_httpd_t* httpd, qse_size_t size) { - void* ptr = QSE_MMGR_ALLOC (httpd->mmgr, size); + void* ptr = QSE_MMGR_ALLOC (qse_httpd_getmmgr(httpd), size); if (ptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; else QSE_MEMSET (ptr, 0, size); return ptr; } -QSE_INLINE void* qse_httpd_reallocmem ( +void* qse_httpd_reallocmem ( qse_httpd_t* httpd, void* ptr, qse_size_t size) { - void* nptr = QSE_MMGR_REALLOC (httpd->mmgr, ptr, size); + void* nptr = QSE_MMGR_REALLOC (qse_httpd_getmmgr(httpd), ptr, size); if (nptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; return nptr; } -QSE_INLINE void qse_httpd_freemem (qse_httpd_t* httpd, void* ptr) +void qse_httpd_freemem (qse_httpd_t* httpd, void* ptr) { - QSE_MMGR_FREE (httpd->mmgr, ptr); + QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), ptr); } qse_mchar_t* qse_httpd_strtombsdup (qse_httpd_t* httpd, const qse_char_t* str) @@ -309,9 +312,9 @@ qse_mchar_t* qse_httpd_strtombsdup (qse_httpd_t* httpd, const qse_char_t* str) qse_mchar_t* mptr; #if defined(QSE_CHAR_IS_MCHAR) - mptr = qse_mbsdup (str, httpd->mmgr); + mptr = qse_mbsdup (str, qse_httpd_getmmgr(httpd)); #else - mptr = qse_wcstombsdup (str, QSE_NULL, httpd->mmgr); + mptr = qse_wcstombsdup (str, QSE_NULL, qse_httpd_getmmgr(httpd)); #endif if (mptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; @@ -323,9 +326,9 @@ qse_mchar_t* qse_httpd_strntombsdup (qse_httpd_t* httpd, const qse_char_t* str, qse_mchar_t* mptr; #if defined(QSE_CHAR_IS_MCHAR) - mptr = qse_mbsxdup (str, len, httpd->mmgr); + mptr = qse_mbsxdup (str, len, qse_httpd_getmmgr(httpd)); #else - mptr = qse_wcsntombsdup (str, len, QSE_NULL, httpd->mmgr); + mptr = qse_wcsntombsdup (str, len, QSE_NULL, qse_httpd_getmmgr(httpd)); #endif if (mptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; @@ -336,7 +339,7 @@ qse_mchar_t* qse_httpd_mbsdup (qse_httpd_t* httpd, const qse_mchar_t* str) { qse_mchar_t* mptr; - mptr = qse_mbsdup (str, httpd->mmgr); + mptr = qse_mbsdup (str, qse_httpd_getmmgr(httpd)); if (mptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; return mptr; @@ -346,7 +349,7 @@ qse_mchar_t* qse_httpd_mbsxdup (qse_httpd_t* httpd, const qse_mchar_t* str, qse_ { qse_mchar_t* mptr; - mptr = qse_mbsxdup (str, len, httpd->mmgr); + mptr = qse_mbsxdup (str, len, qse_httpd_getmmgr(httpd)); if (mptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; return mptr; @@ -583,14 +586,14 @@ qse_httpd_peer_t* qse_httpd_decacheproxypeer ( /* ----------------------------------------------------------------------- */ static int htrd_peek_request (qse_htrd_t* htrd, qse_htre_t* req) { - htrd_xtn_t* xtn = (htrd_xtn_t*) qse_htrd_getxtn (htrd); - return xtn->httpd->opt.rcb.peekreq (xtn->httpd, xtn->client, req); + htrd_xtn_t* xtn = (htrd_xtn_t*)qse_htrd_getxtn(htrd); + return xtn->httpd->opt.rcb.peekreq(xtn->httpd, xtn->client, req); } static int htrd_poke_request (qse_htrd_t* htrd, qse_htre_t* req) { - htrd_xtn_t* xtn = (htrd_xtn_t*) qse_htrd_getxtn (htrd); - return xtn->httpd->opt.rcb.pokereq (xtn->httpd, xtn->client, req); + htrd_xtn_t* xtn = (htrd_xtn_t*)qse_htrd_getxtn(htrd); + return xtn->httpd->opt.rcb.pokereq(xtn->httpd, xtn->client, req); } static qse_htrd_recbs_t htrd_recbs = @@ -620,14 +623,15 @@ static qse_httpd_client_t* new_client (qse_httpd_t* httpd, qse_httpd_client_t* t qse_tmr_event_t idle_event; htrd_xtn_t* xtn; - client = qse_httpd_allocmem (httpd, QSE_SIZEOF(*client)); + client = qse_httpd_allocmem(httpd, QSE_SIZEOF(*client)); if (client == QSE_NULL) goto oops; QSE_MEMSET (client, 0, QSE_SIZEOF(*client)); client->tmr_idle = QSE_TMR_INVALID_INDEX; + client->_instsize = QSE_SIZEOF(*client); client->type = QSE_HTTPD_CLIENT; - client->htrd = qse_htrd_open (httpd->mmgr, QSE_SIZEOF(*xtn)); + client->htrd = qse_htrd_open (qse_httpd_getmmgr(httpd), QSE_SIZEOF(*xtn)); if (client->htrd == QSE_NULL) { httpd->errnum = QSE_HTTPD_ENOMEM; @@ -663,7 +667,7 @@ static qse_httpd_client_t* new_client (qse_httpd_t* httpd, qse_httpd_client_t* t client->server = tmpl->server; client->initial_ifindex = tmpl->initial_ifindex; - xtn = (htrd_xtn_t*)qse_htrd_getxtn (client->htrd); + xtn = (htrd_xtn_t*)qse_htrd_getxtn(client->htrd); xtn->httpd = httpd; xtn->client = client; @@ -1031,6 +1035,7 @@ qse_httpd_server_t* qse_httpd_attachserver ( server = qse_httpd_callocmem (httpd, QSE_SIZEOF(*server) + xtnsize); if (server == QSE_NULL) return QSE_NULL; + server->_instsize = QSE_SIZEOF(*server); server->type = QSE_HTTPD_SERVER; /* copy the server dope */ server->dope = *dope; diff --git a/qse/lib/http/httpd.h b/qse/lib/http/httpd.h index 510c43a4..e9499464 100644 --- a/qse/lib/http/httpd.h +++ b/qse/lib/http/httpd.h @@ -64,7 +64,7 @@ struct qse_httpd_t { - qse_mmgr_t* mmgr; + QSE_HTTPD_HDR; qse_httpd_errnum_t errnum; qse_httpd_ecb_t* ecb; /* event callbacks */ qse_tmr_t* tmr; diff --git a/qse/samples/sed/sed22.cpp b/qse/samples/sed/sed22.cpp index c7c1b209..ed703938 100644 --- a/qse/samples/sed/sed22.cpp +++ b/qse/samples/sed/sed22.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include "sed00.h" @@ -15,29 +16,22 @@ class MySed: protected QSE::StdSed { public: - class Error - { - public: - Error (const char_t* msg) throw (): msg (msg) {} - const char_t* getMessage() const throw() { return msg; } - protected: - const char_t* msg; - }; + QSE_EXCEPTION(Error); - MySed () { if (open() <= -1) throw Error (QSE_T("cannot open")); } - ~MySed () { close (); } + MySed () { if (this->open() <= -1) QSE_THROW_WITH_MSG (Error, QSE_T("cannot open sed")); } + ~MySed () { this->close (); } void compile (const char_t* sptr) { QSE::StdSed::StringStream stream(sptr); if (QSE::StdSed::compile (stream) <= -1) - throw Error (getErrorMessage()); + QSE_THROW_WITH_MSG(Error, this->getErrorMessage()); } void execute (Stream& stream) { if (QSE::StdSed::execute (stream) <= -1) - throw Error (getErrorMessage()); + QSE_THROW_WITH_MSG(Error, this->getErrorMessage()); } }; @@ -57,7 +51,7 @@ int sed_main (int argc, qse_char_t* argv[]) } catch (MySed::Error& err) { - xcout << QSE_T("ERROR: ") << err.getMessage() << std::endl; + xcout << QSE_T("ERROR: ") << QSE_EXCEPTION_MSG(err) << std::endl; return -1; }