"Fossies" - the Fresh Open Source Software Archive

Member "xorriso-1.5.4/libburn/libdax_msgs.h" (30 Jan 2021, 35460 Bytes) of package /linux/misc/xorriso-1.5.4.pl02.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "libdax_msgs.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 1.5.2_vs_1.5.4.

    1 
    2 /* libdax_msgs
    3    Message handling facility of libburn and libisofs.
    4    Copyright (C) 2006-2016 Thomas Schmitt <scdbackup@gmx.net>,
    5    provided under GPL version 2 or later.
    6 */
    7 
    8 
    9 /*
   10   *Never* set this macro outside libdax_msgs.c !
   11   The entrails of the message handling facility are not to be seen by
   12   the other library components or the applications.
   13 */
   14 #ifdef LIBDAX_MSGS_H_INTERNAL
   15 
   16 
   17 #ifndef LIBDAX_MSGS_SINGLE_THREADED
   18 #include <pthread.h>
   19 #endif
   20 
   21 
   22 struct libdax_msgs_item {
   23 
   24  double timestamp;
   25  pid_t process_id;
   26  int origin;
   27 
   28  int severity;
   29  int priority;
   30 
   31  /* Apply for your developer's error code range at
   32       libburn-hackers@pykix.org
   33     Report introduced codes in the list below. */
   34  int error_code;
   35 
   36  char *msg_text;
   37  int os_errno;
   38   
   39  struct libdax_msgs_item *prev,*next;
   40 
   41 };
   42 
   43 
   44 struct libdax_msgs {
   45 
   46  int refcount;
   47 
   48  struct libdax_msgs_item *oldest;
   49  struct libdax_msgs_item *youngest;
   50  int count;
   51 
   52  int queue_severity;
   53  int print_severity;
   54  char print_id[81];
   55  
   56 #ifndef LIBDAX_MSGS_SINGLE_THREADED
   57  pthread_mutex_t lock_mutex;
   58 #endif
   59 
   60 
   61 };
   62 
   63 #endif /* LIBDAX_MSGS_H_INTERNAL */
   64 
   65 
   66 #ifndef LIBDAX_MSGS_H_INCLUDED
   67 #define LIBDAX_MSGS_H_INCLUDED 1
   68 
   69 
   70 #ifndef LIBDAX_MSGS_H_INTERNAL
   71 
   72 
   73                           /* Architectural aspects */
   74 /* 
   75   libdax_msgs is designed to serve in libraries which want to offer their
   76   applications a way to control the output of library messages. It shall be
   77   incorporated by an owner, i.e. a software entity which encloses the code
   78   of the .c file.
   79 
   80   Owner of libdax_msgs is libburn. A fully compatible variant named libiso_msgs
   81   is owned by libisofs and can get generated by a script of the libburn
   82   project: libburn/libdax_msgs_to_xyz_msgs.sh .
   83 
   84   Reason: One cannot link two owners of the same variant together because
   85   both would offer the same functions to the linker. For that situation one
   86   has to create a compatible variant as it is done for libisofs.
   87 
   88   Compatible variants may get plugged together by call combinations like
   89     burn_set_messenger(iso_get_messenger());
   90   A new variant would demand a _set_messenger() function if it has to work
   91   with libisofs. If only libburn is planned as link partner then a simple
   92   _get_messenger() does suffice.
   93   Take care to shutdown libburn before its provider of the *_msgs object
   94   gets shut down.
   95 
   96 */
   97 
   98                           /* Public Opaque Handles */
   99 
  100 /** A pointer to this is a opaque handle to a message handling facility */
  101 struct libdax_msgs;
  102 
  103 /** A pointer to this is a opaque handle to a single message item */
  104 struct libdax_msgs_item;
  105 
  106 #endif /* ! LIBDAX_MSGS_H_INTERNAL */
  107 
  108 
  109                             /* Public Macros */
  110 
  111 
  112 /* Registered Severities */
  113 
  114 /* It is well advisable to let applications select severities via strings and
  115    forwarded functions libdax_msgs__text_to_sev(), libdax_msgs__sev_to_text().
  116    These macros are for use by the owner of libdax_msgs.
  117 */
  118 
  119 /** Use this to get messages of any severity. Do not use for submitting.
  120 */
  121 #define LIBDAX_MSGS_SEV_ALL                                          0x00000000
  122 
  123 
  124 /** Messages of this severity shall transport plain disk file paths
  125     whenever an event of severity SORRY or above is related with an
  126     individual disk file.
  127     No message text shall be added to the file path. The ERRFILE message
  128     shall be issued before the human readable message which carries the
  129     true event severity. That message should contain the file path so it
  130     can be found by strstr(message, path)!=NULL.
  131     The error code shall be the same as with the human readable message.
  132 */ 
  133 #define LIBDAX_MSGS_SEV_ERRFILE                                      0x08000000
  134 
  135 
  136 /** Debugging messages not to be visible to normal users by default
  137 */
  138 #define LIBDAX_MSGS_SEV_DEBUG                                        0x10000000
  139 
  140 /** Update of a progress report about long running actions
  141 */
  142 #define LIBDAX_MSGS_SEV_UPDATE                                       0x20000000
  143 
  144 /** Not so usual events which were gracefully handled
  145 */
  146 #define LIBDAX_MSGS_SEV_NOTE                                         0x30000000
  147 
  148 /** Possibilities to achieve a better result
  149 */
  150 #define LIBDAX_MSGS_SEV_HINT                                         0x40000000
  151 
  152 /** Warnings about problems which could not be handled optimally
  153 */
  154 #define LIBDAX_MSGS_SEV_WARNING                                      0x50000000
  155 
  156 
  157 /** Non-fatal error messages indicating that parts of an action failed but
  158     processing may go on if one accepts deviations from the desired result.
  159 
  160     SORRY may also be the severity for incidents which are severe enough
  161     for FAILURE but happen within already started irrevocable actions,
  162     like ISO image generation. A precondition for such a severity ease is
  163     that the action can be continued after the incident.
  164     See below MISHAP for what xorriso would need instead of this kind of SORRY
  165     and generates for itself in case of libisofs image generation.
  166 
  167     E.g.: A pattern yields no result.
  168           A speed setting cannot be made.
  169           A libisofs input file is inaccessible during image generation.
  170 
  171     After SORRY a function should try to go on if that makes any sense
  172     and if no threshold prescribes abort on SORRY. The function should
  173     nevertheless indicate some failure in its return value. 
  174     It should - but it does not have to.
  175 */
  176 #define LIBDAX_MSGS_SEV_SORRY                                        0x60000000
  177 
  178 
  179 /** A FAILURE (see below) which can be tolerated during long lasting
  180     operations just because they cannot simply be stopped or revoked.
  181 
  182     xorriso converts libisofs SORRY messages issued during image generation
  183     into MISHAP messages in order to allow its evaluators to distinguish
  184     image generation problems from minor image composition problems.
  185     E.g.:
  186       A libisofs input file is inaccessible during image generation.
  187 
  188     After a MISHAP a function should behave like after SORRY.
  189 */
  190 #define LIBDAX_MSGS_SEV_MISHAP                                       0x64000000
  191 
  192 
  193 /** Non-fatal error indicating that an important part of an action failed and
  194     that only a new setup of preconditions will give hope for sufficient
  195     success.
  196 
  197     E.g.: No media is inserted in the output drive.
  198           No write mode can be found for inserted media.
  199           A libisofs input file is inaccessible during grafting.
  200 
  201     After FAILURE a function should end with a return value indicating failure.
  202     It is at the discretion of the function whether it ends immediately in any
  203     case or whether it tries to go on if the eventual threshold allows.
  204 */
  205 #define LIBDAX_MSGS_SEV_FAILURE                                      0x68000000
  206 
  207 
  208 /** An error message which puts the whole operation of the program in question
  209 
  210     E.g.: Not enough memory for essential temporary objects.
  211           Irregular errors from resources.
  212           Programming errors (soft assert).
  213 
  214     After FATAL a function should end very soon with a return value
  215     indicating severe failure.
  216 */
  217 #define LIBDAX_MSGS_SEV_FATAL                                        0x70000000
  218 
  219 
  220 /** A message from an abort handler which will finally finish libburn
  221 */
  222 #define LIBDAX_MSGS_SEV_ABORT                                        0x71000000
  223 
  224 /** A severity to exclude resp. discard any possible message.
  225     Do not use this severity for submitting.
  226 */
  227 #define LIBDAX_MSGS_SEV_NEVER                                        0x7fffffff
  228 
  229 
  230 /* Registered Priorities */
  231 
  232 /* Priorities are to be selected by the programmers and not by the user. */
  233 
  234 #define LIBDAX_MSGS_PRIO_ZERO                                        0x00000000 
  235 #define LIBDAX_MSGS_PRIO_LOW                                         0x10000000 
  236 #define LIBDAX_MSGS_PRIO_MEDIUM                                      0x20000000
  237 #define LIBDAX_MSGS_PRIO_HIGH                                        0x30000000
  238 #define LIBDAX_MSGS_PRIO_TOP                                         0x7ffffffe
  239 
  240 /* Do not use this priority for submitting */
  241 #define LIBDAX_MSGS_PRIO_NEVER                                       0x7fffffff
  242 
  243 
  244 /* Origin numbers of libburn drives may range from 0 to 1048575 */
  245 #define LIBDAX_MSGS_ORIGIN_DRIVE_BASE          0
  246 #define LIBDAX_MSGS_ORIGIN_DRIVE_TOP     0xfffff
  247 
  248 /* Origin numbers of libisofs images may range from 1048575 to 2097152 */
  249 #define LIBDAX_MSGS_ORIGIN_IMAGE_BASE   0x100000
  250 #define LIBDAX_MSGS_ORIGIN_IMAGE_TOP    0x1fffff
  251 
  252 
  253 
  254                             /* Public Functions */
  255 
  256        /* Calls initiated from inside the direct owner (e.g. from libburn) */
  257 
  258 
  259 /** Create new empty message handling facility with queue and issue a first
  260     official reference to it.
  261     @param flag Bitfield for control purposes (unused yet, submit 0)
  262     @return >0 success, <=0 failure
  263 */
  264 int libdax_msgs_new(struct libdax_msgs **m, int flag);
  265 
  266 
  267 /** Destroy a message handling facility and all its eventual messages.
  268     The submitted pointer gets set to NULL.
  269     Actually only the last destroy call of all official references to the
  270     object will really dispose it. All others just decrement the reference
  271     counter.
  272     Call this function only with official reference pointers obtained by
  273     libdax_msgs_new() or libdax_msgs_refer(), and only once per such pointer.
  274     @param flag Bitfield for control purposes (unused yet, submit 0)
  275     @return 1 for success, 0 for pointer to NULL, -1 for fatal error
  276 */
  277 int libdax_msgs_destroy(struct libdax_msgs **m, int flag);
  278 
  279 
  280 /** Create an official reference to an existing libdax_msgs object. The
  281     references keep the object alive at least until it is released by
  282     a matching number of destroy calls. So each reference MUST be revoked
  283     by exactly one call to libdax_msgs_destroy().
  284     @param pt The pointer to be set and registered
  285     @param m  A pointer to the existing object
  286     @param flag Bitfield for control purposes (unused yet, submit 0)
  287     @return 1 for success, 0 for failure
  288 */
  289 int libdax_msgs_refer(struct libdax_msgs **pt, struct libdax_msgs *o, int flag);
  290 
  291 
  292 /** Submit a message to a message handling facility.
  293     @param origin  program specific identification number of the originator of
  294                    a message. E.g. drive number. Programs should have an own
  295                    range of origin numbers. See above LIBDAX_MSGS_ORIGIN_*_BASE
  296                    Use -1 if no number is known.
  297     @param error_code  Unique error code. Use only registered codes. See below.
  298                    The same unique error_code may be issued at different
  299                    occasions but those should be equivalent out of the view
  300                    of a libdax_msgs application. (E.g. "cannot open ATA drive"
  301                    versus "cannot open SCSI drive" would be equivalent.)
  302     @param severity The LIBDAX_MSGS_SEV_* of the event.
  303     @param priority The LIBDAX_MSGS_PRIO_* number of the event.
  304     @param msg_text Printable and human readable message text.
  305     @param os_errno Eventual error code from operating system (0 if none)
  306     @param flag Bitfield for control purposes
  307                     bit0= If direct output to stderr:
  308                           CarriageReturn rather than LineFeed
  309     @return 1 on success, 0 on rejection, <0 for severe errors
  310 */
  311 int libdax_msgs_submit(struct libdax_msgs *m, int origin, int error_code,
  312                        int severity, int priority, char *msg_text, 
  313                        int os_errno, int flag);
  314 
  315 
  316 
  317      /* Calls from applications (to be forwarded by direct owner) */
  318 
  319 
  320 /** Convert a registered severity number into a severity name
  321     @param flag Bitfield for control purposes:
  322       bit0= list all severity names in a blank separated string
  323     @return >0 success, <=0 failure
  324 */
  325 int libdax_msgs__sev_to_text(int severity, char **severity_name,
  326                              int flag);
  327 
  328 
  329 /** Convert a severity name into a severity number,
  330     @param flag Bitfield for control purposes (unused yet, submit 0)
  331     @return >0 success, <=0 failure
  332 */
  333 int libdax_msgs__text_to_sev(char *severity_name, int *severity,
  334                              int flag);
  335 
  336 
  337 /** Set minimum severity for messages to be queued (default
  338     LIBDAX_MSGS_SEV_ALL) and for messages to be printed directly to stderr
  339     (default LIBDAX_MSGS_SEV_NEVER).
  340     @param print_id A text of at most 80 characters to be printed before
  341                     any eventually printed message (default is "libdax: ").
  342     @param flag Bitfield for control purposes (unused yet, submit 0)
  343     @return always 1 for now
  344 */
  345 int libdax_msgs_set_severities(struct libdax_msgs *m, int queue_severity,
  346                                int print_severity, char *print_id, int flag);
  347 
  348 
  349 /** Obtain a message item that has at least the given severity and priority.
  350     Usually all older messages of lower severity are discarded then. If no
  351     item of sufficient severity was found, all others are discarded from the
  352     queue.
  353     @param flag Bitfield for control purposes (unused yet, submit 0)
  354     @return 1 if a matching item was found, 0 if not, <0 for severe errors
  355 */
  356 int libdax_msgs_obtain(struct libdax_msgs *m, struct libdax_msgs_item **item,
  357                        int severity, int priority, int flag);
  358 
  359 
  360 /** Destroy a message item obtained by libdax_msgs_obtain(). The submitted
  361     pointer gets set to NULL.
  362     Caution: Copy eventually obtained msg_text before destroying the item,
  363              if you want to use it further.
  364     @param flag Bitfield for control purposes (unused yet, submit 0)
  365     @return 1 for success, 0 for pointer to NULL, <0 for severe errors
  366 */
  367 int libdax_msgs_destroy_item(struct libdax_msgs *m,
  368                              struct libdax_msgs_item **item, int flag);
  369 
  370 
  371 /** Obtain from a message item the three application oriented components as
  372     submitted with the originating call of libdax_msgs_submit().
  373     Caution: msg_text becomes a pointer into item, not a copy.
  374     @param flag Bitfield for control purposes (unused yet, submit 0)
  375     @return 1 on success, 0 on invalid item, <0 for servere errors
  376 */
  377 int libdax_msgs_item_get_msg(struct libdax_msgs_item *item, 
  378                              int *error_code, char **msg_text, int *os_errno,
  379                              int flag);
  380 
  381 
  382 /** Obtain from a message item the submitter identification submitted
  383     with the originating call of libdax_msgs_submit().
  384     @param flag Bitfield for control purposes (unused yet, submit 0)
  385     @return 1 on success, 0 on invalid item, <0 for servere errors
  386 */
  387 int libdax_msgs_item_get_origin(struct libdax_msgs_item *item, 
  388                             double *timestamp, pid_t *process_id, int *origin,
  389                             int flag);
  390 
  391 
  392 /** Obtain from a message item severity and priority as submitted
  393     with the originating call of libdax_msgs_submit().
  394     @param flag Bitfield for control purposes (unused yet, submit 0)
  395     @return 1 on success, 0 on invalid item, <0 for servere errors
  396 */
  397 int libdax_msgs_item_get_rank(struct libdax_msgs_item *item, 
  398                               int *severity, int *priority, int flag);
  399 
  400 
  401 #ifdef LIBDAX_MSGS_________________
  402 
  403 
  404                       /* Registered Error Codes */
  405 
  406 
  407 Format: error_code  (LIBDAX_MSGS_SEV_*,LIBDAX_MSGS_PRIO_*) = explanation
  408 If no severity or priority are fixely associated, use "(,)".
  409 
  410 ------------------------------------------------------------------------------
  411 Range "libdax_msgs"        :  0x00000000 to 0x0000ffff
  412 
  413  0x00000000 (ALL,ZERO)     = Initial setting in new libdax_msgs_item
  414  0x00000001 (DEBUG,ZERO)   = Test error message
  415  0x00000002 (DEBUG,ZERO)   = Debugging message
  416  0x00000003 (FATAL,HIGH)   = Out of virtual memory
  417  0x00000004 (FATAL,HIGH)   = Generic fatal error
  418 
  419 
  420 ------------------------------------------------------------------------------
  421 Range "elmom"              :  0x00010000 to 0x0001ffff
  422 
  423 
  424 
  425 ------------------------------------------------------------------------------
  426 Range "scdbackup"          :  0x00020000 to 0x0002ffff
  427 
  428  Accessing and defending drives:
  429 
  430  0x00020001 (SORRY,LOW)    = Cannot open busy device
  431  0x00020002 (SORRY,HIGH)   = Encountered error when closing drive
  432  0x00020003 (SORRY,HIGH)   = Could not grab drive
  433  0x00020004 (NOTE,HIGH)    = Opened O_EXCL scsi sibling
  434  0x00020005 (SORRY,HIGH)   = Failed to open device
  435  0x00020006 (FATAL,HIGH)   = Too many scsi siblings
  436  0x00020007 (NOTE,HIGH)    = Closed O_EXCL scsi siblings
  437  0x00020008 (SORRY,HIGH)   = Device busy. Failed to fcntl-lock
  438  0x00020009 (SORRY,HIGH)   = Neither stdio-path nor its directory exist
  439  0x0002000a (FAILURE,HIGH) = Cannot accept '...' as SG_IO CDROM drive
  440  0x0002000b (FAILURE,HIGH) = File object '...' not found
  441  0x0002000c (FAILURE,HIGH) = Cannot start device file enumeration
  442  0x0002000d (FAILURE,HIGH) = Cannot enumerate next device
  443  0x0002000e (NOTE,HIGH)    = Failed to open device during 
  444            
  445  General library operations:
  446 
  447  0x00020101 (WARNING,HIGH) = Cannot find given worker item
  448  0x00020102 (SORRY,HIGH)   = A drive operation is still going on
  449  0x00020103 (WARNING,HIGH) = After scan a drive operation is still going on
  450  0x00020104 (SORRY,HIGH)   = NULL pointer caught
  451  0x00020105 (SORRY,HIGH)   = Drive is already released
  452  0x00020106 (SORRY,HIGH)   = Drive is busy on attempt to close
  453  0x00020107 (WARNING,HIGH) = A drive is still busy on shutdown of library
  454  0x00020108 (SORRY,HIGH)   = Drive is not grabbed on disc status inquiry
  455  0x00020108 (FATAL,HIGH)   = Could not allocate new drive object
  456  0x00020109 (FATAL,HIGH)   = Library not running
  457  0x0002010a (FATAL,HIGH)   = Unsuitable track mode
  458  0x0002010b (FATAL,HIGH)   = Burn run failed
  459  0x0002010c (FATAL,HIGH)   = Failed to transfer command to drive
  460  0x0002010d (DEBUG,HIGH)   = Could not inquire TOC
  461  0x0002010e (FATAL,HIGH)   = Attempt to read ATIP from ungrabbed drive
  462  0x0002010f (DEBUG,HIGH)   = SCSI error condition on command
  463  0x00020110 (FATAL,HIGH)   = Persistent drive address too long
  464  0x00020111 (FATAL,HIGH)   = Could not allocate new auxiliary object
  465  0x00020112 (SORRY,HIGH)   = Bad combination of write_type and block_type
  466  0x00020113 (FATAL,HIGH)   = Drive capabilities not inquired yet
  467  0x00020114 (SORRY,HIGH)   = Attempt to set ISRC with bad data
  468  0x00020115 (SORRY,HIGH)   = Attempt to set track mode to unusable value
  469  0x00020116 (FATAL,HIGH)   = Track mode has unusable value
  470  0x00020117 (FATAL,HIGH)   = toc_entry of drive is already in use
  471  0x00020118 (DEBUG,HIGH)   = Closing track
  472  0x00020119 (DEBUG,HIGH)   = Closing session
  473  0x0002011a (NOTE,HIGH)    = Padding up track to minimum size
  474  0x0002011b (FATAL,HIGH)   = Attempt to read track info from ungrabbed drive
  475  0x0002011c (FATAL,HIGH)   = Attempt to read track info from busy drive
  476  0x0002011d (FATAL,HIGH)   = SCSI error on write
  477  0x0002011e (SORRY,HIGH)   = Unsuitable media detected
  478  0x0002011f (SORRY,HIGH)   = Burning is restricted to a single track
  479  0x00020120 (NOTE,HIGH)    = FORMAT UNIT ignored
  480  0x00020121 (FATAL,HIGH)   = Write preparation setup failed
  481  0x00020122 (FAILURE,HIGH) = SCSI error on format_unit
  482  0x00020123 (SORRY,HIGH)   = DVD Media are unsuitable for desired track type
  483  0x00020124 (SORRY,HIGH)   = SCSI error on set_streaming
  484  0x00020125 (SORRY,HIGH)   = Write start address not supported
  485  0x00020126 (SORRY,HIGH)   = Write start address not properly aligned
  486  0x00020127 (NOTE,HIGH)    = Write start address is ...
  487  0x00020128 (FATAL,HIGH)   = Unsupported inquiry_type with mmc_get_performance
  488  0x00020129 (SORRY,HIGH)   = Will not format media type
  489  0x0002012a (FATAL,HIGH)   = Cannot inquire write mode capabilities
  490  0x0002012b (FATAL,HIGH)   = Drive offers no suitable write mode with this job
  491  0x0002012c (SORRY,HIGH)   = Too many logical tracks recorded
  492  0x0002012d (FATAL,HIGH)   = Exceeding range of permissible write addresses
  493  0x0002012e (NOTE,HIGH)    = Activated track default size
  494  0x0002012f (SORRY,HIGH)   = SAO is restricted to single fixed size session
  495  0x00020130 (SORRY,HIGH)   = Drive and media state unsuitable for blanking
  496  0x00020131 (SORRY,HIGH)   = No suitable formatting type offered by drive
  497  0x00020132 (SORRY,HIGH)   = Selected format is not suitable for libburn
  498  0x00020133 (SORRY,HIGH)   = Cannot mix data and audio in SAO mode
  499  0x00020134 (NOTE,HIGH)    = Defaulted TAO to DAO
  500  0x00020135 (SORRY,HIGH)   = Cannot perform TAO, job unsuitable for DAO
  501  0x00020136 (SORRY,HIGH)   = DAO burning restricted to single fixed size track
  502  0x00020137 (HINT,HIGH)    = TAO would be possible
  503  0x00020138 (FATAL,HIGH)   = Cannot reserve track
  504  0x00020139 (SORRY,HIGH)   = Write job parameters are unsuitable
  505  0x0002013a (FATAL,HIGH)   = No suitable media detected
  506  0x0002013b (DEBUG,HIGH)   = SCSI command indicates host or driver error
  507  0x0002013c (SORRY,HIGH)   = Malformed capabilities page 2Ah received
  508  0x0002013d (DEBUG,LOW)    = Waiting for free buffer space takes long time
  509  0x0002013e (SORRY,HIGH)   = Timeout with waiting for free buffer. Now disabled
  510  0x0002013f (DEBUG,LOW)    = Reporting total time spent with waiting for buffer
  511  0x00020140 (FATAL,HIGH)   = Drive is busy on attempt to write random access
  512  0x00020141 (SORRY,HIGH)   = Write data count not properly aligned
  513  0x00020142 (FATAL,HIGH)   = Drive is not grabbed on random access write
  514  0x00020143 (SORRY,HIGH)   = Read start address not properly aligned
  515  0x00020144 (SORRY,HIGH)   = SCSI error on read
  516  0x00020145 (FATAL,HIGH)   = Drive is busy on attempt to read data
  517  0x00020146 (FATAL,HIGH)   = Drive is a virtual placeholder
  518  0x00020147 (SORRY,HIGH)   = Cannot address start byte
  519  0x00020148 (SORRY,HIGH)   = Cannot write desired amount of data
  520  0x00020149 (SORRY,HIGH)   = Unsuitable filetype for pseudo-drive
  521  0x0002014a (SORRY,HIGH)   = Cannot read desired amount of data
  522  0x0002014b (SORRY,HIGH)   = Drive is already registered resp. scanned
  523  0x0002014c (FATAL,HIGH)   = Emulated drive caught in SCSI function
  524  0x0002014d (SORRY,HIGH)   = Asynchronous SCSI error
  525  0x0002014f (SORRY,HIGH)   = Timeout with asynchronous SCSI command
  526  0x00020150 (DEBUG,LOW)    = Reporting asynchronous waiting time
  527  0x00020151 (FAILURE,HIGH) = Read attempt on write-only drive
  528  0x00020152 (FATAL,HIGH)   = Cannot start fifo thread
  529  0x00020153 (SORRY,HIGH)   = Read error on fifo input
  530  0x00020154 (NOTE,HIGH)    = Forwarded input error ends output
  531  0x00020155 (SORRY,HIGH)   = Desired fifo buffer too large
  532  0x00020156 (SORRY,HIGH)   = Desired fifo buffer too small
  533  0x00020157 (FATAL,HIGH)   = burn_source is not a fifo object
  534  0x00020158 (DEBUG,LOW)    = Reporting thread disposal precautions
  535  0x00020159 (DEBUG,HIGH)   = TOC Format 0 returns inconsistent data
  536  0x0002015a (NOTE,HIGH)    = Could not examine busy device
  537  0x0002015b (HINT,HIGH)    = Busy '...' seems to be a hard disk, as '...1' exists
  538  0x0002015c (FAILURE,HIGH) = Fifo size too small for desired peek buffer
  539  0x0002015d (FAILURE,HIGH) = Fifo input ended short of desired peek buffer size
  540  0x0002015e (FATAL,HIGH)   = Fifo is already under consumption when peeking
  541  0x0002015f (MISHAP,HIGH)  = Damaged CD table-of-content detected and truncated
  542  0x00020160 (WARNING,HIGH) = Session without leadout encountered
  543  0x00020161 (WARNING,HIGH) = Empty session deleted
  544  0x00020162 (SORRY,HIGH)   = BD-R not unformatted blank any more. Cannot format
  545  0x00020163 (NOTE,HIGH)    = Blank BD-R left unformatted for zero spare capacity
  546  0x00020164 (SORRY,HIGH)   = Drive does not format BD-RE without spares
  547  0x00020165 (WARNING,HIGH) = Drive does not support fast formatting
  548  0x00020166 (WARNING,HIGH) = Drive does not support full formatting
  549  0x00020167 (SORRY,HIGH)   = Drive does not support non-default formatting
  550  0x00020168 (FAILURE,HIGH) = Media not properly formatted. Cannot write.
  551  0x00020169 (WARNING,HIGH) = Last session on media is still open
  552  0x0002016a (FAILURE,HIGH) = No MMC transport adapter is present
  553  0x0002016b (WARNING,HIGH) = No MMC transport adapter is present
  554  0x0002016c (DEBUG,HIGH)   = No MMC transport adapter is present
  555  0x0002016e (DEBUG,HIGH)   = MODE SENSE page 2A too short
  556  0x0002016f (DEBUG,HIGH)   = Unable to grab scanned drive
  557  0x00020170 (NOTE,HIGH)    = Closing open session before writing new one
  558  0x00020171 (NOTE,HIGH)    = Closing BD-R with accidentally open session
  559  0x00020172 (SORRY,HIGH)   = Read start address larger than number of readable blocks
  560  0x00020173 (FAILURE,HIGH) = Drive tells NWA smaller than last written address
  561  0x00020174 (SORRY,HIGH)   = Fifo alignment does not allow desired read size
  562  0x00020175 (FATAL,HIGH)   = Supporting library is too old
  563  0x00020176 (NOTE,HIGH)    = Stream recording disabled because of small OS buffer
  564  0x00020177 (ABORT,HIGH)   = Urged drive worker threads to do emergency halt
  565  0x00020178 (DEBUG,HIGH)   = Write thread ended
  566  0x00020179 (FAILURE,HIGH) = Offset source start address is before end of previous source
  567  0x0002017a (FAILURE,HIGH) = Expected offset source object as parameter
  568  0x0002017b (WARNING,HIGH) = Sequential BD-R media likely to soon fail writing
  569  0x0002017c (FAILURE,HIGH) = No valid write type selected
  570  0x0002017d (FATAL,HIGH)   = Invalid file descriptor with stdio pseudo-drive
  571  0x0002017e (FAILURE,HIGH) = Failed to close track, session, or disc
  572  0x0002017f (FAILURE,HIGH) = Failed to synchronize drive cache
  573  0x00020180 (FAILURE,HIGH) = Premature end of input encountered
  574  0x00020181 (FAILURE,HIGH) = Pseudo-drive is a read-only file. Cannot write.
  575  0x00020182 (FAILURE,HIGH) = Cannot truncate disk file for pseudo blanking
  576  0x00020183 (WARNING,HIGH) = Failed to open device (a pseudo-drive) for reading
  577  0x00020184 (WARNING,HIGH) = No Next-Writable-Address
  578  0x00020185 (WARNING,HIGH) = Track damaged, not closed and not writable
  579  0x00020186 (WARNING,HIGH) = Track damaged and not closed
  580  0x00020187 (NOTE,HIGH)    = Track not marked as damaged. No action taken.
  581  0x00020188 (FAILURE,HIGH) = Cannot close damaged track on given media type
  582  0x00020189 (FATAL,HIGH)   = Drive is already grabbed by libburn
  583  0x0002018a (SORRY,HIGH)   = Timeout exceeded. Retry canceled.
  584  0x0002018b (FAILURE,HIGH) = Too many CD-TEXT packs
  585  0x0002018c (FAILURE,HIGH) = CD-TEXT pack type out of range
  586  0x0002018d (FAILURE,HIGH) = CD-TEXT block number out of range
  587  0x0002018e (FAILURE,HIGH) = Too many CD-TEXT packs in block
  588  0x0002018f (FAILURE,HIGH) = CD-TEXT pack CRC mismatch
  589  0x00020190 (WARNING,HIGH) = CD-TEXT pack CRC mismatch had to be corrected
  590  0x00020191 (FAILURE,HIGH) = Unknown parameter in text input file
  591  0x00020192 (FAILURE,HIGH) = Text input file sequence error
  592  0x00020193 (FAILURE,HIGH) = Text input file readability problem
  593  0x00020194 (FAILURE,HIGH) = Text input file syntax error or specs violation
  594  0x00020195 (WARNING,HIGH) = Text input file warning
  595  0x00020196 (FAILURE,HIGH) = Session has already defined tracks
  596  0x00020197 (FAILURE,HIGH) = Unsupported text input file feature
  597  0x00020198 (FAILURE,HIGH) = CD-TEXT pack file readability problem
  598  0x00020199 (SORRY,HIGH)   = Text input file reading aborted
  599  0x0002019a (SORRY,HIGH)   = Bad track index number
  600  0x0002019b (SORRY,HIGH)   = CD track number exceeds range of 1 to 99
  601  0x0002019c (SORRY,HIGH)   = Session has no defined tracks
  602  0x0002019d (SORRY,HIGH)   = Audio read size not properly aligned
  603  0x0002019e (NOTE,HIGH)    = Drive does not support media certification
  604  0x0002019f (FAILURE,HIGH) = CD-TEXT binary pack array faulty
  605  0x000201a0 (WARNING,HIGH) = Maximum number of CD-TEXT blocks exceeded
  606  0x000201a1 (FAILURE,HIGH) = Cannot open disk file for writing
  607  0x000201a2 (FAILURE,HIGH) = Error while writing to disk file
  608  0x000201a3 (UPDATE,HIGH)  = Progress message of burn_drive_extract_audio()
  609  0x000201a4 (FAILURE,HIGH) = Failure to read audio sectors
  610  0x000201a5 (FAILURE,HIGH) = Asynchronous SCSI error
  611  0x000201a6 (FATAL,HIGH)   = Lost connection to drive
  612  0x000201a7 (FAILURE,HIGH) = SCSI command yielded host problem
  613  0x000201a8 (FAILURE,HIGH) = SCSI command yielded driver problem
  614  0x000201a9 (FAILURE,HIGH) = Implausible length from GET CONFIGURATION
  615  0x000201aa (FAILURE,HIGH) = No CD-TEXT packs in file
  616  0x000201ab (WARN,HIGH)    = Leaving burn_source_fifo object undisposed
  617  0x000201ac (NOTE,HIGH)    = Drive currently does not offer Stream Recording
  618  0x000201ad (NOTE,HIGH)    = WRITE commands have been repeated
  619 
  620 
  621  libdax_audioxtr:
  622  0x00020200 (SORRY,HIGH)   = Cannot open audio source file
  623  0x00020201 (SORRY,HIGH)   = Audio source file has unsuitable format
  624  0x00020202 (SORRY,HIGH)   = Failed to prepare reading of audio data
  625 
  626 
  627 
  628 ------------------------------------------------------------------------------
  629 Range "vreixo"              :  0x00030000 to 0x0003ffff
  630 
  631  0x0003ffff (FAILURE,HIGH) = Operation canceled
  632  0x0003fffe (FATAL,HIGH)   = Unknown or unexpected fatal error
  633  0x0003fffd (FAILURE,HIGH) = Unknown or unexpected error
  634  0x0003fffc (FATAL,HIGH)   = Internal programming error
  635  0x0003fffb (FAILURE,HIGH) = NULL pointer where NULL not allowed
  636  0x0003fffa (FATAL,HIGH)   = Memory allocation error
  637  0x0003fff9 (FATAL,HIGH)   = Interrupted by a signal
  638  0x0003fff8 (FAILURE,HIGH) = Invalid parameter value
  639  0x0003fff7 (FATAL,HIGH)   = Cannot create a needed thread
  640  0x0003fff6 (FAILURE,HIGH) = Write error
  641  0x0003fff5 (FAILURE,HIGH) = Buffer read error
  642  0x0003ffc0 (FAILURE,HIGH) = Trying to add a node already added to another dir
  643  0x0003ffbf (FAILURE,HIGH) = Node with same name already exist
  644  0x0003ffbe (FAILURE,HIGH) = Trying to remove a node that was not added to dir
  645  0x0003ffbd (FAILURE,HIGH) = A requested node does not exist
  646  0x0003ffbc (FAILURE,HIGH) = Image already bootable
  647  0x0003ffbb (FAILURE,HIGH) = Trying to use an invalid file as boot image
  648  0x0003ff80 (FAILURE,HIGH) = Error on file operation
  649  0x0003ff7f (FAILURE,HIGH) = Trying to open an already opened file
  650  0x0003ff7e (FAILURE,HIGH) = Access to file is not allowed
  651  0x0003ff7d (FAILURE,HIGH) = Incorrect path to file
  652  0x0003ff7c (FAILURE,HIGH) = The file does not exist in the filesystem
  653  0x0003ff7b (FAILURE,HIGH) = Trying to read or close a file not opened
  654  0x0003ff7a (FAILURE,HIGH) = Directory used where no dir is expected
  655  0x0003ff79 (FAILURE,HIGH) = File read error
  656  0x0003ff78 (FAILURE,HIGH) = Not dir used where a dir is expected
  657  0x0003ff77 (FAILURE,HIGH) = Not symlink used where a symlink is expected
  658  0x0003ff76 (FAILURE,HIGH) = Cannot seek to specified location
  659  0x0003ff75 (HINT,MEDIUM)  = File not supported in ECMA-119 tree and ignored
  660  0x0003ff74 (HINT,MEDIUM)  = File bigger than supported by used standard
  661  0x0003ff73 (MISHAP,HIGH)  = File read error during image creation
  662  0x0003ff72 (HINT,MEDIUM)  = Cannot convert filename to requested charset
  663  0x0003ff71 (SORRY,HIGH)   = File cannot be added to the tree
  664  0x0003ff70 (HINT,MEDIUM)  = File path breaks specification constraints
  665  0x0003ff00 (FAILURE,HIGH) = Charset conversion error
  666  0x0003feff (FAILURE,HIGH) = Too much files to mangle
  667  0x0003fec0 (FAILURE,HIGH) = Wrong or damaged Primary Volume Descriptor
  668  0x0003febf (SORRY,HIGH)   = Wrong or damaged RR entry
  669  0x0003febe (SORRY,HIGH)   = Unsupported RR feature
  670  0x0003febd (FAILURE,HIGH) = Wrong or damaged ECMA-119
  671  0x0003febc (FAILURE,HIGH) = Unsupported ECMA-119 feature
  672  0x0003febb (SORRY,HIGH)   = Wrong or damaged El-Torito catalog
  673  0x0003feba (SORRY,HIGH)   = Unsupported El-Torito feature
  674  0x0003feb9 (SORRY,HIGH)   = Cannot patch isolinux boot image
  675  0x0003feb8 (SORRY,HIGH)   = Unsupported SUSP feature
  676  0x0003feb7 (WARNING,HIGH) = Error on a RR entry that can be ignored
  677  0x0003feb6 (HINT,MEDIUM)  = Error on a RR entry that can be ignored
  678  0x0003feb5 (WARNING,HIGH) = Multiple ER SUSP entries found
  679  0x0003feb4 (HINT,MEDIUM)  = Unsupported volume descriptor found
  680  0x0003feb3 (WARNING,HIGH) = El-Torito related warning
  681  0x0003feb2 (MISHAP,HIGH)  = Image write cancelled
  682  0x0003feb1 (WARNING,HIGH) = El-Torito image is hidden
  683 
  684 Outdated codes which may not be re-used for other purposes than
  685 re-instating them, if ever:
  686 
  687 X 0x00031001 (SORRY,HIGH)    = Cannot read file (ignored)
  688 X 0x00031002 (FATAL,HIGH)    = Cannot read file (operation canceled)
  689 X 0x00031000 (FATAL,HIGH)    = Unsupported ISO-9660 image
  690 X 0x00031001 (HINT,MEDIUM)   = Unsupported Vol Desc that will be ignored
  691 X 0x00031002 (FATAL,HIGH)    = Damaged ISO-9660 image
  692 X 0x00031003 (SORRY,HIGH)    = Cannot read previous image file
  693 X 0x00030101 (HINT,MEDIUM)   = Unsupported SUSP entry that will be ignored
  694 X 0x00030102 (SORRY,HIGH)    = Wrong/damaged SUSP entry
  695 X 0x00030103 (WARNING,MEDIUM)= Multiple SUSP ER entries where found
  696 X 0x00030111 (SORRY,HIGH)    = Unsupported RR feature
  697 X 0x00030112 (SORRY,HIGH)    = Error in a Rock Ridge entry
  698 X 0x00030201 (HINT,MEDIUM)   = Unsupported Boot Vol Desc that will be ignored
  699 X 0x00030202 (SORRY,HIGH)    = Wrong El-Torito catalog
  700 X 0x00030203 (HINT,MEDIUM)   = Unsupported El-Torito feature
  701 X 0x00030204 (SORRY,HIGH)    = Invalid file to be an El-Torito image
  702 X 0x00030205 (WARNING,MEDIUM)= Cannot properly patch isolinux image
  703 X 0x00030206 (WARNING,MEDIUM)= Copying El-Torito from a previous image without
  704 X                              enough info about it
  705 X 0x00030301 (NOTE,MEDIUM)   = Unsupported file type for Joliet tree
  706 
  707 
  708 ------------------------------------------------------------------------------
  709 Range "application"         :  0x00040000 to 0x0004ffff
  710 
  711  0x00040000 (ABORT,HIGH)    : Application supplied message
  712  0x00040001 (FATAL,HIGH)    : Application supplied message
  713  0x00040002 (SORRY,HIGH)    : Application supplied message
  714  0x00040003 (WARNING,HIGH)  : Application supplied message
  715  0x00040004 (HINT,HIGH)     : Application supplied message
  716  0x00040005 (NOTE,HIGH)     : Application supplied message
  717  0x00040006 (UPDATE,HIGH)   : Application supplied message
  718  0x00040007 (DEBUG,HIGH)    : Application supplied message
  719  0x00040008 (*,HIGH)        : Application supplied message
  720 
  721 
  722 ------------------------------------------------------------------------------
  723 Range "libisofs-xorriso"    :  0x00050000 to 0x0005ffff
  724 
  725 This is an alternative representation of libisofs.so.6 error codes in xorriso.
  726 If values returned by iso_error_get_code() do not fit into 0x30000 to 0x3ffff
  727 then they get truncated to 16 bit and mapped into this range.
  728 (This should never need to happen, of course.)
  729 
  730 ------------------------------------------------------------------------------
  731 Range "libisoburn"          :  0x00060000 to 0x00006ffff
  732 
  733  0x00060000 (*,*)           : Message which shall be attributed to libisoburn
  734 
  735  >>> the messages of libisoburn need to be registered individually
  736 
  737 
  738 ------------------------------------------------------------------------------
  739 
  740 #endif /* LIBDAX_MSGS_________________ */
  741 
  742 
  743 
  744 #ifdef LIBDAX_MSGS_H_INTERNAL
  745 
  746                              /* Internal Functions */
  747 
  748 
  749 /** Lock before doing side effect operations on m */
  750 static int libdax_msgs_lock(struct libdax_msgs *m, int flag);
  751 
  752 /** Unlock after effect operations on m are done */
  753 static int libdax_msgs_unlock(struct libdax_msgs *m, int flag);
  754 
  755 
  756 /** Create new empty message item.
  757     @param link Previous item in queue
  758     @param flag Bitfield for control purposes (unused yet, submit 0)
  759     @return >0 success, <=0 failure
  760 */
  761 static int libdax_msgs_item_new(struct libdax_msgs_item **item, 
  762                                 struct libdax_msgs_item *link, int flag);
  763 
  764 /** Destroy a message item obtained by libdax_msgs_obtain(). The submitted
  765     pointer gets set to NULL.
  766     @param flag Bitfield for control purposes (unused yet, submit 0)
  767     @return 1 for success, 0 for pointer to NULL
  768 */
  769 static int libdax_msgs_item_destroy(struct libdax_msgs_item **item, int flag);
  770 
  771 
  772 #endif /* LIBDAX_MSGS_H_INTERNAL */
  773 
  774 
  775 #endif /* ! LIBDAX_MSGS_H_INCLUDED */