fpexif: Clean up

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8993 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2023-10-28 22:25:20 +00:00
parent f36bceb0ca
commit 3e67affa50

View File

@ -421,11 +421,14 @@ const
TAG_MARKER = $1C;
procedure WriteString(AIptcTag: TIptcTag; AText: PChar; ALength: Integer);
var
byteAdded: Boolean;
begin
if odd(ALength) then begin
inc(ALength);
end;
byteAdded := true;
end else
byteAdded := false;
// "Standard" dataset
if ALength < 32768 then begin
AIptcTag.Size := NtoBE(word(ALength));
@ -447,13 +450,12 @@ const
WriteDWord(AStream, NtoBE(ALength));
AStream.WriteBuffer(AText^, ALength);
end;
if odd(ALength) then // zero-termination of string
if byteAdded then // Write 0 to added byte
WriteByte(AStream, 0);
end;
var
iptcTag: TIptcTag;
len: DWord;
i: Integer;
sa: TStringArray;
begin
@ -469,41 +471,13 @@ begin
end;
ttString:
begin
if ATag is TIptcMultiStringTag
then begin
if ATag is TIptcMultiStringTag then
begin
sa := SplitMultiStringTag(ATag);
for i := 0 to High(sa) do
WriteString(iptcTag, PChar(sa[i]), Length(sa[i]));
end else
WriteString(iptcTag, PChar(ATag.RawData), Length(ATag.RawData));
(*
len := Length(ATag.RawData);
if odd(len) then begin
inc(len);
end;
// "Standard" dataset
if len < 32768 then begin
iptcTag.Size := NtoBE(word(len));
AStream.WriteBuffer(iptcTag, SizeOf(iptcTag));
AStream.WriteBuffer(ATag.RawData[0], Length(ATag.RawData));
end else
// "Extended" dataset
if len < 65536 then begin
// Size is 2, but we must set highest bit to mark tag as being extended.
iptcTag.Size := NtoBE($8002);
AStream.WriteBuffer(iptcTag, SizeOf(iptcTag));
WriteWord(AStream, NtoBE(word(len)));
AStream.WriteBuffer(ATag.RawData[0], Length(ATag.RawData));
end else begin
// Size is 4, but we must set highest bit to mark tag as being extended.
iptcTag.Size := $8004;
AStream.WriteBuffer(iptcTag, SizeOf(iptcTag));
WriteDWord(AStream, NtoBE(len));
AStream.WriteBuffer(ATag.RawData[0], Length(ATag.RawData));
end;
if odd(Length(ATag.RawData)) then // zero-termination of string
WriteByte(AStream, 0);
*)
end;
else
// I've never seen other tag types than USHORT and STRING...