Skip to content
  • Ed Schouten's avatar
    f4ac884f
    Make the presence of stdin and stdout optional. · f4ac884f
    Ed Schouten authored
    The idea behind Nuxi CloudABI is that it is targeted at (but not limited to)
    running networked services in a sandboxed environment. The model behind stdin,
    stdout and stderr is strongly focused on interactive tools in a command shell.
    CloudABI does not support the notion of stdin and stdout, as 'standard
    input/output' does not apply to services. The concept of stderr does makes
    sense though, as services do need some mechanism to log error messages in a
    uniform way.
    
    This patch extends libc++ in such a way that std::cin and std::cout and the
    associated <cstdio>/<cwchar> functions can be disabled through the flags
    _LIBCPP_HAS_NO_STDIN and _LIBCPP_HAS_NO_STDOUT, respectively. At the same time
    it attempts to clean up src/iostream.cpp a bit. Instead of using a single array
    of mbstate_t objects and hardcoding the array indices, it creates separate
    objects that declared next to the iostream objects and their buffers. The code
    is also restructured by interleaving the construction and setup of c* and wc*
    objects. That way it is more obvious that this is done identically.
    
    The c* and wc* objects already have separate unit tests. Make use of this fact
    by adding XFAILs in case libcpp-has-no-std* is set. That way the tests work in
    both directions. If stdin or stdout is disabled, these tests will therefore
    test for the absence of c* and wc*.
    
    Differential Revision:	http://reviews.llvm.org/D8340
    
    llvm-svn: 233275
    f4ac884f
    Make the presence of stdin and stdout optional.
    Ed Schouten authored
    The idea behind Nuxi CloudABI is that it is targeted at (but not limited to)
    running networked services in a sandboxed environment. The model behind stdin,
    stdout and stderr is strongly focused on interactive tools in a command shell.
    CloudABI does not support the notion of stdin and stdout, as 'standard
    input/output' does not apply to services. The concept of stderr does makes
    sense though, as services do need some mechanism to log error messages in a
    uniform way.
    
    This patch extends libc++ in such a way that std::cin and std::cout and the
    associated <cstdio>/<cwchar> functions can be disabled through the flags
    _LIBCPP_HAS_NO_STDIN and _LIBCPP_HAS_NO_STDOUT, respectively. At the same time
    it attempts to clean up src/iostream.cpp a bit. Instead of using a single array
    of mbstate_t objects and hardcoding the array indices, it creates separate
    objects that declared next to the iostream objects and their buffers. The code
    is also restructured by interleaving the construction and setup of c* and wc*
    objects. That way it is more obvious that this is done identically.
    
    The c* and wc* objects already have separate unit tests. Make use of this fact
    by adding XFAILs in case libcpp-has-no-std* is set. That way the tests work in
    both directions. If stdin or stdout is disabled, these tests will therefore
    test for the absence of c* and wc*.
    
    Differential Revision:	http://reviews.llvm.org/D8340
    
    llvm-svn: 233275
Loading