Browse Source

print_q -> q2str and it's interface aligned to other similar functions.

Jan Janak 21 years ago
parent
commit
4345a89627
1 changed files with 27 additions and 17 deletions
  1. 27 17
      qvalue.h

+ 27 - 17
qvalue.h

@@ -102,31 +102,41 @@ static inline size_t len_q(qvalue_t q)
 
 
 /*
- * Print the q parameter
+ * Convert q value to string
  */
-static inline size_t print_q(char* p, qvalue_t q)
+static inline char* q2str(qvalue_t q, unsigned int* len)
 {
+	static char buf[sizeof("0.123")];
+	char* p;
+
+	p = buf;
 	if (q == Q_UNSPECIFIED) {
-		return 0;
+		     /* Do nothing */
 	} else if (q >= MAX_Q) {
 		memcpy(p, MAX_Q_STR, MAX_Q_STR_LEN);
-		return MAX_Q_STR_LEN;
+		p += MAX_Q_STR_LEN;
 	} else if (q <= MIN_Q) {
 		memcpy(p, MIN_Q_STR, MIN_Q_STR_LEN);
-		return MIN_Q_STR_LEN;
+		p += MIN_Q_STR_LEN;
+	} else {
+		memcpy(p, Q_PREFIX, Q_PREFIX_LEN);
+		p += Q_PREFIX_LEN;
+		
+		*p++ = q / 100 + '0';
+		q %= 100;
+		if (!q) goto end;
+
+		*p++ = q / 10 + '0';
+		q %= 10;
+		if (!q) goto end;
+
+		*p = q + '0';
+		*len = Q_PREFIX_LEN + 3;
 	}
-	
-	memcpy(p, Q_PREFIX, Q_PREFIX_LEN);
-	p += Q_PREFIX_LEN;
-
-	*p++ = q / 100 + '0';
-	q %= 100;
-	if (!q) return Q_PREFIX_LEN + 1;
-	*p++ = q / 10 + '0';
-	q %= 10;
-	if (!q) return Q_PREFIX_LEN + 2;
-	*p = q + '0';
-	return Q_PREFIX_LEN + 3;
+ end:
+	*p = '\0';
+	*len = p - buf;
+	return buf;
 }