alloca()? That's very unfriendly towards non-MMU
targets.

Attached is a patch that removes alloca().


-- 
Øyvind Harboe
Embedded software and hardware consulting services
http://www.zylin.com
Index: C:/workspace/openocd/src/flash/at91sam3.c
===================================================================
--- C:/workspace/openocd/src/flash/at91sam3.c   (revision 2399)
+++ C:/workspace/openocd/src/flash/at91sam3.c   (working copy)
@@ -2146,7 +2146,7 @@
                return ERROR_FAIL;
        }
 
-       pagebuffer = alloca(pPrivate->page_size);
+       pagebuffer = malloc(pPrivate->page_size);
 
        // what page do we start & end in?
        page_cur = offset / pPrivate->page_size;
@@ -2167,7 +2167,7 @@
                LOG_DEBUG("Special case, all in one page");
                r = sam3_page_read(pPrivate, page_cur, pagebuffer);
                if (r != ERROR_OK) {
-                       return r;
+                       goto exit_fn;
                }
 
                page_offset = (offset & (pPrivate->page_size-1));
@@ -2177,9 +2177,10 @@
 
                r = sam3_page_write(pPrivate, page_cur, pagebuffer);
                if (r != ERROR_OK) {
-                       return r;
+                       goto exit_fn;
                }
-               return ERROR_OK;
+               r=ERROR_OK;
+               goto exit_fn;
        }
 
        // non-aligned start
@@ -2189,7 +2190,7 @@
                // read the partial
                r = sam3_page_read(pPrivate, page_cur, pagebuffer);
                if (r != ERROR_OK) {
-                       return r;
+                       goto exit_fn;
                }
 
                // over-write with new data
@@ -2200,7 +2201,7 @@
 
                r = sam3_page_write(pPrivate, page_cur, pagebuffer);
                if (r != ERROR_OK) {
-                       return r;
+                       goto exit_fn;
                }
 
                count  -= n;
@@ -2219,7 +2220,7 @@
                   (count >= pPrivate->page_size)) {
                r = sam3_page_write(pPrivate, page_cur, buffer);
                if (r != ERROR_OK) {
-                       return r;
+                       goto exit_fn;
                }
                count    -= pPrivate->page_size;
                buffer   += pPrivate->page_size;
@@ -2232,7 +2233,7 @@
                // we have a partial page
                r = sam3_page_read(pPrivate, page_cur, pagebuffer);
                if (r != ERROR_OK) {
-                       return r;
+                       goto exit_fn;
                }
                // data goes at start
                memcpy(pagebuffer, buffer, count);
@@ -2238,7 +2239,7 @@
                memcpy(pagebuffer, buffer, count);
                r = sam3_page_write(pPrivate, page_cur, pagebuffer);
                if (r != ERROR_OK) {
-                       return r;
+                       goto exit_fn;
                }
                buffer += count;
                count  -= count;
@@ -2244,7 +2245,11 @@
                count  -= count;
        }
        LOG_DEBUG("Done!");
-       return ERROR_OK;
+       
+       r=ERROR_OK;
+exit_fn:
+       free(pagebuffer);
+       return retval;
 }
 
 static int
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to