1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CRAZY_LINKER_ERROR_H 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CRAZY_LINKER_ERROR_H 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace crazy { 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// A class used to hold a fixed-size buffer to hold error messages 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// as well as perform assignment and formatting. 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Usage examples: 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Error error; 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// error = "Unimplemented feature"; 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// error->Set("Unimplemented feature"); 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// error->Format("Feature %s is not implemented", feature_name); 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// error->Append(strerror(errno)); 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// error->AppendFormat("Error: %s", strerror(errno)); 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class Error { 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Error() { buff_[0] = '\0'; } 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Error(const char* message) { Set(message); } 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Error(const Error& other) { Set(other.buff_); } 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* c_str() const { return buff_; } 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void Set(const char* message); 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void Format(const char* fmt, ...); 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void Append(const char* message); 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void AppendFormat(const char* fmt, ...); 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) char buff_[512]; 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace crazy 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // CRAZY_LINKER_ERROR_H 46