Exemplo n.º 1
0
int diswul(

  struct tcp_chan *chan,  /* I */
  unsigned long value)   /* I */

  {
  int  retval;
  unsigned ndigs;
  char         *cp;

  int           rc;
  char  scratch[DIS_BUFSIZ+1];

  memset(scratch, 0, DIS_BUFSIZ+1);
  cp = discul_(&scratch[DIS_BUFSIZ], value, &ndigs);

  *--cp = '+';

  while (ndigs > 1)
    cp = discui_(cp, ndigs, &ndigs);

  retval = tcp_puts(chan, cp, strlen(cp)) < 0 ?
           DIS_PROTO :
           DIS_SUCCESS;

  rc = tcp_wcommit(chan, retval == DIS_SUCCESS);

  if (rc < 0)
    {
    return(DIS_NOCOMMIT);
    }

  return(retval);
  }  /* END diswul() */
Exemplo n.º 2
0
int
diswsl(int stream, long value)
{
	int		retval;
	unsigned	ndigs;
	unsigned long	ulval;
	char		c;
	char		*cp;

	assert(stream >= 0);
	assert(dis_puts != NULL);
	assert(disw_commit != NULL);

	if (value < 0) {
		ulval = (unsigned long)-(value + 1) + 1;
		c = '-';
	} else {
		ulval = value;
		c = '+';
	}
	cp = discul_(&dis_buffer[DIS_BUFSIZ], ulval, &ndigs);
	*--cp = c;
	while (ndigs > 1)
		cp = discui_(cp, ndigs, &ndigs);
	retval = (*dis_puts)(stream, cp,
		(size_t)(&dis_buffer[DIS_BUFSIZ] - cp)) < 0 ?
		DIS_PROTO : DIS_SUCCESS;
	return (((*disw_commit)(stream, retval == DIS_SUCCESS) < 0) ?
		DIS_NOCOMMIT : retval);
}
Exemplo n.º 3
0
/**
 * @brief
 *      Converts <value> into a Data-is-Strings unsigned integer and sends
 *      it to <stream>.
 *
 * @param[in] stream    socket fd
 * @param[in] value     value to be converted
 *
 * @return      int
 * @retval      DIS_SUCCESS     success
 * @retval      error code      error
 *
 */
int
diswul(int stream, unsigned long value)
{
	int		retval;
	unsigned	ndigs;
	char		*cp;

	assert(stream >= 0);
	assert(dis_puts != NULL);
	assert(disw_commit != NULL);

	cp = discul_(&dis_buffer[DIS_BUFSIZ], value, &ndigs);
	*--cp = '+';
	while (ndigs > 1)
		cp = discui_(cp, ndigs, &ndigs);
	retval = (*dis_puts)(stream, cp,
		(size_t)(&dis_buffer[DIS_BUFSIZ] - cp)) < 0 ?
		DIS_PROTO : DIS_SUCCESS;
	return (((*disw_commit)(stream, retval == DIS_SUCCESS) < 0) ?
		DIS_NOCOMMIT : retval);
}
Exemplo n.º 4
0
int diswsl(

  struct tcp_chan *chan,
  long value)

  {
  int  retval;
  unsigned ndigs;
  unsigned long ulval;
  char  c;
  char  *cp;
  char  scratch[DIS_BUFSIZ];

  memset(scratch, 0, sizeof(scratch));

  if (value < 0)
    {
    ulval = (unsigned long) - (value + 1) + 1;
    c = '-';
    }
  else
    {
    ulval = value;
    c = '+';
    }

  cp = discul_(&scratch[sizeof(scratch)-1], ulval, &ndigs);

  *--cp = c;

  while (ndigs > 1)
    cp = discui_(cp, ndigs, &ndigs);

  retval = tcp_puts(chan, cp,
                       strlen(cp)) < 0 ?
           DIS_PROTO : DIS_SUCCESS;

  return ((tcp_wcommit(chan, retval == DIS_SUCCESS) < 0) ?
          DIS_NOCOMMIT : retval);
  }
Exemplo n.º 5
0
int disrsl_(

  struct tcp_chan *chan,
  int             *negate,
  unsigned long   *value,
  unsigned long    count)

  {
  int            c;
  unsigned long  locval;
  unsigned long  ndigs;
  char          *cp;
  char           scratch[DIS_BUFSIZ];

  assert(negate != NULL);
  assert(value != NULL);
  assert(count);

  memset(scratch, 0, sizeof(scratch));

  if (ulmaxdigs == 0)
    {
    cp = discul_(scratch + sizeof(scratch) - 1, ULONG_MAX, &ulmaxdigs);

    ulmax = (char *)calloc(1, ulmaxdigs);

    if (ulmax == NULL)
      {
      return(DIS_NOMALLOC);
      }

    memcpy(ulmax, cp, ulmaxdigs);

    if (dis_umaxd == 0)
      disiui_();
    }

  if (count >= ulmaxdigs)
    {
    if (count > ulmaxdigs)
      goto overflow;

    if (memcmp(scratch, ulmax, ulmaxdigs) > 0)
      goto overflow;
    }

  c = tcp_getc(chan);

  /* FORMAT:  +2+1+0+0+64+2079+22+251175826.teva.westgrid.ubc2+362+21+8Job_Name+02+11run32_.2557+02+ ... */

  switch (c)
    {

    case '-':

    case '+':

      *negate = (c == '-');

      if (tcp_gets(chan, scratch, count) != (int)count)
        {
        return(DIS_EOD);
        }

      if (count >= ulmaxdigs)
        {
        if (count > ulmaxdigs)
          goto overflow;

        if (memcmp(scratch, ulmax, ulmaxdigs) > 0)
          goto overflow;
        }

      cp = scratch;

      locval = 0;

      do
        {
        if ((c = *cp++) < '0' || c > '9')
          {
          return(DIS_NONDIGIT);
          }

        locval = 10 * locval + c - '0';
        }
      while (--count);

      *value = locval;

      return(DIS_SUCCESS);

      /*NOTREACHED*/

      break;

    case '0':

      return(DIS_LEADZRO);

      /*NOTREACHED*/

      break;

    case '1':

    case '2':

    case '3':

    case '4':

    case '5':

    case '6':

    case '7':

    case '8':

    case '9':

      ndigs = c - '0';

      if (count > 1)
        {
        if (tcp_gets(chan, scratch + 1, count - 1) != (int)count - 1)
          {
          /* FAILURE */

          return(DIS_EOD);
          }

        cp = scratch;

        if (count >= ulmaxdigs)
          {
          if (count > ulmaxdigs)
            break;

          *cp = c;

          if (memcmp(scratch, ulmax, ulmaxdigs) > 0)
            break;
          }

        while (--count)
          {
          if (((c = *++cp) < '0') || (c > '9'))
            {
            /* FAILURE */
            return(DIS_NONDIGIT);
            }

          ndigs = 10 * ndigs + c - '0';
          }
        }

      return(disrsl_(chan, negate, value, ndigs));

      /*NOTREACHED*/

      break;

    case - 1:

      /* FAILURE */

      return(DIS_EOD);

      /*NOTREACHED*/

      break;

    case -2:

      /* FAILURE */

      return(DIS_EOF);

      /*NOTREACHED*/

      break;

    default:

      /* FAILURE */

      return(DIS_NONDIGIT);

      /*NOTREACHED*/

      break;
    }  /* END switch (c) */

  *negate = FALSE;

overflow:

  *value = ULONG_MAX;

  return(DIS_OVERFLOW);
  }  /* END disrsl_() */