Add KBOOT.
This commit is contained in:
78
apps/elftosb/common/format_string.cpp
Normal file
78
apps/elftosb/common/format_string.cpp
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* File: format_string.cpp
|
||||
*
|
||||
* Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
|
||||
* See included license file for license details.
|
||||
*/
|
||||
|
||||
#include "format_string.h"
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdexcept>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
//! Size of the temporary buffer to hold the formatted output string.
|
||||
#define WIN32_FMT_BUF_LEN (512)
|
||||
|
||||
/*!
|
||||
* \brief Simple template class to free a pointer.
|
||||
*/
|
||||
template <typename T>
|
||||
class free_ptr
|
||||
{
|
||||
public:
|
||||
//! \brief Constructor.
|
||||
free_ptr(T ptr)
|
||||
: m_p(ptr)
|
||||
{
|
||||
}
|
||||
|
||||
//! \brief Destructor.
|
||||
~free_ptr()
|
||||
{
|
||||
if (m_p)
|
||||
{
|
||||
free(m_p);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
T m_p; //!< The value to free.
|
||||
};
|
||||
|
||||
//! The purpose of this function to provide a convenient way of generating formatted
|
||||
//! STL strings inline. This is especially useful when throwing exceptions that take
|
||||
//! a std::string for a message. The length of the formatted output string is limited
|
||||
//! only by memory. Memory temporarily allocated for the output string is disposed of
|
||||
//! before returning.
|
||||
//!
|
||||
//! Example usage:
|
||||
//! \code
|
||||
//! throw std::runtime_error(format_string("error on line %d", line));
|
||||
//! \endcode
|
||||
//!
|
||||
//! \param fmt Format string using printf-style format markers.
|
||||
//! \return An STL string object of the formatted output.
|
||||
std::string format_string(const char *fmt, ...)
|
||||
{
|
||||
char *buf = 0;
|
||||
va_list vargs;
|
||||
va_start(vargs, fmt);
|
||||
int result = -1;
|
||||
#if WIN32
|
||||
buf = (char *)malloc(WIN32_FMT_BUF_LEN);
|
||||
if (buf)
|
||||
{
|
||||
result = _vsnprintf(buf, WIN32_FMT_BUF_LEN, fmt, vargs);
|
||||
}
|
||||
#else // WIN32
|
||||
result = vasprintf(&buf, fmt, vargs);
|
||||
#endif // WIN32
|
||||
va_end(vargs);
|
||||
if (result != -1 && buf)
|
||||
{
|
||||
free_ptr<char *> freebuf(buf);
|
||||
return std::string(buf);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
Reference in New Issue
Block a user