static int fq_snprint(char *s, size_t n, element_ptr e) { eptr p = e->data; size_t result = 0, left; int status; #define clip_sub() { \ result += status; \ left = result >= n ? 0 : n - result; \ } status = snprintf(s, n, "["); if (status < 0) return status; clip_sub(); status = element_snprint(s + result, left, p->x); if (status < 0) return status; clip_sub(); status = snprintf(s + result, left, ", "); if (status < 0) return status; clip_sub(); status = element_snprint(s + result, left, p->y); if (status < 0) return status; clip_sub(); status = snprintf(s + result, left, "]"); if (status < 0) return status; return (int)(result + status); #undef clip_sub }
static int curve_snprint(char *s, size_t n, element_ptr a) { point_ptr p = (point_ptr)a->data; size_t result = 0, left; int status; #define clip_sub() { \ result += status; \ left = result >= n ? 0 : n - result; \ } if (p->inf_flag) { status = snprintf(s, n, "O"); if (status < 0) return status; return 1; } status = snprintf(s, n, "["); if (status < 0) return status; clip_sub(); status = element_snprint(s + result, left, p->x); if (status < 0) return status; clip_sub(); status = snprintf(s + result, left, ", "); if (status < 0) return status; clip_sub(); status = element_snprint(s + result, left, p->y); if (status < 0) return status; clip_sub(); status = snprintf(s + result, left, "]"); if (status < 0) return status; return result + status; #undef clip_sub }