rem: if (zwnl == 0)
add: if (!zwnl)
context: bjoining_vis2cuni (  unichar * vis,  int len,  unichar * ret,  int *retlen,  int options){  enum  { NO, YES }  join;  int p, q, save = 0;  con_shape_type **f =    (con_shape_type **) malloc (len * sizeof (con_shape_type *));  int *shape = (int *) malloc (len * sizeof (int));  int type;  int dir, startindex, endindex, counter, hasprev;  int zwnl = 0;  int *stoplig = 0;  int nls;  int nls_tab[5][3] = {    {0, 0, 1},    {2, 0, 1},    {2, 3, 1},    {4, 3, 1},    {4, 3, 5},  };  unichar lig;  if (0 == (options & B_LOGICAL_OUTPUT))    {      startindex = len - 1;      endindex = 0;      dir = -1;    }  else    {      startindex = 0;      endindex = len - 1;      dir = +1;    }  for (counter = len, p = startindex, join = NO; counter; --counter, p += dir)    {      f[p] = find_con_shape (vis[p]);      type = f[p] ? f[p]->num : (bjoining_isnonspacing (vis[p]) ? 0 : 1);      switch (type)	{	case 0:	  shape[p] = ISOLATED;	  break;	case 1:	  if (join == YES)	    {	      shape[save] = (shape[save] == MEDIAL) ? FINAL : ISOLATED;	      join = NO;	    }	  shape[p] = ISOLATED;	  break;	case 2:	  shape[p] = join ? FINAL : ISOLATED;	  join = NO;	  break;	case 4:	  shape[p] = join ? MEDIAL : INITIAL;	  save = p;	  join = YES;	}    }  if (join == YES)    shape[save] = (shape[save] == MEDIAL) ? FINAL : ISOLATED;  if (0 == (options & B_NO_ZWJZWNJZWJ))    {      for (counter = len, zwnl = 0, nls = 0, p = endindex; counter;	   --counter, p -= dir)	{	  switch (vis[p])	    {	    case ZWJ:	      nls = nls_tab[nls][0];	      break;	    case ZWNJ:	      nls = nls_tab[nls][1];	      break;	    default:	      nls = nls_tab[nls][2];	      break;	    }	  if (nls == 5)	    {	      if (zwnl == 0)		{		  stoplig = malloc (len * sizeof stoplig[0]);		  memset (stoplig, 0, len * sizeof stoplig[0]);		  zwnl = 1;		}	      stoplig[p] = 1;	      nls = 1;	    }	}    }  for (counter = len, hasprev = 0, p = q = endindex; counter;       --counter, p -= dir)    {      if (f[p] && f[p]->num)	{	  ret[q] = f[p]->shape[shape[p]];	}      else	ret[q] = vis[p];      if ((0 == (options & B_NO_LA_LIGATURE)) && hasprev	  && ((0 != (options & B_NO_ZWJZWNJZWJ) || !zwnl || stoplig[p] == 0))	  && (lig = arablig (ret[q], ret[q + dir])) != NOLIG)	{	  ret[q + dir] = lig;	}      else	{	  if (ret[q] != DELETE || 0 != (options & B_KEEP_JOINING_MARKS))	    q -= dir;	}      hasprev = 1;    }  *retlen = endindex - q * dir;  if (dir == 1)    memmove (ret, ret + len - *retlen, *retlen * sizeof ret[0]);  free (f);  free (shape);  if (zwnl)    free (stoplig);  return 1;}