Official read only mirror of the smartmontools project SVN
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
2.8 KiB

* smartctl.h
* Home page of code is:
* Copyright (C) 2002-10 Bruce Allen
* Copyright (C) 2008-21 Christian Franke
* Copyright (C) 2000 Michael Cornwell <>
* SPDX-License-Identifier: GPL-2.0-or-later
#ifndef SMARTCTL_H_
#define SMARTCTL_H_
#define SMARTCTL_H_CVSID "$Id$\n"
// Return codes (bitmask)
// command line did not parse, or internal error occurred in smartctl
#define FAILCMD (0x01<<0)
// device open failed
#define FAILDEV (0x01<<1)
// device is in low power mode and -n option requests to exit
#define FAILPOWER (0x01<<1)
// read device identity (ATA only) failed
#define FAILID (0x01<<1)
// smart command failed, or ATA identify device structure missing information
#define FAILSMART (0x01<<2)
#define FAILSTATUS (0x01<<3)
// Attributes found <= threshold with prefail=1
#define FAILATTR (0x01<<4)
// SMART STATUS returned GOOD but age attributes failed or prefail
// attributes have failed in the past
#define FAILAGE (0x01<<5)
// Device had Errors in the error log
#define FAILERR (0x01<<6)
// Device had Errors in the self-test log
#define FAILLOG (0x01<<7)
// Classes of SMART commands. Here 'mandatory' means "Required by the
// ATA/ATAPI-5 Specification if the device implements the S.M.A.R.T.
// command set." The 'mandatory' S.M.A.R.T. commands are: (1)
// Enable/Disable Attribute Autosave, (2) Enable/Disable S.M.A.R.T.,
// and (3) S.M.A.R.T. Return Status. All others are optional.
enum failure_type {
// Globals to set failuretest() policy
extern bool failuretest_conservative;
extern unsigned char failuretest_permissive;
// Compares failure type to policy in effect, and either exits or
// simply returns to the calling routine.
void failuretest(failure_type type, int returnvalue);
// Globals to control printing
extern bool printing_is_switchable;
extern bool printing_is_off;
// Printing control functions
inline void print_on()
if (printing_is_switchable)
printing_is_off = false;
inline void print_off()
if (printing_is_switchable)
printing_is_off = true;
// The singleton global JSON object
#include "json.h"
extern json jglb;
#include "utility.h" // __attribute_format_printf()
// TODO: move this to a new include file?
// Version of pout() for items already included in JSON output
void jout(const char *fmt, ...)
__attribute_format_printf(1, 2);
// Version of pout() for info/warning/error messages
void jinf(const char *fmt, ...)
__attribute_format_printf(1, 2);
void jwrn(const char *fmt, ...)
__attribute_format_printf(1, 2);
void jerr(const char *fmt, ...)
__attribute_format_printf(1, 2);
// Print smartctl start-up date and time and timezone
void jout_startup_datetime(const char *prefix);