Diff for /qemu/qerror.c between versions 1.1.1.3 and 1.1.1.4

version 1.1.1.3, 2018/04/24 18:33:20 version 1.1.1.4, 2018/04/24 18:55:38
Line 141  static const QErrorStringTable qerror_ta Line 141  static const QErrorStringTable qerror_ta
         .desc      = "Invalid JSON syntax",          .desc      = "Invalid JSON syntax",
     },      },
     {      {
           .error_fmt = QERR_JSON_PARSE_ERROR,
           .desc      = "JSON parse error, %(message)",
   
       },
       {
         .error_fmt = QERR_KVM_MISSING_CAP,          .error_fmt = QERR_KVM_MISSING_CAP,
         .desc      = "Using KVM without %(capability), %(feature) unavailable",          .desc      = "Using KVM without %(capability), %(feature) unavailable",
     },      },
Line 193  static const QErrorStringTable qerror_ta Line 198  static const QErrorStringTable qerror_ta
         .desc      = "Could not set password",          .desc      = "Could not set password",
     },      },
     {      {
           .error_fmt = QERR_ADD_CLIENT_FAILED,
           .desc      = "Could not add client",
       },
       {
         .error_fmt = QERR_TOO_MANY_FILES,          .error_fmt = QERR_TOO_MANY_FILES,
         .desc      = "Too many open files",          .desc      = "Too many open files",
     },      },
Line 201  static const QErrorStringTable qerror_ta Line 210  static const QErrorStringTable qerror_ta
         .desc      = "An undefined error has ocurred",          .desc      = "An undefined error has ocurred",
     },      },
     {      {
           .error_fmt = QERR_UNSUPPORTED,
           .desc      = "this feature or command is not currently supported",
       },
       {
         .error_fmt = QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,          .error_fmt = QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
         .desc      = "'%(device)' uses a %(format) feature which is not "          .desc      = "'%(device)' uses a %(format) feature which is not "
                      "supported by this qemu version: %(feature)",                       "supported by this qemu version: %(feature)",
Line 209  static const QErrorStringTable qerror_ta Line 222  static const QErrorStringTable qerror_ta
         .error_fmt = QERR_VNC_SERVER_FAILED,          .error_fmt = QERR_VNC_SERVER_FAILED,
         .desc      = "Could not start VNC server on %(target)",          .desc      = "Could not start VNC server on %(target)",
     },      },
       {
           .error_fmt = QERR_QGA_LOGGING_FAILED,
           .desc      = "Guest agent failed to log non-optional log statement",
       },
       {
           .error_fmt = QERR_QGA_COMMAND_FAILED,
           .desc      = "Guest agent command failed, error was '%(message)'",
       },
     {}      {}
 };  };
   
Line 326  QError *qerror_from_info(const char *fil Line 347  QError *qerror_from_info(const char *fil
     return qerr;      return qerr;
 }  }
   
 static void parse_error(const QError *qerror, int c)  static void parse_error(const QErrorStringTable *entry, int c)
 {  {
     qerror_abort(qerror, "expected '%c' in '%s'", c, qerror->entry->desc);      fprintf(stderr, "expected '%c' in '%s'", c, entry->desc);
       abort();
 }  }
   
 static const char *append_field(QString *outstr, const QError *qerror,  static const char *append_field(QDict *error, QString *outstr,
                                   const QErrorStringTable *entry,
                                 const char *start)                                  const char *start)
 {  {
     QObject *obj;      QObject *obj;
Line 340  static const char *append_field(QString  Line 363  static const char *append_field(QString 
     const char *end, *key;      const char *end, *key;
   
     if (*start != '%')      if (*start != '%')
         parse_error(qerror, '%');          parse_error(entry, '%');
     start++;      start++;
     if (*start != '(')      if (*start != '(')
         parse_error(qerror, '(');          parse_error(entry, '(');
     start++;      start++;
   
     end = strchr(start, ')');      end = strchr(start, ')');
     if (!end)      if (!end)
         parse_error(qerror, ')');          parse_error(entry, ')');
   
     key_qs = qstring_from_substr(start, 0, end - start - 1);      key_qs = qstring_from_substr(start, 0, end - start - 1);
     key = qstring_get_str(key_qs);      key = qstring_get_str(key_qs);
   
     qdict = qobject_to_qdict(qdict_get(qerror->error, "data"));      qdict = qobject_to_qdict(qdict_get(error, "data"));
     obj = qdict_get(qdict, key);      obj = qdict_get(qdict, key);
     if (!obj) {      if (!obj) {
         qerror_abort(qerror, "key '%s' not found in QDict", key);          abort();
     }      }
   
     switch (qobject_type(obj)) {      switch (qobject_type(obj)) {
Line 367  static const char *append_field(QString  Line 390  static const char *append_field(QString 
             qstring_append_int(outstr, qdict_get_int(qdict, key));              qstring_append_int(outstr, qdict_get_int(qdict, key));
             break;              break;
         default:          default:
             qerror_abort(qerror, "invalid type '%c'", qobject_type(obj));              abort();
     }      }
   
     QDECREF(key_qs);      QDECREF(key_qs);
     return ++end;      return ++end;
 }  }
   
 /**  static QString *qerror_format_desc(QDict *error,
  * qerror_human(): Format QError data into human-readable string.                                     const QErrorStringTable *entry)
  *  
  * Formats according to member 'desc' of the specified QError object.  
  */  
 QString *qerror_human(const QError *qerror)  
 {  {
     const char *p;  
     QString *qstring;      QString *qstring;
       const char *p;
   
     assert(qerror->entry != NULL);      assert(entry != NULL);
   
     qstring = qstring_new();      qstring = qstring_new();
   
     for (p = qerror->entry->desc; *p != '\0';) {      for (p = entry->desc; *p != '\0';) {
         if (*p != '%') {          if (*p != '%') {
             qstring_append_chr(qstring, *p++);              qstring_append_chr(qstring, *p++);
         } else if (*(p + 1) == '%') {          } else if (*(p + 1) == '%') {
             qstring_append_chr(qstring, '%');              qstring_append_chr(qstring, '%');
             p += 2;              p += 2;
         } else {          } else {
             p = append_field(qstring, qerror, p);              p = append_field(error, qstring, entry, p);
         }          }
     }      }
   
     return qstring;      return qstring;
 }  }
   
   QString *qerror_format(const char *fmt, QDict *error)
   {
       const QErrorStringTable *entry = NULL;
       int i;
   
       for (i = 0; qerror_table[i].error_fmt; i++) {
           if (strcmp(qerror_table[i].error_fmt, fmt) == 0) {
               entry = &qerror_table[i];
               break;
           }
       }
   
       return qerror_format_desc(error, entry);
   }
   
   /**
    * qerror_human(): Format QError data into human-readable string.
    */
   QString *qerror_human(const QError *qerror)
   {
       return qerror_format_desc(qerror->error, qerror->entry);
   }
   
 /**  /**
  * qerror_print(): Print QError data   * qerror_print(): Print QError data
  *   *

Removed from v.1.1.1.3  
changed lines
  Added in v.1.1.1.4


unix.superglobalmegacorp.com