diff options
| author | daniel <daniel@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2009-04-04 13:09:29 +0000 |
|---|---|---|
| committer | daniel <daniel@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2009-04-04 13:09:29 +0000 |
| commit | e348da357dc872e8f5d03f65e0f18b72d7d46191 (patch) | |
| tree | f2ec8db23cba982263b90b941431da1aad525cc3 /packages/fftw | |
| parent | 4880db2c3574ef6eeff4bcad1680d0bc3a863748 (diff) | |
| download | fpc-e348da357dc872e8f5d03f65e0f18b72d7d46191.tar.gz | |
* Apply bugfix patch by Michalis Kamburelis from bug report 13463
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@12999 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fftw')
| -rw-r--r-- | packages/fftw/src/fftw_s.pas | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/packages/fftw/src/fftw_s.pas b/packages/fftw/src/fftw_s.pas index dacc8ed806..79b21c8228 100644 --- a/packages/fftw/src/fftw_s.pas +++ b/packages/fftw/src/fftw_s.pas @@ -117,11 +117,19 @@ procedure fftw_freemem(p:pointer);inline; procedure fftw_getmem(var p:pointer;size:sizeint); -begin {$IFDEF align} - getmem(p,size+16-1); +var + originalptr:pointer; +begin + { We allocate additional "align-1" bytes to be able to align. + And we allocate additional "SizeOf(Pointer)" to always have space to store + the value of the original pointer. } + getmem(originalptr,size + align-1 + SizeOf(Pointer)); + ptruint(p):=(ptruint(originalptr) + SizeOf(Pointer)); ptruint(p):=(ptruint(p)+align-1) and not (align-1); + PPointer(ptruint(p) - SizeOf(Pointer))^:=originalptr; {$ELSE} +begin getmem(p,size); {$ENDIF} end; @@ -129,7 +137,11 @@ end; procedure fftw_freemem(p:pointer);inline; begin +{$IFDEF align} + freemem(PPointer(ptruint(p) - SizeOf(Pointer))^); +{$ELSE} freemem(p); +{$ENDIF} end; end. |
