{-# LINE 1 "System\\Win32\\Path.hsc" #-}

{-# LINE 2 "System\\Win32\\Path.hsc" #-}
{-# LANGUAGE Safe #-}

{-# LINE 6 "System\\Win32\\Path.hsc" #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  System.Win32.Path
-- Copyright   :  (c) Tamar Christina, 1997-2003
-- License     :  BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer  :  Tamar Christina <tamar@zhox.com>
-- Stability   :  provisional
-- Portability :  portable
--
-- A collection of FFI declarations for interfacing with Win32.
--
-----------------------------------------------------------------------------

module System.Win32.Path (
   filepathRelativePathTo
 , pathRelativePathTo
 ) where

import System.Win32.Types
import System.Win32.File

import Foreign

#include "windows_cconv.h"


{-# LINE 33 "System\\Win32\\Path.hsc" #-}

filepathRelativePathTo :: FilePath -> FilePath -> IO FilePath
filepathRelativePathTo from to =
  withTString from $ \p_from ->
  withTString to   $ \p_to   ->
  allocaArray ((260) * ((1))) $ \p_AbsPath -> do
{-# LINE 39 "System\\Win32\\Path.hsc" #-}
    _ <- failIfZero "PathRelativePathTo" (c_pathRelativePathTo p_AbsPath p_from fILE_ATTRIBUTE_DIRECTORY
                                                                         p_to   fILE_ATTRIBUTE_NORMAL)
    path <- peekTString p_AbsPath
    _ <- localFree p_AbsPath
    return path

pathRelativePathTo :: FilePath -> FileAttributeOrFlag -> FilePath -> FileAttributeOrFlag -> IO FilePath
pathRelativePathTo from from_attr to to_attr =
  withTString from $ \p_from ->
  withTString to   $ \p_to   ->
  allocaArray ((260) * ((1))) $ \p_AbsPath -> do
{-# LINE 50 "System\\Win32\\Path.hsc" #-}
    _ <- failIfZero "PathRelativePathTo" (c_pathRelativePathTo p_AbsPath p_from from_attr
                                                                         p_to   to_attr)
    path <- peekTString p_AbsPath
    _ <- localFree p_AbsPath
    return path

foreign import WINDOWS_CCONV unsafe "Shlwapi.h PathRelativePathToW" 
         c_pathRelativePathTo :: LPTSTR -> LPCTSTR -> DWORD -> LPCTSTR -> DWORD -> IO UINT