Beispiel #1
0
char *
rxvt_wcstombs (const wchar_t *str, int len)
{
  if (len < 0) len = wcslen (str);

  mbstate mbs;
  char *r = (char *)rxvt_malloc (len * MB_CUR_MAX + 1);

  char *dst = r;
  while (len--)
    {
      ssize_t l = wcrtomb (dst, *str++, mbs);

      if (l < 0)
        {
          *dst++ = '?';
          wcrtomb (0, 0, mbs); // reset undefined state
        }
      else
        dst += l;
    }

  *dst++ = 0;

  return (char *)rxvt_realloc (r, dst - r);
}
Beispiel #2
0
/* INTPROTO */
void
kstate_add_xlat(char *str)
{
	K_XLAT		 *xlat;
	u_int		  *pval_tmp;
	char		   *sval;
	int			 i;

	if (str == NULL)
		return;

	/* add a new xlat table in state */
	if (pStateNow->num_xlat == 0) {
		pStateNow->xlat = rxvt_malloc(sizeof(K_XLAT));
	}
	else			/* prefer contiguous data, realloc */
		pStateNow->xlat = rxvt_realloc (pStateNow->xlat, (pStateNow->num_xlat + 1) * sizeof(K_XLAT));

	xlat = &pStateNow->xlat[pStateNow->num_xlat];
	/* parse str and derive first, last, values */
	xlat->first = (u_int) atoi(strtok(str, "-"));
	xlat->last = (u_int) atoi(strtok(NULL, ":"));
	i = 0;
	pval_tmp = calloc(MAX_VAL, sizeof(K_XLAT));
	while ((sval = strtok(NULL, ",")) != NULL)
		pval_tmp[i++] = (u_int) (atoi(sval));
	xlat->pval = calloc(i, sizeof(K_XLAT));
	if (xlat->pval != NULL)
		MEMCPY(xlat->pval, pval_tmp, i * sizeof(u_int));
	free(pval_tmp);
	pStateNow->num_xlat++;
}