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);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to