Index: xmlsitemap/xmlsitemap.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/xmlsitemap/xmlsitemap/Attic/xmlsitemap.module,v
retrieving revision 1.1.2.137
diff -u -p -r1.1.2.137 xmlsitemap.module
--- xmlsitemap/xmlsitemap.module	16 Jun 2009 14:10:43 -0000	1.1.2.137
+++ xmlsitemap/xmlsitemap.module	16 Jun 2009 15:47:54 -0000
@@ -40,6 +40,21 @@ if (!defined('REQUEST_TIME')) {
  */
 define('XMLSITEMAP_LINK_DISABLED', 1);
 
+/**
+ * The maximum number of links in one sitemap chunk file.
+ */
+define('XMLSITEMAP_MAX_SITEMAP_LINKS', 50000);
+
+/**
+ * The maximum filesize of a sitemap chunk file.
+ */
+define('XMLSITEMAP_MAX_SITEMAP_FILESIZE', 10485760);
+
+/**
+ * The maximum number of links in one sitemap index file.
+ */
+define('XMLSITEMAP_MAX_SITEMAP_INDEX_LINKS', 1000);
+
 /*****************************************************************************
  * Drupal hooks.
  ****************************************************************************/
@@ -129,7 +144,7 @@ function xmlsitemap_menu() {
     'type' => MENU_CALLBACK,
     'file' => 'xmlsitemap.pages.inc',
   );
-  $chunk_size = variable_get('xmlsitemap_chunk_size', 1000);
+  $chunk_size = variable_get('xmlsitemap_chunk_size', XMLSITEMAP_MAX_SITEMAP_LINKS);
   $link_count = xmlsitemap_link_count();
   if ($link_count > $chunk_size) {
     for ($chunk = 0; $chunk < $link_count / $chunk_size; ++$chunk) {
@@ -269,6 +284,19 @@ function xmlsitemap_link_count() {
 }
 
 /**
+ * Return the number of chunk files.
+ */
+function xmlsitemap_chunk_count() {
+  $link_count = xmlsitemap_link_count();
+  $chunk_size = variable_get('xmlsitemap_chunk_size', XMLSITEMAP_MAX_SITEMAP_LINKS);
+  $chunk_count = (integer)($link_count / $chunk_size);
+  if ($chunk_count != ($link_count / $chunk_size)) {
+    $chunk_count++;
+  }
+  return $chunk_count;
+}
+
+/**
  * Return an array of sitemap priority options.
  *
  * @param $option
Index: xmlsitemap/xmlsitemap.pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/xmlsitemap/xmlsitemap/Attic/xmlsitemap.pages.inc,v
retrieving revision 1.1.2.40
diff -u -p -r1.1.2.40 xmlsitemap.pages.inc
--- xmlsitemap/xmlsitemap.pages.inc	16 Jun 2009 14:20:17 -0000	1.1.2.40
+++ xmlsitemap/xmlsitemap.pages.inc	16 Jun 2009 15:47:54 -0000
@@ -25,13 +25,24 @@
  */
 function xmlsitemap_output($chunk = NULL) {
   global $user;
-  $chunk_size = variable_get('xmlsitemap_chunk_size', 1000);
+  $chunk_size = variable_get('xmlsitemap_chunk_size', XMLSITEMAP_MAX_SITEMAP_LINKS);
   $link_count = xmlsitemap_link_count();
-  if (($link_count / $chunk_size) > 1000) {
-    $chunk_size = (integer) $link_count / 1000;
-    if ($chunk_size != variable_get('xmlsitemap_chunk_size', 1000)) {
-      variable_set('xmlsitemap_chunk_size', $chunk_size);
+  $chunk_count = xmlsitemap_chunk_count();
+  if ($chunk_count > XMLSITEMAP_MAX_SITEMAP_INDEX_LINKS &&
+    $chunk_size < XMLSITEMAP_MAX_SITEMAP_LINKS) {
+    $chunk_adjust = $chunk_count - XMLSITEMAP_MAX_SITEMAP_INDEX_LINKS;
+    $chunk_adjust = $chunk_adjust * $chunk_size;
+    if (($chunk_size + $chunk_adjust) <= XMLSITEMAP_MAX_SITEMAP_LINKS) {
+      $chunk_size += $chunk_adjust;
     }
+    else {
+      $chunk_size = XMLSITEMAP_MAX_SITEMAP_LINKS;
+    }
+    variable_set('xmlsitemap_chunk_size', $chunk_size);
+    watchdog('xmlsitemap', t('Chunk size has been updated to %d.', $chunk_size));
+  }
+  elseif($chunk_count > XMLSITEMAP_MAX_SITEMAP_INDEX_LINKS) {
+    watchdog('xmlsitemap', t('The maximum number of allowed links has been reached.'), WATCHDOG_ERROR);
   }
   if (isset($chunk) && !is_numeric($chunk)) {
     drupal_not_found();
