void _evas_xcb_xdefaults_shutdown(void) { if (!_evas_xcb_xdefaults_file) return; if (_evas_xcb_xdefaults_data) eina_file_map_free(_evas_xcb_xdefaults_file, _evas_xcb_xdefaults_data); if (_evas_xcb_xdefaults_file) eina_file_close(_evas_xcb_xdefaults_file); }
Eina_Bool shotgun_emoticon_custom_add(Shotgun_Auth *auth, const char *file, const char *text, const char *type) { Shotgun_Custom_Emoticon *emo; char *data_base64, tmp_cid[63]; size_t len, len64; const char *sha1; Eina_File *fh; const unsigned char *data; EINA_SAFETY_ON_NULL_RETURN_VAL(auth, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(text, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(type, EINA_FALSE); fh = eina_file_open(file, EINA_FALSE); if (!fh) { ERR("Couldnt open file %s", file); return EINA_FALSE; } len = eina_file_size_get(fh); data = (const unsigned char *)eina_file_map_all(fh, EINA_FILE_SEQUENTIAL); DBG("data[%p] len=%ld", data, len); DBG("data[1] = %c", data[1]); sha1 = sha1_buffer(data, len); data_base64 = shotgun_base64_encode(data, len, &len64); eina_file_map_free(fh, (void *)data); eina_file_close(fh); emo = calloc(1, sizeof(Shotgun_Custom_Emoticon)); if (!emo) return EINA_FALSE; emo->file = eina_stringshare_add(file); emo->text = strdup(text); emo->type = strdup(type); emo->data_base64 = data_base64; sprintf(tmp_cid, "cid:sha1+%[email protected]", sha1); emo->cid = strdup(tmp_cid); auth->custom_emoticons = eina_inlist_append(auth->custom_emoticons, EINA_INLIST_GET(emo)); return EINA_TRUE; }
EAPI Eet_Key * eet_identity_open(const char *certificate_file, const char *private_key_file, Eet_Key_Password_Callback cb) { #ifdef HAVE_SIGNATURE /* Signature declarations */ Eet_Key *key = NULL; # ifdef HAVE_GNUTLS /* Gnutls private declarations */ Eina_File *f = NULL; void *data = NULL; gnutls_datum_t load_file = { NULL, 0 }; char pass[1024]; if (!emile_cipher_init()) return NULL; /* Init */ if (!(key = malloc(sizeof(Eet_Key)))) goto on_error; key->references = 1; if (gnutls_x509_crt_init(&(key->certificate))) goto on_error; if (gnutls_x509_privkey_init(&(key->private_key))) goto on_error; /* Mmap certificate_file */ f = eina_file_open(certificate_file, 0); if (!f) goto on_error; /* let's make mmap safe and just get 0 pages for IO erro */ eina_mmap_safety_enabled_set(EINA_TRUE); data = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); if (!data) goto on_error; /* Import the certificate in Eet_Key structure */ load_file.data = data; load_file.size = eina_file_size_get(f); if (gnutls_x509_crt_import(key->certificate, &load_file, GNUTLS_X509_FMT_PEM) < 0) goto on_error; eina_file_map_free(f, data); /* Reset values */ eina_file_close(f); f = NULL; data = NULL; load_file.data = NULL; load_file.size = 0; /* Mmap private_key_file */ f = eina_file_open(private_key_file, 0); if (!f) goto on_error; /* let's make mmap safe and just get 0 pages for IO erro */ eina_mmap_safety_enabled_set(EINA_TRUE); data = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); if (!data) goto on_error; /* Import the private key in Eet_Key structure */ load_file.data = data; load_file.size = eina_file_size_get(f); /* Try to directly import the PEM encoded private key */ if (gnutls_x509_privkey_import(key->private_key, &load_file, GNUTLS_X509_FMT_PEM) < 0) { /* Else ask for the private key pass */ if (cb && cb(pass, 1024, 0, NULL)) { /* If pass then try to decode the pkcs 8 private key */ if (gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file, GNUTLS_X509_FMT_PEM, pass, 0)) goto on_error; } else /* Else try to import the pkcs 8 private key without pass */ if (gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file, GNUTLS_X509_FMT_PEM, NULL, 1)) goto on_error; } eina_file_map_free(f, data); eina_file_close(f); return key; on_error: if (data) eina_file_map_free(f, data); if (f) eina_file_close(f); if (key) { if (key->certificate) gnutls_x509_crt_deinit(key->certificate); if (key->private_key) gnutls_x509_privkey_deinit(key->private_key); free(key); } # else /* ifdef HAVE_GNUTLS */ /* Openssl private declarations */ FILE *fp; EVP_PKEY *pkey = NULL; X509 *cert = NULL; if (!emile_cipher_init()) return NULL; /* Load the X509 certificate in memory. */ fp = fopen(certificate_file, "rb"); if (!fp) return NULL; cert = PEM_read_X509(fp, NULL, NULL, NULL); fclose(fp); if (!cert) goto on_error; /* Check the presence of the public key. Just in case. */ pkey = X509_get_pubkey(cert); if (!pkey) goto on_error; /* Load the private key in memory. */ fp = fopen(private_key_file, "rb"); if (!fp) goto on_error; pkey = PEM_read_PrivateKey(fp, NULL, cb, NULL); fclose(fp); if (!pkey) goto on_error; /* Load the certificate and the private key in Eet_Key structure */ key = malloc(sizeof(Eet_Key)); if (!key) goto on_error; key->references = 1; key->certificate = cert; key->private_key = pkey; return key; on_error: if (cert) X509_free(cert); if (pkey) EVP_PKEY_free(pkey); # endif /* ifdef HAVE_GNUTLS */ #else (void) certificate_file; (void) private_key_file; (void) cb; #endif /* ifdef HAVE_SIGNATURE */ return NULL; }
static Eina_Bool evas_image_load_file_head_ico(Evas_Img_Load_Params *ilp, const char *file, const char *key, int *error) { Eina_File *f; void *map = NULL; size_t position = 0; unsigned short word; unsigned char byte; int wanted_w = 0, wanted_h = 0, w, h, cols, i, planes = 0, bpp = 0, pdelta, search = -1, have_choice = 0, hasa = 1; unsigned int bmoffset, bmsize, fsize; unsigned short reserved, type, count; struct { int pdelta; int w, h; int cols; int bpp, planes; int hot_x, hot_y; unsigned int bmoffset, bmsize; } chosen = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; f = eina_file_open(file, EINA_FALSE); if (!f) { *error = EVAS_LOAD_ERROR_DOES_NOT_EXIST; return EINA_FALSE; } *error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT; fsize = eina_file_size_get(f); if (fsize < (6 + 16 + 40)) goto close_file; map = eina_file_map_all(f, EINA_FILE_SEQUENTIAL); if (!map) goto close_file; // key: // NULL == highest res // biggest == highest res // smallest == lowest res // // smaller == next size SMALLER than load opts WxH (if possible) // bigger == next size BIGGER than load opts WxH (if possible) // more ? search = BIGGEST; if ((ilp->opts.w > 0) && (ilp->opts.h > 0)) { wanted_w = ilp->opts.w; wanted_h = ilp->opts.h; search = SMALLER; } if (!read_ushort(map, fsize, &position, &reserved)) goto close_file; if (!read_ushort(map, fsize, &position, &type)) goto close_file; if (!read_ushort(map, fsize, &position, &count)) goto close_file; if (!((reserved == 0) && ((type == ICON) || (type == CURSOR)) && (count > 0))) goto close_file; *error = EVAS_LOAD_ERROR_CORRUPT_FILE; if (key) { if (!strcmp(key, "biggest")) { wanted_w = 0; wanted_h = 0; search = BIGGEST; chosen.pdelta = 0; } else if (!strcmp(key, "smallest")) { wanted_w = 1; wanted_h = 1; search = SMALLEST; chosen.pdelta = 0x7fffffff; } else if (!strcmp(key, "smaller")) { chosen.pdelta = 0x7fffffff; search = SMALLER; } else if (!strcmp(key, "bigger")) { chosen.pdelta = 0x7fffffff; search = BIGGER; } } for (i = 0; i < count; i++) { unsigned char tw = 0, th = 0, tcols = 0; if (!read_uchar(map, fsize, &position, &tw)) goto close_file; w = tw; if (w <= 0) w = 256; if (!read_uchar(map, fsize, &position, &th)) goto close_file; h = th; if (h <= 0) h = 256; if (!read_uchar(map, fsize, &position, &tcols)) goto close_file; cols = tcols; if (cols <= 0) cols = 256; if (!read_uchar(map, fsize, &position, &byte)) goto close_file; if (!read_ushort(map, fsize, &position, &word)) goto close_file; if (type == CURSOR) planes = word; //else hot_x = word; if (!read_ushort(map, fsize, &position, &word)) goto close_file; if (type == CURSOR) bpp = word; //else hot_y = word; if (!read_uint(map, fsize, &position, &bmsize)) goto close_file; if (!read_uint(map, fsize, &position, &bmoffset)) goto close_file; if ((bmsize <= 0) || (bmoffset <= 0) || (bmoffset >= fsize)) goto close_file; if (search == BIGGEST) { pdelta = w * h; if ((!have_choice) || ((pdelta >= chosen.pdelta) && (((bpp >= 3) && (bpp >= chosen.bpp)) || ((bpp < 3) && (cols >= chosen.cols))))) { have_choice = 1; chosen.pdelta = pdelta; chosen.w = w; chosen.h = h; chosen.cols = cols; chosen.bpp = bpp; chosen.planes = planes; chosen.bmsize = bmsize; chosen.bmoffset = bmoffset; } } else { if (search == SMALLEST) { pdelta = w * h; if ((!have_choice) || ((pdelta <= chosen.pdelta) && (((bpp >= 3) && (bpp >= chosen.bpp)) || ((bpp < 3) && (cols >= chosen.cols))))) { have_choice = 1; chosen.pdelta = pdelta; chosen.w = w; chosen.h = h; chosen.cols = cols; chosen.bpp = bpp; chosen.planes = planes; chosen.bmsize = bmsize; chosen.bmoffset = bmoffset; } } else if (search == SMALLER) { pdelta = (wanted_w * wanted_h) - (w * h); if ((!have_choice) || ((w <= wanted_w) && (h <= wanted_h) && (pdelta <= chosen.pdelta) && (((bpp >= 3) && (bpp >= chosen.bpp)) || ((bpp < 3) && (cols >= chosen.cols))))) { have_choice = 1; if (pdelta < 0) pdelta = 0x7fffffff; chosen.pdelta = pdelta; chosen.w = w; chosen.h = h; chosen.cols = cols; chosen.bpp = bpp; chosen.planes = planes; chosen.bmsize = bmsize; chosen.bmoffset = bmoffset; } } else if (search == BIGGER) { pdelta = (w * h) - (wanted_w * wanted_h); if ((!have_choice) || ((w >= wanted_w) && (h >= wanted_h) && (pdelta <= chosen.pdelta) && (((bpp >= 3) && (bpp >= chosen.bpp)) || ((bpp < 3) && (cols >= chosen.cols))))) { have_choice = 1; if (pdelta < 0) pdelta = 0x7fffffff; chosen.pdelta = pdelta; chosen.w = w; chosen.h = h; chosen.cols = cols; chosen.bpp = bpp; chosen.planes = planes; chosen.bmsize = bmsize; chosen.bmoffset = bmoffset; } } } } if (chosen.bmoffset == 0) goto close_file; position = chosen.bmoffset; w = chosen.w; h = chosen.h; if ((w > 256) || (h > 256)) goto close_file; if ((w < 1) || (h < 1) || (w > IMG_MAX_SIZE) || (h > IMG_MAX_SIZE) || IMG_TOO_BIG(w, h)) { if (IMG_TOO_BIG(w, h)) *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; else *error = EVAS_LOAD_ERROR_GENERIC; goto close_file; } ilp->w = w; ilp->h = h; if (hasa) ilp->alpha = 1; eina_file_map_free(f, map); eina_file_close(f); *error = EVAS_LOAD_ERROR_NONE; return EINA_TRUE; close_file: if (map) eina_file_map_free(f, map); eina_file_close(f); return EINA_FALSE; }