void PngTextList::add(gchar const* key, gchar const* text) { if (count < 0) { count = 0; textItems = 0; } png_text* tmp = (count > 0) ? g_try_renew(png_text, textItems, count + 1): g_try_new(png_text, 1); if (tmp) { textItems = tmp; count++; png_text* item = &(textItems[count - 1]); item->compression = PNG_TEXT_COMPRESSION_NONE; item->key = g_strdup(key); item->text = g_strdup(text); item->text_length = 0; #ifdef PNG_iTXt_SUPPORTED item->itxt_length = 0; item->lang = 0; item->lang_key = 0; #endif // PNG_iTXt_SUPPORTED } else { g_warning("Unable to allocate arrary for %d PNG text data.", count); textItems = 0; count = 0; } }
gboolean dir_list_grow (dir_list * list, int delta) { int size; gboolean clear_flag = FALSE; if (list == NULL) return FALSE; if (delta == 0) return TRUE; size = list->size + delta; if (size <= 0) { size = DIR_LIST_MIN_SIZE; clear_flag = TRUE; } if (size != list->size) { file_entry_t *fe; fe = g_try_renew (file_entry_t, list->list, size); if (fe == NULL) return FALSE; list->list = fe; list->size = size; } list->len = clear_flag ? 0 : MIN (list->len, size); return TRUE; }
static void mem_overflow (void) { gsize a = G_MAXSIZE / 10 + 10; gsize b = 10; gpointer p, q; typedef char X[10]; #define CHECK_PASS(P) p = (P); g_assert (p == NULL); #define CHECK_FAIL(P) p = (P); g_assert (p != NULL); CHECK_PASS (g_try_malloc_n (a, a)); CHECK_PASS (g_try_malloc_n (a, b)); CHECK_PASS (g_try_malloc_n (b, a)); CHECK_FAIL (g_try_malloc_n (b, b)); CHECK_PASS (g_try_malloc0_n (a, a)); CHECK_PASS (g_try_malloc0_n (a, b)); CHECK_PASS (g_try_malloc0_n (b, a)); CHECK_FAIL (g_try_malloc0_n (b, b)); q = g_malloc (1); CHECK_PASS (g_try_realloc_n (q, a, a)); CHECK_PASS (g_try_realloc_n (q, a, b)); CHECK_PASS (g_try_realloc_n (q, b, a)); CHECK_FAIL (g_try_realloc_n (q, b, b)); free (p); CHECK_PASS (g_try_new (X, a)); CHECK_FAIL (g_try_new (X, b)); CHECK_PASS (g_try_new0 (X, a)); CHECK_FAIL (g_try_new0 (X, b)); q = g_try_malloc (1); CHECK_PASS (g_try_renew (X, q, a)); CHECK_FAIL (g_try_renew (X, q, b)); free (p); #undef CHECK_FAIL #undef CHECK_PASS #define CHECK_FAIL(P) if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { p = (P); exit (0); } g_test_trap_assert_failed(); #define CHECK_PASS(P) if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { p = (P); exit (0); } g_test_trap_assert_passed(); CHECK_FAIL (g_malloc_n (a, a)); CHECK_FAIL (g_malloc_n (a, b)); CHECK_FAIL (g_malloc_n (b, a)); CHECK_PASS (g_malloc_n (b, b)); CHECK_FAIL (g_malloc0_n (a, a)); CHECK_FAIL (g_malloc0_n (a, b)); CHECK_FAIL (g_malloc0_n (b, a)); CHECK_PASS (g_malloc0_n (b, b)); q = g_malloc (1); CHECK_FAIL (g_realloc_n (q, a, a)); CHECK_FAIL (g_realloc_n (q, a, b)); CHECK_FAIL (g_realloc_n (q, b, a)); CHECK_PASS (g_realloc_n (q, b, b)); free (q); CHECK_FAIL (g_new (X, a)); CHECK_PASS (g_new (X, b)); CHECK_FAIL (g_new0 (X, a)); CHECK_PASS (g_new0 (X, b)); q = g_malloc (1); CHECK_FAIL (g_renew (X, q, a)); CHECK_PASS (g_renew (X, q, b)); free (q); }