diff options
| author | 2021-12-23 14:14:24 +0100 | |
|---|---|---|
| committer | 2021-12-23 14:14:24 +0100 | |
| commit | 0a5f1cc10b62c1d059b2f4e60f5512ac3e15ff07 (patch) | |
| tree | 1b76e34164d9d0086c95ce30556f8dc7ea551b28 /tools | |
| parent | 91c533af1a906e32eea17eb344f218e45c32a554 (diff) | |
| download | libplist-0a5f1cc10b62c1d059b2f4e60f5512ac3e15ff07.tar.gz libplist-0a5f1cc10b62c1d059b2f4e60f5512ac3e15ff07.tar.bz2  | |
plistutil: Check return values from plist API to print proper error messages
and return a meaningful exit code.
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/plistutil.c | 49 | 
1 files changed, 35 insertions, 14 deletions
diff --git a/tools/plistutil.c b/tools/plistutil.c index bd83e92..28848fa 100644 --- a/tools/plistutil.c +++ b/tools/plistutil.c @@ -148,6 +148,8 @@ static options_t *parse_arguments(int argc, char *argv[])  int main(int argc, char *argv[])  {      int ret = 0; +    int input_res = PLIST_ERR_UNKNOWN; +    int output_res = PLIST_ERR_UNKNOWN;      FILE *iplist = NULL;      plist_t root_node = NULL;      char *plist_out = NULL; @@ -251,24 +253,30 @@ int main(int argc, char *argv[])          // convert from binary to xml or vice-versa          if (plist_is_binary(plist_entire, read_size))          { -            plist_from_bin(plist_entire, read_size, &root_node); -            plist_to_xml(root_node, &plist_out, &size); +            input_res = plist_from_bin(plist_entire, read_size, &root_node); +            if (input_res == PLIST_ERR_SUCCESS) { +                output_res = plist_to_xml(root_node, &plist_out, &size); +            }          }          else          { -            plist_from_xml(plist_entire, read_size, &root_node); -            plist_to_bin(root_node, &plist_out, &size); +            input_res = plist_from_xml(plist_entire, read_size, &root_node); +            if (input_res == PLIST_ERR_SUCCESS) { +                output_res = plist_to_bin(root_node, &plist_out, &size); +            }          }      }      else      { -        plist_from_memory(plist_entire, read_size, &root_node); -        if (options->out_fmt == 1) { -            plist_to_bin(root_node, &plist_out, &size); -        } else if (options->out_fmt == 2) { -            plist_to_xml(root_node, &plist_out, &size); -        } else if (options->out_fmt == 3) { -            plist_to_json(root_node, &plist_out, &size, 0); +        input_res = plist_from_memory(plist_entire, read_size, &root_node); +        if (input_res == PLIST_ERR_SUCCESS) { +            if (options->out_fmt == 1) { +                output_res = plist_to_bin(root_node, &plist_out, &size); +            } else if (options->out_fmt == 2) { +                output_res = plist_to_xml(root_node, &plist_out, &size); +            } else if (options->out_fmt == 3) { +                output_res = plist_to_json(root_node, &plist_out, &size, 0); +            }          }      }      plist_free(root_node); @@ -293,9 +301,22 @@ int main(int argc, char *argv[])          free(plist_out);      } -    else { -        fprintf(stderr, "ERROR: Failed to convert input file.\n"); -        ret = 2; + +    if (input_res == PLIST_ERR_SUCCESS) { +        switch (output_res) { +            case PLIST_ERR_SUCCESS: +                break; +            case PLIST_ERR_FORMAT: +                fprintf(stderr, "ERROR: Input plist data is not compatible with output format.\n"); +                ret = 2; +                break; +            default: +                fprintf(stderr, "ERROR: Failed to convert plist data (%d)\n", output_res); +                ret = 1; +        } +    } else { +        fprintf(stderr, "ERROR: Could not parse plist data (%d)\n", input_res); +        ret = 1;      }      free(options);  | 
