Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.947.2.11
diff -u -p -r1.947.2.11 node.module
--- modules/node/node.module  25 Jun 2008 08:59:57 -0000  1.947.2.11
+++ modules/node/node.module  21 Nov 2008 11:50:15 -0000
@@ -643,14 +643,14 @@ function node_hook(&$node, $hook) {
  * @return
  *   The returned value of the invoked hook.
  */
-function node_invoke(&$node, $hook, $a2 = NULL, $a3 = NULL, $a4 = NULL) {
+function node_invoke(&$node, $hook, $a2 = NULL, $a3 = NULL, $a4 = NULL, &$form_state = NULL) {
   if (node_hook($node, $hook)) {
     $module = node_get_types('module', $node);
     if ($module == 'node') {
       $module = 'node_content'; // Avoid function name collisions.
     }
     $function = $module .'_'. $hook;
-    return ($function($node, $a2, $a3, $a4));
+    return ($function($node, $a2, $a3, $a4, $form_state));
   }
 }

@@ -666,11 +666,11 @@ function node_invoke(&$node, $hook, $a2
  * @return
  *   The returned value of the invoked hooks.
  */
-function node_invoke_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
+function node_invoke_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL, &$form_state = NULL) {
   $return = array();
   foreach (module_implements('nodeapi') as $name) {
     $function = $name .'_nodeapi';
-    $result = $function($node, $op, $a3, $a4);
+    $result = $function($node, $op, $a3, $a4, $form_state);
     if (isset($result) && is_array($result)) {
       $return = array_merge($return, $result);
     }
@@ -774,7 +774,7 @@ function node_load($param = array(), $re
 /**
  * Perform validation checks on the given node.
  */
-function node_validate($node, $form = array()) {
+function node_validate($node, $form = array(), &$form_state) {
   // Convert the node to an object, if necessary.
   $node = (object)$node;
   $type = node_get_types('type', $node);
@@ -805,8 +805,8 @@ function node_validate($node, $form = ar
   }

   // Do node-type-specific validation checks.
-  node_invoke($node, 'validate', $form);
-  node_invoke_nodeapi($node, 'validate', $form);
+  node_invoke($node, 'validate', $form, NULL, NULL, $form_state);
+  node_invoke_nodeapi($node, 'validate', $form, NULL, $form_state);
 }

 /**
Index: modules/node/node.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v
retrieving revision 1.28.2.3
diff -u -p -r1.28.2.3 node.pages.inc
--- modules/node/node.pages.inc 10 Nov 2008 10:18:54 -0000  1.28.2.3
+++ modules/node/node.pages.inc 21 Nov 2008 11:50:15 -0000
@@ -62,7 +62,7 @@ function node_add($type) {
 }

 function node_form_validate($form, &$form_state) {
-  node_validate($form_state['values'], $form);
+  node_validate($form_state['values'], $form, $form_state);
 }

 function node_object_prepare(&$node) {
