Snippets

Takehiko NOZAKI gdtoa usage (printf %f conversion like)

Updated by Takehiko NOZAKI

File fcvt.c Modified

  • Ignore whitespace
  • Hide word diff
  * SUCH DAMAGE.
  */
 
+#define _GNU_SOURCE /* for asprintf(3) */
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
Updated by Takehiko NOZAKI

File fcvt.c Modified

  • Ignore whitespace
  • Hide word diff
 int
 fcvt(double dvalue, int width, int prec, FILE *fp)
 {
-	int flags, exp, neg, ret;
+	int flags, exp, neg, len, ret;
 	char *head, *tail;
 
 	flags = 0;
 	head = dtoa(dvalue, 3, prec, &exp, &neg, &tail);
 	if (head == NULL)
 		return 1;
+	len = tail - head;
 	if (neg)
 		flags |= NEGATIVE;
 	if (exp == 9999) {
 			ret = 1;
 		}
 	} else {
-		ret = cvt_ffmt(head, tail - head, width, prec, exp, flags, fp);
+		ret = cvt_ffmt(head, len, width, prec, exp, flags, fp);
 	}
 	freedtoa(head);
 	return ret;
Updated by Takehiko NOZAKI

File fcvt.c Modified

  • Ignore whitespace
  • Hide word diff
 #define SPACE		0x10
 #define SHARP		0x20
 #define ZERO		0x40
+#define HEX			0x80
 
 #define PADSIZ	20
 static const char zeros[PADSIZ] = "00000000000000000000";
 		return 1;
 	if (sign && putc(sign, fp) == EOF)
 		return 1;
+	if ((flags & HEX) && fwrite("0x", 1, 2, fp) != 2)
+		return 1;
 	if (width > siz && (flags & (MINUS|ZERO)) == ZERO &&
 	    pad(zeros, width - siz, fp))
 		return 1;
Updated by Takehiko NOZAKI

File fcvt.c Modified

  • Ignore whitespace
  • Hide word diff
 static inline int
 cvt_ffmt(char *head, int len, int width, int prec, int exp, int flags, FILE *fp)
 {
-	int sign, size, frac;
+	int sign, size;
 
 	sign = cvt_sign(flags);
 	size = cvt_fsize(sign, len, prec, exp, flags);
Updated by Takehiko NOZAKI

File fcvt.c Modified

  • Ignore whitespace
  • Hide word diff
 {
 	if (width > siz && (flags & (MINUS|ZERO)) == 0 &&
 	    pad(spaces, width - siz, fp))
-			return 1;
+		return 1;
 	if (sign && putc(sign, fp) == EOF)
 		return 1;
 	if (width > siz && (flags & (MINUS|ZERO)) == ZERO &&
 	    pad(zeros, width - siz, fp))
-			return 1;
+		return 1;
 	return 0;
 }
 
 {
 	if (width > siz && (flags & MINUS) &&
 	    pad(spaces, width - siz, fp))
-			return 1;
+		return 1;
 	return 0;
 }
 
  1. 1
  2. 2
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.