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