if (a) { if (!b) {  if (OnlyZeros(a)) result = 0; else result = 1;  break; } } else { if (b && !OnlyZeros(b))  result = -1; else result = 0;  break; } } while (PR_TRUE);
} while (a || b);
NS_CompareVersions(const char *A, const char *B){  char *A2 = strdup(A);  if (!A2)    return 1;  char *B2 = strdup(B);  if (!B2) {    free(A2);    return 1;  }  PRInt32 result;  char *a = A2, *b = B2;  do {    VersionPart va, vb;    a = ParseVP(a, va);    b = ParseVP(b, vb);    result = CompareVP(va, vb);    if (result)      break;    if (a) {      if (!b) {	// A has more parts, but B doesn't... check for 0.0.0...	if (OnlyZeros(a))	  result = 0;	else	  result = 1;	break;      }    }    else {      if (b && !OnlyZeros(b))	// A is done, but B isn't, check for 0.0.0...	result = -1;      else // A and B are both done, they are equal!	result = 0;      break;    }  } while (PR_TRUE);  free(A2);  free(B2);  return result;}