namespace arena_detail { void free_marker_dtor(void*) { } void array_of_primitives_dtor(void*) { } static size_t seed_from_heap_memory() { size_t const len = 64*1024 / sizeof(size_t); size_t * const mem = new size_t[len]; size_t seed = reinterpret_cast<size_t>(mem); for(size_t i=0; i<len; i++) { seed ^= mem[i]; } delete[] mem; return seed; } static size_t make_strong_seed() { size_t seed = 0; seed ^= seed_from_heap_memory(); //TODO add more seed sources return seed; } static size_t init_cookie() { boost::mt19937 gen; static size_t seed = 0; if(!seed) { seed = make_strong_seed(); } else { seed++; } gen.seed(seed); boost::uniform_int<size_t> dist(0, std::numeric_limits<size_t>::max()); size_t const cookie = dist(gen); return cookie; } static int invalid_addr_reference; size_t const ptr_sec::_checksum_cookie = init_cookie(); void * const ptr_sec::_xor_cookie = reinterpret_cast<void*>(init_cookie()); void * const ptr_sec::_invalid_addr = &invalid_addr_reference; //warning: initialization order is important here dtor_fptr const free_marker_dtor_xor = ptr_sec::xor_ptr(&free_marker_dtor); dtor_fptr const array_of_primitives_dtor_xor = ptr_sec::xor_ptr(&array_of_primitives_dtor); } //namespace arena_detail
static widget_handler_status_T push_add_button(struct dialog_data *dlg_data, struct widget_data *button) { struct listbox_data *box = get_dlg_listbox_data(dlg_data); struct terminal *term = dlg_data->win->term; struct cookie *new_cookie; struct cookie_server *server; if (!box->sel || !box->sel->udata) return EVENT_PROCESSED; if (box->sel->type == BI_FOLDER) { assert(box->sel->depth == 0); server = (struct cookie_server *)box->sel->udata; } else { struct cookie *cookie = (struct cookie *)box->sel->udata; server = cookie->server; } object_lock(server); /* ref consumed by init_cookie */ new_cookie = init_cookie(stracpy((const unsigned char *)"") /* name */, stracpy((const unsigned char *)"") /* value */, stracpy((const unsigned char *)"/") /* path */, stracpy(server->host) /* domain */, server); if (!new_cookie) return EVENT_PROCESSED; accept_cookie(new_cookie); build_edit_dialog(term, new_cookie); return EVENT_PROCESSED; }
PyObject *init_guava(void) { PyObject *guava_module = NULL; PyObject *request_module = NULL; PyObject *server_module = NULL; PyObject *handler_module = NULL; PyObject *controller_module = NULL; PyObject *router_module = NULL; PyObject *session_module = NULL; PyObject *cookie_module = NULL; PyEval_InitThreads(); guava_module = Py_InitModule("guava", NULL); request_module = init_request(); if (!register_module(guava_module, "request", request_module)) { return NULL; } server_module = init_server(); if (!register_module(guava_module, "server", server_module)) { return NULL; } handler_module = init_handler(); if (!register_module(guava_module, "handler", handler_module)) { return NULL; } router_module = init_router(); if (!register_module(guava_module, "router", router_module)) { return NULL; } controller_module = init_controller(); if (!register_module(guava_module, "controller", controller_module)) { return NULL; } session_module = init_session(); if (!register_module(guava_module, "session", session_module)) { return NULL; } cookie_module = init_cookie(); if (!register_module(guava_module, "cookie", cookie_module)) { return NULL; } PyModule_AddStringConstant(guava_module, "version", GUAVA_VERSION); return guava_module; }
/* Called by ok_dialog for the "OK" button in the "Add Server" dialog. * The data parameter points to the buffer used by the server name * widget. */ static void add_server_do(void *data) { unsigned char *value = (unsigned char *)data; struct cookie *dummy_cookie; if (!value) return; dummy_cookie = init_cookie(stracpy((const unsigned char *)"empty") /* name */, stracpy((const unsigned char *)"1") /* value */, stracpy((const unsigned char *)"/") /* path */, stracpy(value) /* domain */, get_cookie_server(value, strlen((const char *)value))); if (!dummy_cookie) return; accept_cookie(dummy_cookie); }