summaryrefslogtreecommitdiff
path: root/packages/fcl-base
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2011-01-16 12:09:35 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2011-01-16 12:09:35 +0000
commit90e1274600df2975f2c6fa86c23c37f6c722c09f (patch)
treefa1642835535b47b28a0a1a1bfda9f902c014cd1 /packages/fcl-base
parent6eca793b9426b648a21d11fc29edac69cae36dec (diff)
downloadfpc-90e1274600df2975f2c6fa86c23c37f6c722c09f.tar.gz
* procedural encode/decode base64. Useful when base64ing hashes to XMLs etc.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@16772 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-base')
-rw-r--r--packages/fcl-base/src/base64.pp50
1 files changed, 50 insertions, 0 deletions
diff --git a/packages/fcl-base/src/base64.pp b/packages/fcl-base/src/base64.pp
index 3498b08e41..cc6cce8673 100644
--- a/packages/fcl-base/src/base64.pp
+++ b/packages/fcl-base/src/base64.pp
@@ -87,6 +87,9 @@ type
EBase64DecodingException = class(Exception)
end;
+function EncodeStringBase64(const s:string):String;
+function DecodeStringBase64(const s:string):String;
+
implementation
uses
@@ -420,5 +423,52 @@ begin
raise EStreamError.Create('Invalid stream operation');
end;
+function DecodeStringBase64(const s:string):String;
+
+var
+ Instream,
+ Outstream : TStringStream;
+ Decoder : TBase64DecodingStream;
+begin
+ Instream:=TStringStream.Create(s);
+ try
+ Outstream:=TStringStream.Create('');
+ try
+ Decoder:=TBase64DecodingStream.Create(Instream,bdmMIME);
+ try
+ Outstream.CopyFrom(Decoder,Decoder.Size);
+ Outstream.Position:=0;
+ Result:=Outstream.ReadString(Outstream.Size);
+ finally
+ Decoder.Free;
+ end;
+ finally
+ Outstream.Free;
+ end;
+ finally
+ Instream.Free;
+ end;
+end;
+
+function EncodeStringBase64(const s:string):String;
+
+var
+ Outstream : TStringStream;
+ Encoder : TBase64EncodingStream;
+begin
+ Outstream:=TStringStream.Create('');
+ try
+ Encoder:=TBase64EncodingStream.create(outstream);
+ try
+ Encoder.Write(s[1],Length(s));
+ finally
+ Encoder.Free;
+ end;
+ Outstream.Position:=0;
+ Result:=Outstream.ReadString(Outstream.Size);
+ finally
+ Outstream.free;
+ end;
+end;
end.