svn commit: r202287 - head/lib/libc/gen

Ed Schouten ed at FreeBSD.org
Thu Jan 14 15:20:09 UTC 2010


Author: ed
Date: Thu Jan 14 15:20:09 2010
New Revision: 202287
URL: http://svn.freebsd.org/changeset/base/202287

Log:
  Unbreak pututxline() on 32-bit architectures.
  
  I forgot to cast the size_t's back to off_t before negating them,
  causing all sorts of artifacts where the log files would grow to 2^32 -
  197 bytes.
  
  Reported by:	ume

Modified:
  head/lib/libc/gen/pututxline.c

Modified: head/lib/libc/gen/pututxline.c
==============================================================================
--- head/lib/libc/gen/pututxline.c	Thu Jan 14 15:07:18 2010	(r202286)
+++ head/lib/libc/gen/pututxline.c	Thu Jan 14 15:20:09 2010	(r202287)
@@ -87,7 +87,7 @@ utx_active_add(const struct futx *fu)
 		case DEAD_PROCESS:
 			/* Overwrite when ut_id matches. */
 			if (memcmp(fu->fu_id, fe.fu_id, sizeof fe.fu_id) == 0) {
-				fseeko(fp, -sizeof fe, SEEK_CUR);
+				fseeko(fp, -(off_t)sizeof fe, SEEK_CUR);
 				goto exact;
 			}
 			if (fe.fu_type != DEAD_PROCESS)
@@ -96,7 +96,7 @@ utx_active_add(const struct futx *fu)
 		default:
 			/* Allow us to overwrite unused records. */
 			if (partial == -1)
-				partial = ftello(fp) - sizeof fe;
+				partial = ftello(fp) - (off_t)sizeof fe;
 			break;
 		}
 	}
@@ -140,7 +140,7 @@ utx_active_remove(struct futx *fu)
 				fu->fu_tv = fe.fu_tv;
 
 			/* Terminate session. */
-			fseeko(fp, -sizeof fe, SEEK_CUR);
+			fseeko(fp, -(off_t)sizeof fe, SEEK_CUR);
 			fwrite(fu, sizeof *fu, 1, fp);
 			fclose(fp);
 			return (0);
@@ -181,7 +181,7 @@ utx_lastlogin_add(const struct futx *fu)
 			goto done;
 		
 		/* Found a previous lastlogin entry for this user. */
-		fseeko(fp, -sizeof fe, SEEK_CUR);
+		fseeko(fp, -(off_t)sizeof fe, SEEK_CUR);
 		break;
 	}
 	fwrite(fu, sizeof *fu, 1, fp);


More information about the svn-src-all mailing list