-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/55547/#review165576
-----------------------------------------------------------


Ship it!




A few minor nits below that I will fix before committing.


3rdparty/stout/include/stout/os/raw/environment.hpp (line 36)
<https://reviews.apache.org/r/55547/#comment237428>

    I think the capitalization of `win32` should be `Win32`.  That's how it 
appears in the MSDN docs :)



3rdparty/stout/include/stout/os/raw/environment.hpp (line 82)
<https://reviews.apache.org/r/55547/#comment237429>

    Even if the condition is `ifndef`, we don't add an exclamation in the 
comment.  The only exception is if we have a block like:
    ```
    #if !defined(__WINDOWS__) || defined(__linux__)
    ```
    
    In that case, the ending comment would be:
    ```
    #endif // !__WINDOWS || __linux__
    ```



3rdparty/stout/include/stout/os/raw/environment.hpp (line 104)
<https://reviews.apache.org/r/55547/#comment237430>

    Similar here.



3rdparty/stout/include/stout/os/windows/environment.hpp (line 24)
<https://reviews.apache.org/r/55547/#comment237432>

    For code-reading sanity, I'm going to add this comment block:
    ```
      // NOTE: The `GetEnvironmentStrings` call returns a pointer to a 
      // read-only block of memory with the following format (minus newlines):
      // Var1=Value1\0
      // Var2=Value2\0
      // Var3=Value3\0
      // ...
      // VarN=ValueN\0\0
    ```



3rdparty/stout/include/stout/os/windows/environment.hpp (line 28)
<https://reviews.apache.org/r/55547/#comment237431>

    Missing space after the `for`



3rdparty/stout/include/stout/os/windows/environment.hpp (line 30)
<https://reviews.apache.org/r/55547/#comment237433>

    For code-reading sanity:
    
    // Increment past the current environment string and null terminator.


- Joseph Wu


On Feb. 14, 2017, 10:47 a.m., Alex Clemmer wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/55547/
> -----------------------------------------------------------
> 
> (Updated Feb. 14, 2017, 10:47 a.m.)
> 
> 
> Review request for mesos, Andrew Schwartzmeyer, Daniel Pravat, and Joseph Wu.
> 
> 
> Bugs: MESOS-5880
>     https://issues.apache.org/jira/browse/MESOS-5880
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> Windows currently exposes two APIs for managing a process's environment
> variables: a CRT API, and a win32 API. This commit will transition Stout
> to use only the win32 API, and retire its use of the CRT APIs.
> 
> There are many reasons for this, for example:
> 
> * Stout currently uses both the CRT and win32 APIs, but they are
>   incompatible, and this causes real bugs. For example, because
>   `os::setenv` uses the win32 API, but `os::environment` uses the CRT
>   API, it is possible to set an environment variable and then later not
>   see it reflected in the environment. In Mesos this causes many bugs,
>   such as when we expect to set `LIBPROCESS_PORT` in a parent, then
>   spawn a health checker, this port doesn't get picked up.
> * The CRT API is very old, and essentially unmaintained. It should not
>   be used unless it is necessary.
> * It is generally easier to mirror the most common POSIX semantics of
>   environment APIs with the win32 API than it is with the CRT API. For
>   example, the Windows CRT implementation of `setenv` will delete an
>   environment variable if you pass an empty string as value, instead of
>   setting the value to be an empty string, like most modern POSIX
>   implementations. On the other hand, the win32 equivalent,
>   `SetEnvironmentVariable`, does implement this behavior.
> 
> The effort to standardize the Windows code paths essentially involves
> two things:
> 
> (1) Removing `os::raw::environment` from Stout's Windows API.
> 
> `os::raw::environment` is not used by the Windows codepaths, and (for
> reasons above) we want to avoid is accidental use of `environ` on
> Windows in the future, as well.
> 
> While it is possible to simply implement `os::raw::environment` using
> the win32 API `GetEnvironmentStrings`, these return fundamentally
> different types, so the allocation logic would become more complex, and
> the semantics of the function would have to change. Either the user
> would have to allocate a `char**` for the environment, or Stout would
> have to manage a `static char**`, or the function would have to allocate
> memory for the user to `free`. All of these are at odds with the POSIX
> semantics, and since this API is only used on POSIX paths, there is no
> real advantage in this line of inquiry.
> 
> (2) Splitting up the implementation of `os::environment`.
> 
> The POSIX `environ` and Windows `GetEnvironmentStrings` are
> fundamentally different types, and require mostly different processing
> logic to transform them to a `hashmap`. There is no real advantage in
> convoluting this processing code to keep the code common between them.
> 
> 
> Diffs
> -----
> 
>   3rdparty/stout/include/Makefile.am 4bde2ef3f466ed91c6922b330f07f5d425398751 
>   3rdparty/stout/include/stout/os/environment.hpp 
> d8c34999829257bee80b0678f2ee096f4798c62b 
>   3rdparty/stout/include/stout/os/posix/environment.hpp PRE-CREATION 
>   3rdparty/stout/include/stout/os/raw/environment.hpp 
> b3e82ac8071b41748aeb098b7d5fcc210a1d3c43 
>   3rdparty/stout/include/stout/os/windows/environment.hpp PRE-CREATION 
>   3rdparty/stout/tests/os_tests.cpp fc359159afcdb60e4406821e123b6358320b6df8 
> 
> Diff: https://reviews.apache.org/r/55547/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Alex Clemmer
> 
>

Reply via email to