[Lldb-commits] [lldb] r231535 - Make sure to re-read the file data you can get from OptionValueFileSpec::GetFileContents(...) when the file has changed.

Greg Clayton gclayton at apple.com
Fri Mar 6 15:46:54 PST 2015


Author: gclayton
Date: Fri Mar  6 17:46:54 2015
New Revision: 231535

URL: http://llvm.org/viewvc/llvm-project?rev=231535&view=rev
Log:
Make sure to re-read the file data you can get from OptionValueFileSpec::GetFileContents(...) when the file has changed.

This means you can set an expression prefix file with:
(lldb) settings set target.expr-prefix /tmp/to/prefix.txt

And you can run an expression and modify your expression prefix file in another editor without having to type:

(lldb) settings set target.expr-prefix /tmp/to/prefix.txt

again...

<rdar://problem/12155942> 


Modified:
    lldb/trunk/include/lldb/Interpreter/OptionValueFileSpec.h
    lldb/trunk/source/Interpreter/OptionValueFileSpec.cpp

Modified: lldb/trunk/include/lldb/Interpreter/OptionValueFileSpec.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionValueFileSpec.h?rev=231535&r1=231534&r2=231535&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Interpreter/OptionValueFileSpec.h (original)
+++ lldb/trunk/include/lldb/Interpreter/OptionValueFileSpec.h Fri Mar  6 17:46:54 2015
@@ -59,6 +59,7 @@ public:
         m_current_value = m_default_value;
         m_value_was_set = false;
         m_data_sp.reset();
+        m_data_mod_time.Clear();
         return true;
     }
     
@@ -123,6 +124,7 @@ protected:
     FileSpec m_current_value;
     FileSpec m_default_value;
     lldb::DataBufferSP m_data_sp;
+    TimeValue m_data_mod_time;
     uint32_t m_completion_mask;
     bool m_resolve;
 };

Modified: lldb/trunk/source/Interpreter/OptionValueFileSpec.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionValueFileSpec.cpp?rev=231535&r1=231534&r2=231535&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/OptionValueFileSpec.cpp (original)
+++ lldb/trunk/source/Interpreter/OptionValueFileSpec.cpp Fri Mar  6 17:46:54 2015
@@ -29,6 +29,7 @@ OptionValueFileSpec::OptionValueFileSpec
     m_current_value (),
     m_default_value (),
     m_data_sp(),
+    m_data_mod_time (),
     m_completion_mask (CommandCompletions::eDiskFileCompletion),
     m_resolve (resolve)
 {
@@ -40,6 +41,7 @@ OptionValueFileSpec::OptionValueFileSpec
     m_current_value (value),
     m_default_value (value),
     m_data_sp(),
+    m_data_mod_time (),
     m_completion_mask (CommandCompletions::eDiskFileCompletion),
     m_resolve (resolve)
 {
@@ -52,6 +54,7 @@ OptionValueFileSpec::OptionValueFileSpec
     m_current_value (current_value),
     m_default_value (default_value),
     m_data_sp(),
+    m_data_mod_time (),
     m_completion_mask (CommandCompletions::eDiskFileCompletion),
     m_resolve (resolve)
 {
@@ -99,6 +102,7 @@ OptionValueFileSpec::SetValueFromString
             m_value_was_set = true;
             m_current_value.SetFile(value.str().c_str(), m_resolve);
             m_data_sp.reset();
+            m_data_mod_time.Clear();
             NotifyValueChanged();
         }
         else
@@ -151,12 +155,16 @@ OptionValueFileSpec::AutoComplete (Comma
 const lldb::DataBufferSP &
 OptionValueFileSpec::GetFileContents(bool null_terminate)
 {
-    if (!m_data_sp && m_current_value)
+    if (m_current_value)
     {
+        const TimeValue file_mod_time = m_current_value.GetModificationTime();
+        if (m_data_sp && m_data_mod_time == file_mod_time)
+            return m_data_sp;
         if (null_terminate)
             m_data_sp = m_current_value.ReadFileContentsAsCString();
         else
             m_data_sp = m_current_value.ReadFileContents();
+        m_data_mod_time = file_mod_time;
     }
     return m_data_sp;
 }





More information about the lldb-commits mailing list