summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 10c8658)
raw | patch | inline | side by side (parent: 10c8658)
author | buliabyak <buliabyak@users.sourceforge.net> | |
Sat, 14 Oct 2006 17:42:38 +0000 (17:42 +0000) | ||
committer | buliabyak <buliabyak@users.sourceforge.net> | |
Sat, 14 Oct 2006 17:42:38 +0000 (17:42 +0000) |
src/libnr/nr-pixblock.cpp | patch | blob | history |
index 079bca6cab61fd5e64940e24f8f8d12bf34824b8..2f103d7d126981215f62a65d9f7646c7a488ff73 100644 (file)
pb->data.px = nr_pixelstore_1M_new (clear, 0x0);
} else {
pb->size = NR_PIXBLOCK_SIZE_BIG;
- pb->data.px = g_new (unsigned char, size);
+ pb->data.px = NULL;
+ if (size > 100000000) { // Don't even try to allocate more than 100Mb (5000x5000 RGBA
+ // pixels). It'll just bog the system down even if successful. FIXME:
+ // Can anyone suggest something better than the magic number?
+ g_warning ("%lu bytes requested for pixel buffer, I won't try to allocate that.", (long unsigned) size);
+ return;
+ }
+ pb->data.px = g_try_new (unsigned char, size);
+ if (pb->data.px == NULL) { // memory allocation failed
+ g_warning ("Could not allocate %lu bytes for pixel buffer!", (long unsigned) size);
+ return;
+ }
if (clear) memset (pb->data.px, 0x0, size);
}
* \param mode Indicates grayscale/RGB/RGBA.
* \param clear True if buffer should be cleared.
* \pre x1>=x0 && y1>=y0 && pb!=NULL
+ FIXME: currently unused except for nr_pixblock_new and pattern tiles, replace with _fast and delete?
*/
void
nr_pixblock_setup (NRPixBlock *pb, NR_PIXBLOCK_MODE mode, int x0, int y0, int x1, int y1, bool clear)
*
* \return Pointer to fresh pixblock.
* Calls g_new() and nr_pixblock_setup().
+FIXME: currently unused, delete?
*/
NRPixBlock *
nr_pixblock_new (NR_PIXBLOCK_MODE mode, int x0, int y0, int x1, int y1, bool clear)