Add utility method to resolve symlinks
The same logic block to resolve possible symlinks exists in 5 different places now. This change moves this duplicated code to a static member function of WX_FILENAME instead.
This commit is contained in:
parent
542c02046b
commit
022dd6072c
|
@ -22,6 +22,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <wx_filename.h>
|
#include <wx_filename.h>
|
||||||
|
#include <macros.h>
|
||||||
|
|
||||||
|
|
||||||
WX_FILENAME::WX_FILENAME( const wxString& aPath, const wxString& aFilename )
|
WX_FILENAME::WX_FILENAME( const wxString& aPath, const wxString& aFilename )
|
||||||
|
@ -79,3 +80,18 @@ long long WX_FILENAME::GetTimestamp()
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Resolve possible symlink(s) in aFileName to an absolute path
|
||||||
|
void WX_FILENAME::ResolvePossibleSymlinks( wxFileName& aFilename )
|
||||||
|
{
|
||||||
|
#ifndef __WINDOWS__
|
||||||
|
if( aFilename.Exists( wxFILE_EXISTS_SYMLINK ) )
|
||||||
|
{
|
||||||
|
char buffer[PATH_MAX];
|
||||||
|
char* realPath = realpath( TO_UTF8( aFilename.GetFullPath() ), buffer );
|
||||||
|
|
||||||
|
if( realPath )
|
||||||
|
aFilename.Assign( wxString::FromUTF8( realPath ) );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
#include <tools/ee_actions.h>
|
#include <tools/ee_actions.h>
|
||||||
#include <tools/ee_inspection_tool.h>
|
#include <tools/ee_inspection_tool.h>
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
|
#include <wx_filename.h> // For ::ResolvePossibleSymlinks
|
||||||
|
|
||||||
bool SCH_EDIT_FRAME::SaveEEFile( SCH_SHEET* aSheet, bool aSaveUnderNewName )
|
bool SCH_EDIT_FRAME::SaveEEFile( SCH_SHEET* aSheet, bool aSaveUnderNewName )
|
||||||
{
|
{
|
||||||
|
@ -109,17 +110,8 @@ bool SCH_EDIT_FRAME::SaveEEFile( SCH_SHEET* aSheet, bool aSaveUnderNewName )
|
||||||
schematicFileName.SetExt( KiCadSchematicFileExtension );
|
schematicFileName.SetExt( KiCadSchematicFileExtension );
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef __WINDOWS__
|
|
||||||
// Write through symlinks, don't replace them
|
// Write through symlinks, don't replace them
|
||||||
if( schematicFileName.Exists( wxFILE_EXISTS_SYMLINK ) )
|
WX_FILENAME::ResolvePossibleSymlinks( schematicFileName );
|
||||||
{
|
|
||||||
char buffer[ PATH_MAX ];
|
|
||||||
char *realPath = realpath( TO_UTF8( schematicFileName.GetFullPath() ), buffer );
|
|
||||||
|
|
||||||
if( realPath )
|
|
||||||
schematicFileName.Assign( wxString::FromUTF8( realPath ) );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if( !IsWritable( schematicFileName ) )
|
if( !IsWritable( schematicFileName ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
#include <symbol_lib_table.h> // for PropPowerSymsOnly definintion.
|
#include <symbol_lib_table.h> // for PropPowerSymsOnly definintion.
|
||||||
#include <ee_selection.h>
|
#include <ee_selection.h>
|
||||||
#include <kicad_string.h>
|
#include <kicad_string.h>
|
||||||
|
#include <wx_filename.h> // for ::ResolvePossibleSymlinks()
|
||||||
|
|
||||||
|
|
||||||
using namespace TSCHEMATIC_T;
|
using namespace TSCHEMATIC_T;
|
||||||
|
@ -1380,18 +1381,7 @@ SCH_SEXPR_PLUGIN_CACHE::~SCH_SEXPR_PLUGIN_CACHE()
|
||||||
wxFileName SCH_SEXPR_PLUGIN_CACHE::GetRealFile() const
|
wxFileName SCH_SEXPR_PLUGIN_CACHE::GetRealFile() const
|
||||||
{
|
{
|
||||||
wxFileName fn( m_libFileName );
|
wxFileName fn( m_libFileName );
|
||||||
|
WX_FILENAME::ResolvePossibleSymlinks( fn );
|
||||||
#ifndef __WINDOWS__
|
|
||||||
if( fn.Exists( wxFILE_EXISTS_SYMLINK ) )
|
|
||||||
{
|
|
||||||
char buffer[ PATH_MAX ];
|
|
||||||
char *realPath = realpath( TO_UTF8( fn.GetFullPath() ), buffer );
|
|
||||||
|
|
||||||
if( realPath )
|
|
||||||
fn.Assign( wxString::FromUTF8( realPath ) );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return fn;
|
return fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
#include <confirm.h>
|
#include <confirm.h>
|
||||||
#include <tool/selection.h>
|
#include <tool/selection.h>
|
||||||
#include <default_values.h> // For some default values
|
#include <default_values.h> // For some default values
|
||||||
|
#include <wx_filename.h> // For ::ResolvePossibleSymlinks()
|
||||||
|
|
||||||
|
|
||||||
#define Mils2Iu( x ) Mils2iu( x )
|
#define Mils2Iu( x ) Mils2iu( x )
|
||||||
|
@ -2437,18 +2438,7 @@ SCH_LEGACY_PLUGIN_CACHE::~SCH_LEGACY_PLUGIN_CACHE()
|
||||||
wxFileName SCH_LEGACY_PLUGIN_CACHE::GetRealFile() const
|
wxFileName SCH_LEGACY_PLUGIN_CACHE::GetRealFile() const
|
||||||
{
|
{
|
||||||
wxFileName fn( m_libFileName );
|
wxFileName fn( m_libFileName );
|
||||||
|
WX_FILENAME::ResolvePossibleSymlinks( fn );
|
||||||
#ifndef __WINDOWS__
|
|
||||||
if( fn.Exists( wxFILE_EXISTS_SYMLINK ) )
|
|
||||||
{
|
|
||||||
char buffer[ PATH_MAX ];
|
|
||||||
char *realPath = realpath( TO_UTF8( fn.GetFullPath() ), buffer );
|
|
||||||
|
|
||||||
if( realPath )
|
|
||||||
fn.Assign( wxString::FromUTF8( realPath ) );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return fn;
|
return fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,9 @@ public:
|
||||||
// Avoid multiple calls to stat() on POSIX kernels.
|
// Avoid multiple calls to stat() on POSIX kernels.
|
||||||
long long GetTimestamp();
|
long long GetTimestamp();
|
||||||
|
|
||||||
|
// Resolve possible symlink(s) to absolute path
|
||||||
|
static void ResolvePossibleSymlinks( wxFileName& aFilename );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Write cached values to the wrapped wxFileName. MUST be called before using m_fn.
|
// Write cached values to the wrapped wxFileName. MUST be called before using m_fn.
|
||||||
void resolve();
|
void resolve();
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
#include <tools/pcb_actions.h>
|
#include <tools/pcb_actions.h>
|
||||||
#include "footprint_info_impl.h"
|
#include "footprint_info_impl.h"
|
||||||
|
#include <wx_filename.h> // For ::ResolvePossibleSymlinks()
|
||||||
|
|
||||||
#include <wx/wupdlock.h>
|
#include <wx/wupdlock.h>
|
||||||
#include <wx/filedlg.h>
|
#include <wx/filedlg.h>
|
||||||
|
@ -943,17 +944,8 @@ bool PCB_EDIT_FRAME::SavePcbFile( const wxString& aFileName, bool addToHistory,
|
||||||
if( pcbFileName.GetExt() == LegacyPcbFileExtension )
|
if( pcbFileName.GetExt() == LegacyPcbFileExtension )
|
||||||
pcbFileName.SetExt( KiCadPcbFileExtension );
|
pcbFileName.SetExt( KiCadPcbFileExtension );
|
||||||
|
|
||||||
#ifndef __WINDOWS__
|
|
||||||
// Write through symlinks, don't replace them
|
// Write through symlinks, don't replace them
|
||||||
if( pcbFileName.Exists( wxFILE_EXISTS_SYMLINK ) )
|
WX_FILENAME::ResolvePossibleSymlinks( pcbFileName );
|
||||||
{
|
|
||||||
char buffer[ PATH_MAX ];
|
|
||||||
char *realPath = realpath( TO_UTF8( pcbFileName.GetFullPath() ), buffer );
|
|
||||||
|
|
||||||
if( realPath )
|
|
||||||
pcbFileName.Assign( wxString::FromUTF8( realPath ) );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if( !IsWritable( pcbFileName ) )
|
if( !IsWritable( pcbFileName ) )
|
||||||
{
|
{
|
||||||
|
|
|
@ -2407,17 +2407,8 @@ void PCB_IO::FootprintSave( const wxString& aLibraryPath, const FOOTPRINT* aFoot
|
||||||
wxFileName fn( aLibraryPath, aFootprint->GetFPID().GetLibItemName(),
|
wxFileName fn( aLibraryPath, aFootprint->GetFPID().GetLibItemName(),
|
||||||
KiCadFootprintFileExtension );
|
KiCadFootprintFileExtension );
|
||||||
|
|
||||||
#ifndef __WINDOWS__
|
|
||||||
// Write through symlinks, don't replace them
|
// Write through symlinks, don't replace them
|
||||||
if( fn.Exists( wxFILE_EXISTS_SYMLINK ) )
|
WX_FILENAME::ResolvePossibleSymlinks( fn );
|
||||||
{
|
|
||||||
char buffer[ PATH_MAX ];
|
|
||||||
char *realPath = realpath( TO_UTF8( fn.GetFullPath() ), buffer );
|
|
||||||
|
|
||||||
if( realPath )
|
|
||||||
fn.Assign( wxString::FromUTF8( realPath ) );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if( !fn.IsOk() )
|
if( !fn.IsOk() )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue