summaryrefslogtreecommitdiff
path: root/packages/parted/parted-1.8.0/memory_allocation.patch
blob: ba3709680b4cc83a5f22b77e289aa93f41056c33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
--- parted-1.8.0/libparted/exception.c_orig	2006-12-11 19:44:23.000000000 +0000
+++ parted-1.8.0/libparted/exception.c	2006-12-11 19:47:53.000000000 +0000
@@ -231,6 +231,9 @@
 		     PedExceptionOption ex_opts, const char* message, ...)
 {
 	va_list		arg_list;
+        int result;
+	static int size = 1000;
+
 
 	if (ex)
 		ped_exception_catch ();
@@ -239,16 +242,22 @@
 	if (!ex)
 		goto no_memory;
 
-	ex->message = (char*) malloc (8192);
-	if (!ex->message)
-		goto no_memory;
-
 	ex->type = ex_type;
 	ex->options = ex_opts;
 
-	va_start (arg_list, message);
-	vsnprintf (ex->message, 8192, message, arg_list);
-	va_end (arg_list);
+        while (1) {
+	            ex->message = (char*) malloc (size);
+		    if (!ex->message)
+		              goto no_memory;
+		    va_start (arg_list, message);
+		    result = vsnprintf (ex->message, size, message, arg_list);
+		    va_end (arg_list);
+		    
+		    if (result > -1 && result < size)
+		                    break;
+		    size += 10;
+		  }
+	            
 
 	return do_throw ();