LTP GCOV extension - code coverage report
Current view: | directory - usr/include/apt-pkg - error.h
Test: | lcov.info
Date: | 2008-08-14 |  | Instrumented lines: | 2
Code covered: | 50.0 % |  | Executed lines: | 1

           1                 : // -*- mode: cpp; mode: fold -*-
           2                 : // Description                                                          /*{{{*/
           3                 : // $Id: error.h,v 1.8 2001/05/07 05:06:52 jgg Exp $
           4                 : /* ######################################################################
           5                 :
           6                 :    Global Erorr Class - Global error mechanism
           7                 :
           8                 :    This class has a single global instance. When a function needs to
           9                 :    generate an error condition, such as a read error, it calls a member
          10                 :    in this class to add the error to a stack of errors.
          11                 :
          12                 :    By using a stack the problem with a scheme like errno is removed and
          13                 :    it allows a very detailed account of what went wrong to be transmitted
          14                 :    to the UI for display. (Errno has problems because each function sets
          15                 :    errno to 0 if it didn't have an error thus eraseing erno in the process
          16                 :    of cleanup)
          17                 :
          18                 :    Several predefined error generators are provided to handle common
          19                 :    things like errno. The general idea is that all methods return a bool.
          20                 :    If the bool is true then things are OK, if it is false then things
          21                 :    should start being undone and the stack should unwind under program
          22                 :    control.
          23                 :
          24                 :    A Warning should not force the return of false. Things did not fail, but
          25                 :    they might have had unexpected problems. Errors are stored in a FIFO
          26                 :    so Pop will return the first item..
          27                 :
          28                 :    I have some thoughts about extending this into a more general UI<->
          29                 :    Engine interface, ie allowing the Engine to say 'The disk is full' in
          30                 :    a dialog that says 'Panic' and 'Retry'.. The error generator functions
          31                 :    like errno, Warning and Error return false always so this is normal:
          32                 :      if (open(..))
          33                 :         return _error->Errno(..);
          34                 :
          35                 :    This source is placed in the Public Domain, do with it what you will
          36                 :    It was originally written by Jason Gunthorpe.
          37                 :
          38                 :    ##################################################################### */
          39                 :                                                                         /*}}}*/
          40                 : #ifndef PKGLIB_ERROR_H
          41                 : #define PKGLIB_ERROR_H
          42                 :
          43                 :
          44                 :
          45                 : #ifdef __GNUG__
          46                 : // Methods have a hidden this parameter that is visible to this attribute
          47                 : #define APT_MFORMAT1 __attribute__ ((format (printf, 2, 3)))
          48                 : #define APT_MFORMAT2 __attribute__ ((format (printf, 3, 4)))
          49                 : #else
          50                 : #define APT_MFORMAT1
          51                 : #define APT_MFORMAT2
          52                 : #endif
          53                 :
          54                 : #include <string>
          55                 :
          56                 : using std::string;
          57                 :
          58                 : class GlobalError
          59                 : {
          60                 :    struct Item
          61                 :    {
          62                 :       string Text;
          63                 :       bool Error;
          64                 :       Item *Next;
          65                 :    };
          66                 :
          67                 :    Item *List;
          68                 :    bool PendingFlag;
          69                 :    void Insert(Item *I);
          70                 :
          71                 :    public:
          72                 :
          73                 :    // Call to generate an error from a library call.
          74                 :    bool Errno(const char *Function,const char *Description,...) APT_MFORMAT2;
          75                 :    bool WarningE(const char *Function,const char *Description,...) APT_MFORMAT2;
          76                 :
          77                 :    /* A warning should be considered less severe than an error, and may be
          78                 :       ignored by the client. */
          79                 :    bool Error(const char *Description,...) APT_MFORMAT1;
          80                 :    bool Warning(const char *Description,...) APT_MFORMAT1;
          81                 :
          82                 :    // Simple accessors
          83               3 :    inline bool PendingError() {return PendingFlag;};
          84               0 :    inline bool empty() {return List == 0;};
          85                 :    bool PopMessage(string &Text);
          86                 :    void Discard();
          87                 :
          88                 :    // Usefull routine to dump to cerr
          89                 :    void DumpErrors();
          90                 :
          91                 :    GlobalError();
          92                 : };
          93                 :
          94                 : // The 'extra-ansi' syntax is used to help with collisions.
          95                 : GlobalError *_GetErrorObj();
          96                 : #define _error _GetErrorObj()
          97                 :
          98                 : #undef APT_MFORMAT1
          99                 : #undef APT_MFORMAT2
         100                 :
         101                 : #endif

Generated by: LTP GCOV extension version 1.6