--- logrotate-3.7.1-old/logrotate.c	2004-10-19 23:41:24.000000000 +0200
+++ logrotate-3.7.1-new/logrotate.c	2005-10-02 17:29:22.380767321 +0200
@@ -424,12 +424,15 @@ int findNeedRotating(logInfo * log, int 
         switch (log->criterium) {
           case ROT_WEEKLY:
             /* rotate if:
-                  1) the current weekday is before the weekday of the
-                     last rotation
+                  1) the day of the week is the same as the day of the week of
+                     the previous rotation but not the same day of the year
+                     this will rotate it on the same day every week, but not
+                     twice a day.
                   2) more then a week has passed since the last
                      rotation */
-            state->doRotate = ((now.tm_wday < state->lastRotated.tm_wday) ||
-			       ((mktime(&now) - mktime(&state->lastRotated)) >
+            state->doRotate = ((now.tm_wday == state->lastRotated.tm_wday &&
+				now.tm_yday != state->lastRotated.tm_yday) ||
+				((mktime(&now) - mktime(&state->lastRotated)) >
 				(7 * 24 * 3600)));
             break;
           case ROT_MONTHLY:
