setid.c
962 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#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() */