Re: Update info.c to use size_trun_len() & Co.



May I propose some rearrangements for inclusion/discussion?

Basically I like the patch. We agree it's not easy to understand the code,
so we must rewrite the comments. Moreover, it's a useful function, likely to
be ported and documentation would help a lot.

On the other hand, I try to avoid using "break" (and relatives) when
possible. I feel we had too many here. I think there's little or no overhead
when removing them and I find this more readable.

A couple of things my students could point:

- Why do we call the function size_trunc_len() when it's a general procedure
we could use for many other (binary) things?

- Why do we use signed integers for "size" and "units"?

Time to go back to work.
*8-) David

------------

--- ChangeLog.v0	Thu Aug 30 18:59:12 2001
+++ ChangeLog	Sat Sep  1 17:39:56 2001
@@ -1,3 +1,8 @@
+2001-09-01  David Martin  <dmartina excite es>
+
+	* util.c (size_trunc_len): Rearrange comments and code for
+	readability and structure.
+
 2001-08-30  David Martin  <dmartina excite es>
 
 	* info.c (info_show_info): Use size_trunc_len() instead of
--- util.c.v0	Thu Aug 30 18:41:08 2001
+++ util.c	Sat Sep  1 12:16:48 2001
@@ -333,25 +333,33 @@
     for (j = units; suffix [j] != NULL; j++) {
 	if (size == 0) {
 	    if (j == units) {
-		/* Empty files will print "0" even with minimal width.  */
+		/* First iteration => True empty files: print "0". */
 		g_snprintf (buffer, len + 1, "0");
-		break;
-	    }
 
-	    /* Use "~K" or just "K" if len is 1.  Use "B" for bytes.  */
-	    g_snprintf (buffer, len + 1, (len > 1) ? "~%s" : "%s",
-			(j > 1) ? suffix[j - 1] : "B");
-	    break;
-	}
+	    } else {
+		/* Ficticious zero from previous scaling+rounding:
+		    - Print no number but "~" (meaning "some"), if possible.
+		    - Use previous suffix, or "B" for bytes. */
+	        g_snprintf (buffer, len + 1, (len > 1) ? "~%s" : "%s",
+			    (j > 1) ? suffix[j - 1] : "B");
+	    }
 
-	if (size < power10 [len - (j > 0)]) {
+	} else if (size < power10 [len - (j > 0)]) {
+	    /* Length of size is valid: Print its value and suffix */ 
 	    g_snprintf (buffer, len + 1, "%lu%s", (unsigned long) size,
suffix[j]);
-	    break;
-	}
 
-	/* Powers of 1024, with rounding.  */
-	size = (size + 512) >> 10;
+	} else {
+	    /* Scaling: Divide/rotate with powers of 1024 + rounding. */
+	    size = (size + 512) >> 10;
+	    continue;
+	}
+	
+	/* Size was printed: Go away*/
+	return;
     }
+
+    /* Shortage of suffixes! Should be unreachable. Alert programmers. */
+    g_snprintf (buffer, len + 1, "#");
 }
 
 int is_exe (mode_t mode)





_______________________________________________________
http://inbox.excite.com

Attachment: util_strunc2.diff.gz
Description: application/gzip-compressed



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]