random.cpp revision 241903
1227825Stheraven//===-------------------------- random.cpp --------------------------------===// 2227825Stheraven// 3227825Stheraven// The LLVM Compiler Infrastructure 4227825Stheraven// 5227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open 6227825Stheraven// Source Licenses. See LICENSE.TXT for details. 7227825Stheraven// 8227825Stheraven//===----------------------------------------------------------------------===// 9227825Stheraven 10227825Stheraven#include "random" 11227825Stheraven#include "system_error" 12227825Stheraven 13232950Stheraven#ifdef __sun__ 14232950Stheraven#define rename solaris_headers_are_broken 15232950Stheraven#endif 16227825Stheraven#include <fcntl.h> 17227825Stheraven#include <unistd.h> 18227825Stheraven#include <errno.h> 19227825Stheraven 20227825Stheraven_LIBCPP_BEGIN_NAMESPACE_STD 21227825Stheraven 22227825Stheravenrandom_device::random_device(const string& __token) 23227825Stheraven : __f_(open(__token.c_str(), O_RDONLY)) 24227825Stheraven{ 25227825Stheraven if (__f_ <= 0) 26227825Stheraven __throw_system_error(errno, ("random_device failed to open " + __token).c_str()); 27227825Stheraven} 28227825Stheraven 29227825Stheravenrandom_device::~random_device() 30227825Stheraven{ 31227825Stheraven close(__f_); 32227825Stheraven} 33227825Stheraven 34227825Stheravenunsigned 35227825Stheravenrandom_device::operator()() 36227825Stheraven{ 37227825Stheraven unsigned r; 38227825Stheraven read(__f_, &r, sizeof(r)); 39227825Stheraven return r; 40227825Stheraven} 41227825Stheraven 42227825Stheravendouble 43241903Sdimrandom_device::entropy() const _NOEXCEPT 44227825Stheraven{ 45227825Stheraven return 0; 46227825Stheraven} 47227825Stheraven 48227825Stheraven_LIBCPP_END_NAMESPACE_STD 49