clayborg added inline comments.

================
Comment at: lldb/bindings/interface/SBPlatform.i:197-198
 
+    lldb::SBEnvironment
+    GetEnvironment();
+
----------------
What does it mean to get the environment from a platform? Fetching it from the 
remote platform as what ever binary was used to provide the connection?


================
Comment at: lldb/include/lldb/API/SBEnvironment.h:26
+
+  int Size();
+
----------------
labath wrote:
> s/int/size_t
return size_t or uint32_t.

Possibly rename to GetNumEntries() to be consistent with all of the other APIs 
that have a size and item accessor.


================
Comment at: lldb/include/lldb/API/SBEnvironment.h:28
+
+  const char *GetEntryAtIndex(int idx);
+
----------------
use size_t or uint32_t (which ever one you pick from Size() above


================
Comment at: lldb/include/lldb/API/SBPlatform.h:157
 
+  SBEnvironment GetEnvironment();
+
----------------
I know there isn't much header documentation here already, but it is a good 
time to start with any new functions. We would need to detail what this 
environment would be. Something like: "Return the environment variables 
contained in the remote platform connection process."


================
Comment at: lldb/source/API/SBEnvironment.cpp:46
+
+int SBEnvironment::Size() {
+  LLDB_RECORD_METHOD_NO_ARGS(int, SBEnvironment, Size);
----------------
```
size_t SBEnvironment::GetNumEnrtries()
```


================
Comment at: lldb/source/API/SBEnvironment.cpp:53
+  LLDB_RECORD_METHOD(const char *, SBEnvironment, GetEntryAtIndex, (int), idx);
+  return LLDB_RECORD_RESULT(m_opaque_up->getEnvp().get()[idx]);
+}
----------------
labath wrote:
> This will return a dangling pointer as Envp is a temporary object. It's 
> intended to be used to pass the environment object to execve-like function. 
> The current "state of the art" is to ConstStringify all temporary strings 
> that go out of the SB api. (Though I think we should start using std::string).
> 
> Also, constructing the Envp object just to fetch a single string out of it is 
> pretty expensive. You can fetch the desired result from the Environment 
> object directly.
> 
> Putting it all together, this kind of an API would be implemented via 
> something like:
> ```
>   if (idx >= m_opaque_up->size())
>     return nullptr;
>   return ConstString(Environment::compose(*std::next(m_opaque_up.begin(), 
> idx)).AsCString();
> ```
> 
> ... but I am not sure this is really the right api. More on that in a 
> separate comment.
Yes, any C strings returned from the SB API should use 
ConstString(cstr).AsCString() as the ConstString puts the string into a string 
pool and there is no need to clients to destruct the string or take ownership.

No STL in the SB API please, so no std::string. std::string isn't stable on all 
platforms and competing C++ runtimes on different platforms can cause problems. 
If we need string ownership, we can introduce SBString as a class.

Please do bounds check this like Pavel requested as the index isn't guaranteed 
to be valid. If you bounds check first then your code above could be modified 
to return a ConstString().AsCString().


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D76111/new/

https://reviews.llvm.org/D76111



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to