Allow +-X+-Y is geometry arguments

diff --git a/MagickCore/geometry.c b/MagickCore/geometry.c
index 3e133da..dba5c33 100644
--- a/MagickCore/geometry.c
+++ b/MagickCore/geometry.c
@@ -115,7 +115,7 @@
         (void) CopyMagickString(p,p+1,MaxTextExtent);
         continue;
       }
-    c=(int) ((unsigned int) *p);
+    c=(int)*p;
     switch (c)
     {
       case '%':
@@ -210,7 +210,6 @@
       if (p != q)
         flags|=WidthValue;
     }
-  c=(*p);
   c=(int) ((unsigned char) *p);
   if ((c == 215) || (*p == 'x') || (*p == 'X'))
     {
@@ -516,8 +515,6 @@
   if (geometry == (const char *) NULL)
     return(MagickFalse);
   flags=ParseGeometry(geometry,&geometry_info);
-  if (flags == NoValue)
-    flags=ParseGeometry(geometry+1,&geometry_info);  /* i.e. +-4+-4 */
   return(flags != NoValue ? MagickTrue : MagickFalse);
 }
 
@@ -913,7 +910,7 @@
       /*
         Parse xi value.
       */
-      if ((*p == ',') || (*p == '/') || (*p == ':'))
+      if ((*p == '+') || (*p == ',') || (*p == '/') || (*p == ':') )
         p++;
       q=p;
       value=StringToDouble(p,&p);
@@ -932,7 +929,7 @@
           /*
             Parse psi value.
           */
-          if ((*p == ',') || (*p == '/') || (*p == ':'))
+          if ((*p == '+') || (*p == ',') || (*p == '/') || (*p == ':'))
             p++;
           q=p;
           value=StringToDouble(p,&p);
@@ -952,7 +949,7 @@
           /*
             Parse chi value.
           */
-          if ((*p == ',') || (*p == '/') || (*p == ':'))
+          if ((*p == '+') || (*p == ',') || (*p == '/') || (*p == ':'))
             p++;
           q=p;
           value=StringToDouble(p,&p);