Three micro fixes to formatstring
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 0d03a3b..d40b908 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -643,7 +643,7 @@
 			int width = -1;
 			int prec = -1;
 			int size = 0;
-			int c;
+			int c = '\0';
 			int fill;
 			object *v;
 			char *buf;
@@ -788,15 +788,13 @@
 				buf = formatchar(v);
 				if (buf == NULL)
 					goto error;
-				len = strlen(buf);
+				len = 1;
 				break;
 			default:
 				err_setstr(ValueError,
 					   "unsupported format character");
 				goto error;
 			}
-			/* XXX There's a bug somewhere here so that
-			   XXX '%4d'%-1 yields '-  1' ... */
 			if (sign) {
 				if (*buf == '-' || *buf == '+') {
 					sign = *buf++;
@@ -820,7 +818,6 @@
 				res = getstringvalue(result) + reslen - rescnt;
 			}
 			if (sign) {
-				*res++ = sign;
 				rescnt--;
 				if (width > len)
 					width--;
@@ -831,6 +828,8 @@
 					*res++ = fill;
 				} while (--width > len);
 			}
+			if (sign)
+				*res++ = sign;
 			memcpy(res, buf, len);
 			res += len;
 			rescnt -= len;