You've already forked lazarus-ccr
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:
@ -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...
|
||||
|
Reference in New Issue
Block a user