regex-posix 0.95.0 → 0.95.1
raw patch · 4 files changed
+29/−3 lines, 4 files
Files
- Text/Regex/Posix/Wrap.hsc +10/−2
- c-finalizer/myfree.c +13/−0
- c-finalizer/myfree.h +2/−0
- regex-posix.cabal +4/−1
Text/Regex/Posix/Wrap.hsc view
@@ -100,6 +100,9 @@ #include <sys/types.h> -- string.h is needed for memset++#include "myfree.h"+ #include "string.h" #ifndef _POSIX_C_SOURCE@@ -333,9 +336,14 @@ -- ----------------------------------------------------------------------------- -- The POSIX regex C interface -foreign import ccall unsafe "string.h memset"+-- string.h+foreign import ccall unsafe "memset" c_memset :: Ptr CRegex -> CInt -> CSize -> IO (Ptr CRegex) +-- c-finalizer/myfree.h and c-finalizer/myfree.c+foreign import ccall unsafe "&myregfree"+ c_myregfree :: FunPtr (Ptr CRegex -> IO ())+ #if __GLASGOW_HASKELL__ || __HUGS__ foreign import ccall unsafe "regcomp"@@ -457,7 +465,7 @@ Left ioerror -> return (Left (retOk,"Text.Regex.Posix.Wrap.wrapCompile: IOError from mallocBytes(regex_t) : "++show ioerror)) Right raw_regex_ptr -> do zero_regex_ptr <- c_memset raw_regex_ptr 0 (#const sizeof(regex_t)) -- no calloc, so clear the new area to zero- regex_fptr <- newForeignPtr c_regfree zero_regex_ptr -- once pointed-to area is clear it should be safe to add finalizer+ regex_fptr <- newForeignPtr c_myregfree zero_regex_ptr -- once pointed-to area is clear it should be safe to add finalizer withForeignPtr regex_fptr $ \regex_ptr -> do -- withForeignPtr is best hygiene here errCode <- c_regcomp regex_ptr pattern flags if (errCode == retOk)
+ c-finalizer/myfree.c view
@@ -0,0 +1,13 @@+#include "myfree.h"+#include "regex.h"+#include "stdlib.h"++/* +void free(void *ptr);+void regfree(regex_t *preg);+*/++void myregfree(void *preg) {+ regfree(preg);+ free(preg);+}
+ c-finalizer/myfree.h view
@@ -0,0 +1,2 @@+void myregfree(void *);+
regex-posix.cabal view
@@ -1,7 +1,7 @@ Name: regex-posix -- Keep the Version below in sync with ./Text/Regex/Posix.hs value -- getVersion_Text_Regex_Posix :: Version-Version: 0.95.0+Version: 0.95.1 Cabal-Version: >=1.2 Build-Type: Custom License: BSD3@@ -19,6 +19,7 @@ Build-Type: Simple Extra-Source-Files: cbits/engine.c cbits/cclass.h cbits/cname.h cbits/regex2.h cbits/regex.h cbits/utils.h+ c-finalizer/myfree.h c-finalizer/myfree.c flag newBase description: Choose base >= 4@@ -56,6 +57,8 @@ Build-Depends: regex-base >= 0.93, base < 3.0 Extensions: MultiParamTypeClasses, FunctionalDependencies, CPP + C-Sources: c-finalizer/myfree.c+ Include-Dirs: c-finalizer if !os(windows) CC-Options: -DHAVE_REGEX_H else