char *s = (char *)PR_MALLOC(PL_strlen(higher) + PL_strlen(buf) + 3);
char *s = (char *)PR_MALLOC(nsCRT::strlen(higher) + nsCRT::strlen(buf) + 3);
mime_part_address(MimeObject *obj){  if (!obj->parent)	return PL_strdup("0");  else	{	  /* Find this object in its parent. */	  PRInt32 i, j = -1;	  char buf [20];	  char *higher = 0;	  MimeContainer *cont = (MimeContainer *) obj->parent;	  PR_ASSERT(mime_typep(obj->parent,						   (MimeObjectClass *)&mimeContainerClass));	  for (i = 0; i < cont->nchildren; i++)		if (cont->children[i] == obj)		  {			j = i+1;			break;		  }	  if (j == -1)		{		  PR_ASSERT(0);		  return 0;		}	  PR_snprintf(buf, sizeof(buf), "%ld", j);	  if (obj->parent->parent)		{		  higher = mime_part_address(obj->parent);		  if (!higher) return 0;  /* MIME_OUT_OF_MEMORY */		}	  if (!higher)		return PL_strdup(buf);	  else		{		  char *s = (char *)PR_MALLOC(PL_strlen(higher) + PL_strlen(buf) + 3);		  if (!s)			{			  PR_Free(higher);			  return 0;  /* MIME_OUT_OF_MEMORY */			}		  PL_strcpy(s, higher);		  PL_strcat(s, ".");		  PL_strcat(s, buf);		  PR_Free(higher);		  return s;		}	}}