You've already forked lazarus-ccr
fpexif: Fix IPTC string tag writing error.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9011 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -423,7 +423,9 @@ const
|
|||||||
procedure WriteString(AIptcTag: TIptcTag; AText: PChar; ALength: Integer);
|
procedure WriteString(AIptcTag: TIptcTag; AText: PChar; ALength: Integer);
|
||||||
var
|
var
|
||||||
byteAdded: Boolean;
|
byteAdded: Boolean;
|
||||||
|
len: Integer;
|
||||||
begin
|
begin
|
||||||
|
len := ALength;
|
||||||
if odd(ALength) then begin
|
if odd(ALength) then begin
|
||||||
inc(ALength);
|
inc(ALength);
|
||||||
byteAdded := true;
|
byteAdded := true;
|
||||||
@@ -433,7 +435,7 @@ const
|
|||||||
if ALength < 32768 then begin
|
if ALength < 32768 then begin
|
||||||
AIptcTag.Size := NtoBE(word(ALength));
|
AIptcTag.Size := NtoBE(word(ALength));
|
||||||
AStream.WriteBuffer(AIptcTag, SizeOf(AIptcTag));
|
AStream.WriteBuffer(AIptcTag, SizeOf(AIptcTag));
|
||||||
AStream.WriteBuffer(AText^, ALength);
|
AStream.WriteBuffer(AText^, len);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
// "Extended" dataset
|
// "Extended" dataset
|
||||||
@@ -442,13 +444,13 @@ const
|
|||||||
AIptcTag.Size := NtoBE($8002);
|
AIptcTag.Size := NtoBE($8002);
|
||||||
AStream.WriteBuffer(AIptcTag, SizeOf(AIptcTag));
|
AStream.WriteBuffer(AIptcTag, SizeOf(AIptcTag));
|
||||||
WriteWord(AStream, NtoBE(word(ALength)));
|
WriteWord(AStream, NtoBE(word(ALength)));
|
||||||
AStream.WriteBuffer(AText^, ALength);
|
AStream.WriteBuffer(AText^, len);
|
||||||
end else begin
|
end else begin
|
||||||
// Size is 4, but we must set highest bit to mark tag as being extended.
|
// Size is 4, but we must set highest bit to mark tag as being extended.
|
||||||
AIptcTag.Size := $8004;
|
AIptcTag.Size := $8004;
|
||||||
AStream.WriteBuffer(AIptcTag, SizeOf(AIptcTag));
|
AStream.WriteBuffer(AIptcTag, SizeOf(AIptcTag));
|
||||||
WriteDWord(AStream, NtoBE(ALength));
|
WriteDWord(AStream, NtoBE(ALength));
|
||||||
AStream.WriteBuffer(AText^, ALength);
|
AStream.WriteBuffer(AText^, len);
|
||||||
end;
|
end;
|
||||||
if byteAdded then // Write 0 to added byte
|
if byteAdded then // Write 0 to added byte
|
||||||
WriteByte(AStream, 0);
|
WriteByte(AStream, 0);
|
||||||
|
Reference in New Issue
Block a user