setid.c 962 Bytes

#include "ddwriteint.h"


void __ddSetID(DDCmd *command)
{
  LEODiskID	id;
  u32		result;
  
  if (command->flags & DDWRITE_FLG_IDSERIAL)
  {
    /*
     * このフラグが立っていると、現在書かれている ID のシリアル番号
     * だけを上書きします。
     * 現在何も書かれていない場合、シリアル番号以外の部分は0になり
     * ます。
     */
    result = __ddReadIDBlock(&id);
    if ( result )
    {
	  if( result == LEO_ERROR_UNRECOVERED_READ_ERROR )
		{
		  bzero( &id , sizeof(LEODiskID) );
		}
	  else
		{
		  __ddWriteError = (s32)result;
		  return;
		}
    }
    
    bcopy((void *)&(((LEODiskID *)command->idAddr)->serialNumber),
	  (void *)&(id.serialNumber), sizeof(LEOSerialNum));

  }
  else
    bcopy((void *)command->idAddr, (void *)&id, sizeof(LEODiskID));
  

  /*
   * 実際に ID を書く
   */
  result = __ddWriteIDBlock(&id);
  if (result)
  {
    __ddWriteError = (s32)result;
    return;
  }

  __ddWriteError = (s32)0;
  return;

} /* setID() */