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() */
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); }
/** * @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); }
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); }
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_() */