version 1.1.1.1, 2012/02/21 16:32:16
|
version 1.1.1.2, 2012/10/09 09:36:45
|
Line 4
|
Line 4
|
* Home page of code is: http://smartmontools.sourceforge.net |
* Home page of code is: http://smartmontools.sourceforge.net |
* |
* |
* Copyright (C) 2002-11 Bruce Allen <smartmontools-support@lists.sourceforge.net> |
* Copyright (C) 2002-11 Bruce Allen <smartmontools-support@lists.sourceforge.net> |
* Copyright (C) 2008-11 Christian Franke <smartmontools-support@lists.sourceforge.net> | * Copyright (C) 2008-12 Christian Franke <smartmontools-support@lists.sourceforge.net> |
* Copyright (C) 2000 Michael Cornwell <cornwell@acm.org> |
* Copyright (C) 2000 Michael Cornwell <cornwell@acm.org> |
* |
* |
* This program is free software; you can redistribute it and/or modify |
* This program is free software; you can redistribute it and/or modify |
Line 36
|
Line 36
|
#include <string.h> |
#include <string.h> |
#include <string> |
#include <string> |
|
|
#if !defined(__GNUC__) && !defined(__attribute__) | #ifndef __GNUC__ |
#define __attribute__(x) /**/ | #define __attribute_format_printf(x, y) /**/ |
| #elif defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO |
| // Check format of __mingw_*printf() instead of MSVCRT.DLL:*printf() |
| #define __attribute_format_printf(x, y) __attribute__((format (gnu_printf, x, y))) |
| #define HAVE_WORKING_SNPRINTF 1 |
| #else |
| #define __attribute_format_printf(x, y) __attribute__((format (printf, x, y))) |
#endif |
#endif |
|
|
// Make version information string |
// Make version information string |
Line 45 std::string format_version_info(const char * prog_name
|
Line 51 std::string format_version_info(const char * prog_name
|
|
|
// return (v)sprintf() formated std::string |
// return (v)sprintf() formated std::string |
std::string strprintf(const char * fmt, ...) |
std::string strprintf(const char * fmt, ...) |
__attribute__ ((format (printf, 1, 2))); | __attribute_format_printf(1, 2); |
std::string vstrprintf(const char * fmt, va_list ap); |
std::string vstrprintf(const char * fmt, va_list ap); |
|
|
|
// Return true if STR starts with PREFIX |
|
inline bool str_starts_with(const char * str, const char * prefix) |
|
{ return !strncmp(str, prefix, strlen(prefix)); } |
|
|
|
inline bool str_starts_with(const std::string & str, const char * prefix) |
|
{ return !strncmp(str.c_str(), prefix, strlen(prefix)); } |
|
|
#ifndef HAVE_WORKING_SNPRINTF |
#ifndef HAVE_WORKING_SNPRINTF |
// Substitute by safe replacement functions |
// Substitute by safe replacement functions |
int safe_snprintf(char *buf, int size, const char *fmt, ...) |
int safe_snprintf(char *buf, int size, const char *fmt, ...) |
__attribute__ ((format (printf, 3, 4))); | __attribute_format_printf(3, 4); |
int safe_vsnprintf(char *buf, int size, const char *fmt, va_list ap); |
int safe_vsnprintf(char *buf, int size, const char *fmt, va_list ap); |
#define snprintf safe_snprintf |
#define snprintf safe_snprintf |
#define vsnprintf safe_vsnprintf |
#define vsnprintf safe_vsnprintf |
Line 75 void dateandtimezoneepoch(char *buffer, time_t tval);
|
Line 88 void dateandtimezoneepoch(char *buffer, time_t tval);
|
// itself is defined differently in smartctl and smartd. So the |
// itself is defined differently in smartctl and smartd. So the |
// function definition(s) are in smartd.c and in smartctl.c. |
// function definition(s) are in smartd.c and in smartctl.c. |
void pout(const char *fmt, ...) |
void pout(const char *fmt, ...) |
__attribute__ ((format (printf, 1, 2))); | __attribute_format_printf(1, 2); |
|
|
// replacement for perror() with redirected output. |
// replacement for perror() with redirected output. |
void syserror(const char *message); |
void syserror(const char *message); |