diff --git a/align/scan.c b/align/scan.c index 4171f8c35..953ee913a 100644 --- a/align/scan.c +++ b/align/scan.c @@ -38,6 +38,8 @@ #include #endif +#include "getprogname.h" + #include "guestfs.h" #include "options.h" #include "display-options.h" @@ -73,7 +75,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: check alignment of virtual machine partitions\n" "Copyright (C) 2011 Red Hat Inc.\n" @@ -93,8 +95,8 @@ usage (int status) " -V|--version Display version and exit\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } diff --git a/bootstrap b/bootstrap index 5df6f0f5a..071682c60 100755 --- a/bootstrap +++ b/bootstrap @@ -56,6 +56,7 @@ full-write futimens getaddrinfo getline +getprogname gitlog-to-changelog glob gnu-make diff --git a/builder/index-validate.c b/builder/index-validate.c index 967c2d340..d3912f305 100644 --- a/builder/index-validate.c +++ b/builder/index-validate.c @@ -30,6 +30,7 @@ #include +#include "getprogname.h" #include "guestfs-internal-frontend.h" #include "index-struct.h" @@ -40,7 +41,7 @@ extern int do_parse (struct parse_context *context, FILE *in); static void usage (int exit_status) { - printf ("%s index\n", guestfs_int_program_name); + printf ("%s index\n", getprogname ()); exit (exit_status); } @@ -90,7 +91,7 @@ main (int argc, char *argv[]) case 'V': printf ("%s %s%s\n", - guestfs_int_program_name, + getprogname (), PACKAGE_VERSION, PACKAGE_VERSION_EXTRA); exit (EXIT_SUCCESS); @@ -115,7 +116,7 @@ main (int argc, char *argv[]) if (fclose (in) == EOF) { fprintf (stderr, _("%s: %s: error closing input file: %m (ignored)\n"), - guestfs_int_program_name, input); + getprogname (), input); } if (ret != 0) { diff --git a/cat/cat.c b/cat/cat.c index 9c8d1a9b8..1ac32d75a 100644 --- a/cat/cat.c +++ b/cat/cat.c @@ -30,6 +30,8 @@ #include #include +#include "getprogname.h" + #include "guestfs.h" #include "options.h" #include "display-options.h" @@ -53,7 +55,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: display files in a virtual machine\n" "Copyright (C) 2010 Red Hat Inc.\n" @@ -74,8 +76,8 @@ usage (int status) " -V|--version Display version and exit\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } @@ -227,7 +229,7 @@ main (int argc, char *argv[]) /* User must have specified some drives. */ if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } diff --git a/cat/filesystems.c b/cat/filesystems.c index 6c8ce01b9..73967d7bb 100644 --- a/cat/filesystems.c +++ b/cat/filesystems.c @@ -33,6 +33,7 @@ #include "c-ctype.h" #include "human.h" +#include "getprogname.h" #include "guestfs.h" #include "options.h" @@ -87,7 +88,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: list filesystems, partitions, block devices, LVM in a VM\n" "Copyright (C) 2010 Red Hat Inc.\n" @@ -123,8 +124,8 @@ usage (int status) " Display LVM volume groups\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } @@ -296,7 +297,7 @@ main (int argc, char *argv[]) fprintf (stderr, _("%s: error: extra argument '%s' on command line.\n" "Make sure to specify the argument for --format " "like '--format=%s'.\n"), - guestfs_int_program_name, argv[optind], argv[optind]); + getprogname (), argv[optind], argv[optind]); usage (EXIT_FAILURE); } @@ -337,7 +338,7 @@ main (int argc, char *argv[]) /* User must have specified some drives. */ if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } @@ -486,7 +487,7 @@ do_output_filesystems (void) if (subvolume == NULL && guestfs_last_errno (g) != EINVAL) { fprintf (stderr, _("%s: cannot determine the subvolume for %s: %s: %s\n"), - guestfs_int_program_name, fses[i], + getprogname (), fses[i], guestfs_last_error (g), strerror (guestfs_last_errno (g))); exit (EXIT_FAILURE); diff --git a/cat/log.c b/cat/log.c index 0968ef57e..f8f5a4bcb 100644 --- a/cat/log.c +++ b/cat/log.c @@ -35,6 +35,8 @@ #include #include +#include "getprogname.h" + #include "guestfs.h" #include "options.h" #include "display-options.h" @@ -62,7 +64,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: display log files in a virtual machine\n" "Copyright (C) 2010-2016 Red Hat Inc.\n" @@ -81,8 +83,8 @@ usage (int status) " -V|--version Display version and exit\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } @@ -189,7 +191,7 @@ main (int argc, char *argv[]) fprintf (stderr, _("%s: error: extra argument '%s' on command line.\n" "Make sure to specify the argument for --format " "like '--format=%s'.\n"), - guestfs_int_program_name, argv[optind], argv[optind]); + getprogname (), argv[optind], argv[optind]); usage (EXIT_FAILURE); } @@ -198,7 +200,7 @@ main (int argc, char *argv[]) /* User must have specified some drives. */ if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } @@ -250,7 +252,7 @@ do_log (void) fprintf (stderr, _("%s: Windows Event Log for pre-Vista guests is not supported.\n"), - guestfs_int_program_name); + getprogname ()); return -1; } @@ -358,7 +360,7 @@ do_log_journal (void) if (strftime (buf, sizeof buf, "%b %d %H:%M:%S", localtime_r (&t, &tm)) <= 0) { fprintf (stderr, _("%s: could not format journal entry timestamp\n"), - guestfs_int_program_name); + getprogname ()); errors++; continue; } @@ -427,7 +429,7 @@ do_log_windows_evtx (void) "in order to parse Windows Event Logs. If you cannot install this, then\n" "use virt-copy-out(1) to copy the contents of /Windows/System32/winevt/Logs\n" "from this guest, and examine in a binary file viewer.\n"), - guestfs_int_program_name); + getprogname ()); return -1; } @@ -443,7 +445,7 @@ do_log_windows_evtx (void) GUESTFS_IS_FILE_OPTS_FOLLOWSYMLINKS, 1, -1) <= 0) { fprintf (stderr, _("%s: Windows Event Log file (%s) not found\n"), - guestfs_int_program_name, filename); + getprogname (), filename); return -1; } @@ -475,7 +477,7 @@ do_log_windows_evtx (void) if (status) { char buf[256]; fprintf (stderr, "%s: %s\n", - guestfs_int_program_name, + getprogname (), guestfs_int_exit_status_to_string (status, "evtxdump.py", buf, sizeof buf)); return -1; diff --git a/cat/ls.c b/cat/ls.c index 53bc6fc1d..2e327d9b9 100644 --- a/cat/ls.c +++ b/cat/ls.c @@ -34,6 +34,7 @@ #include #include "human.h" +#include "getprogname.h" #include "guestfs.h" @@ -84,7 +85,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: list files in a virtual machine\n" "Copyright (C) 2010-2012 Red Hat Inc.\n" @@ -116,8 +117,8 @@ usage (int status) " -V|--version Display version and exit\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } @@ -344,7 +345,7 @@ main (int argc, char *argv[]) /* User must have specified some drives. */ if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } diff --git a/cat/visit.c b/cat/visit.c index 6a6cb1e97..f29235cf1 100644 --- a/cat/visit.c +++ b/cat/visit.c @@ -33,6 +33,8 @@ #include #include +#include "getprogname.h" + #include "guestfs.h" #include "guestfs-internal-frontend.h" @@ -128,7 +130,7 @@ _visit (guestfs_h *g, int depth, const char *dir, if (xattrs->val[xattrp].attrval_len == 0) { fprintf (stderr, _("%s: error getting extended attrs for %s %s\n"), - guestfs_int_program_name, dir, names[i]); + getprogname (), dir, names[i]); return -1; } /* attrval is not \0-terminated. */ @@ -142,7 +144,7 @@ _visit (guestfs_h *g, int depth, const char *dir, attrval[xattrs->val[xattrp].attrval_len] = '\0'; if (sscanf (attrval, "%zu", &nr_xattrs) != 1) { fprintf (stderr, _("%s: error: cannot parse xattr count for %s %s\n"), - guestfs_int_program_name, dir, names[i]); + getprogname (), dir, names[i]); return -1; } diff --git a/df/main.c b/df/main.c index 3f9296f28..b4fe0e076 100644 --- a/df/main.c +++ b/df/main.c @@ -36,6 +36,8 @@ #include #endif +#include "getprogname.h" + #include "guestfs.h" #include "options.h" #include "display-options.h" @@ -66,7 +68,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: display free space on virtual filesystems\n" "Copyright (C) 2010 Red Hat Inc.\n" @@ -89,8 +91,8 @@ usage (int status) " -V|--version Display version and exit\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } diff --git a/df/parallel.c b/df/parallel.c index d8aa37516..97b9a3a0c 100644 --- a/df/parallel.c +++ b/df/parallel.c @@ -44,6 +44,7 @@ #endif #include "ignore-value.h" +#include "getprogname.h" #include "guestfs.h" #include "guestfs-internal-frontend.h" @@ -298,7 +299,7 @@ static void thread_failure (const char *fn, int err) { fprintf (stderr, "%s: %s: %s\n", - guestfs_int_program_name, fn, strerror (err)); + getprogname (), fn, strerror (err)); } #endif /* HAVE_LIBVIRT */ diff --git a/diff/diff.c b/diff/diff.c index 9ec515dbe..2087857c9 100644 --- a/diff/diff.c +++ b/diff/diff.c @@ -36,6 +36,7 @@ #include "c-ctype.h" #include "human.h" +#include "getprogname.h" #include "guestfs.h" @@ -93,7 +94,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: list differences between virtual machines\n" "Copyright (C) 2010-2016 Red Hat Inc.\n" @@ -128,8 +129,8 @@ usage (int status) " -x Trace libguestfs API calls\n" " --xattrs Display extended attributes\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } @@ -316,12 +317,12 @@ main (int argc, char *argv[]) if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } if (drvs2 == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -A or -D option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } @@ -335,7 +336,7 @@ main (int argc, char *argv[]) fprintf (stderr, _("%s: error: extra argument '%s' on command line.\n" "Make sure to specify the argument for --checksum or --format " "like '--format=%s'.\n"), - guestfs_int_program_name, argv[optind], argv[optind]); + getprogname (), argv[optind], argv[optind]); usage (EXIT_FAILURE); } @@ -734,7 +735,7 @@ diff (struct file *file1, guestfs_h *g1, struct file *file2, guestfs_h *g2) fprintf (stderr, "%s\n", cmd); r = system (cmd); if (!WIFEXITED (r) || WEXITSTATUS (r) != 0) { - fprintf (stderr, _("%s: external diff command failed\n"), guestfs_int_program_name); + fprintf (stderr, _("%s: external diff command failed\n"), getprogname ()); goto out; } diff --git a/edit/edit.c b/edit/edit.c index 6f3e38868..06f7f2878 100644 --- a/edit/edit.c +++ b/edit/edit.c @@ -34,6 +34,7 @@ #include #include "xvasprintf.h" +#include "getprogname.h" #include "guestfs.h" #include "options.h" @@ -63,7 +64,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: Edit a file in a virtual machine\n" "Copyright (C) 2009-2016 Red Hat Inc.\n" @@ -86,8 +87,8 @@ usage (int status) " -V|--version Display version and exit\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } @@ -256,7 +257,7 @@ main (int argc, char *argv[]) /* User must have specified some drives. */ if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } diff --git a/fish/config.c b/fish/config.c index 8f10ad4ed..dd9f6ec42 100644 --- a/fish/config.c +++ b/fish/config.c @@ -38,6 +38,8 @@ #include #endif +#include "getprogname.h" + #include "guestfs.h" #include "options.h" @@ -62,7 +64,7 @@ read_config_from_file (const char *filename) /* if (verbose) fprintf (stderr, "%s: reading configuration from %s\n", - guestfs_int_program_name, filename); + getprogname (), filename); */ if (config_read (&conf, fp) == CONFIG_FALSE) @@ -155,7 +157,7 @@ parse_config (void) if (verbose) fprintf (stderr, _("%s: compiled without libconfig, guestfish configuration file ignored\n"), - guestfs_int_program_name); + getprogname ()); */ } diff --git a/fish/fish.c b/fish/fish.c index f20fbc07f..1f6f043be 100644 --- a/fish/fish.c +++ b/fish/fish.c @@ -54,6 +54,7 @@ #include "c-ctype.h" #include "closeout.h" #include "ignore-value.h" +#include "getprogname.h" /* Return from parse_command_line. See description below. */ struct parsed_command { @@ -110,7 +111,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: guest filesystem shell\n" "%s lets you edit virtual machine filesystems\n" @@ -159,10 +160,10 @@ usage (int status) "run again without -i and use 'run' + 'list-filesystems' + 'mount' cmds.\n" "\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname (), + getprogname (), getprogname (), + getprogname ()); } exit (status); } @@ -311,7 +312,7 @@ main (int argc, char *argv[]) case 'D': fprintf (stderr, _("%s: warning: -D option is deprecated, use --no-dest-paths instead\n"), - guestfs_int_program_name); + getprogname ()); complete_dest_paths = 0; break; @@ -854,7 +855,7 @@ parse_command_line (char *buf, int *exit_on_error_rtn) if (p[len+1] && (p[len+1] != ' ' && p[len+1] != '\t')) { fprintf (stderr, _("%s: command arguments not separated by whitespace\n"), - guestfs_int_program_name); + getprogname ()); pcmd.status = -1; return pcmd; } @@ -863,14 +864,14 @@ parse_command_line (char *buf, int *exit_on_error_rtn) p++; len = strcspn (p, "'"); if (p[len] == '\0') { - fprintf (stderr, _("%s: unterminated single quote\n"), guestfs_int_program_name); + fprintf (stderr, _("%s: unterminated single quote\n"), getprogname ()); pcmd.status = -1; return pcmd; } if (p[len+1] && (p[len+1] != ' ' && p[len+1] != '\t')) { fprintf (stderr, _("%s: command arguments not separated by whitespace\n"), - guestfs_int_program_name); + getprogname ()); pcmd.status = -1; return pcmd; } @@ -894,7 +895,7 @@ parse_command_line (char *buf, int *exit_on_error_rtn) pend = &p[len]; } else { fprintf (stderr, _("%s: internal error parsing string at '%s'\n"), - guestfs_int_program_name, p); + getprogname (), p); abort (); } @@ -910,7 +911,7 @@ parse_command_line (char *buf, int *exit_on_error_rtn) } if (i == argv_len) { - fprintf (stderr, _("%s: too many arguments\n"), guestfs_int_program_name); + fprintf (stderr, _("%s: too many arguments\n"), getprogname ()); pcmd.status = -1; return pcmd; } @@ -987,7 +988,7 @@ parse_quoted_string (char *p) default: error: fprintf (stderr, _("%s: invalid escape sequence in string (starting at offset %d)\n"), - guestfs_int_program_name, (int) (p - start)); + getprogname (), (int) (p - start)); return -1; } memmove (p+1, p+1+m, strlen (p+1+m) + 1); @@ -995,7 +996,7 @@ parse_quoted_string (char *p) } if (!*p) { - fprintf (stderr, _("%s: unterminated double quote\n"), guestfs_int_program_name); + fprintf (stderr, _("%s: unterminated double quote\n"), getprogname ()); return -1; } @@ -1190,7 +1191,7 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd, } if (ferror (stdout)) { if (!pipecmd || pipe_error) { - fprintf (stderr, "%s: write error%s\n", guestfs_int_program_name, + fprintf (stderr, "%s: write error%s\n", getprogname (), pipecmd ? " on pipe" : ""); r = -1; } @@ -1736,13 +1737,13 @@ win_prefix_drive_letter (char drive_letter, const char *path) return NULL; if (roots[0] == NULL) { fprintf (stderr, _("%s: to use Windows drive letters, you must inspect the guest (\"-i\" option or run \"inspect-os\" command)\n"), - guestfs_int_program_name); + getprogname ()); return NULL; } drives = guestfs_inspect_get_drive_mappings (g, roots[0]); if (drives == NULL || drives[0] == NULL) { fprintf (stderr, _("%s: to use Windows drive letters, this must be a Windows guest\n"), - guestfs_int_program_name); + getprogname ()); return NULL; } @@ -1756,7 +1757,7 @@ win_prefix_drive_letter (char drive_letter, const char *path) if (device == NULL) { fprintf (stderr, _("%s: drive '%c:' not found. To list available drives do:\n inspect-get-drive-mappings %s\n"), - guestfs_int_program_name, drive_letter, roots[0]); + getprogname (), drive_letter, roots[0]); return NULL; } @@ -1775,7 +1776,7 @@ win_prefix_drive_letter (char drive_letter, const char *path) if (mountpoint == NULL) { fprintf (stderr, _("%s: to access '%c:', mount %s first. One way to do this is:\n umount-all\n mount %s /\n"), - guestfs_int_program_name, drive_letter, device, device); + getprogname (), drive_letter, device, device); return NULL; } @@ -1814,7 +1815,7 @@ file_in (const char *arg) const char *endmarker = &arg[3]; if (*endmarker == '\0') { fprintf (stderr, "%s: missing end marker in -<< expression\n", - guestfs_int_program_name); + getprogname ()); return NULL; } ret = file_in_heredoc (endmarker); @@ -1885,7 +1886,7 @@ file_in_heredoc (const char *endmarker) * is likely to be an error. */ fprintf (stderr, "%s: end of input reached without finding '%s'\n", - guestfs_int_program_name, endmarker); + getprogname (), endmarker); goto error2; found_end: diff --git a/fish/inspect.c b/fish/inspect.c index c20d891d0..952d4f710 100644 --- a/fish/inspect.c +++ b/fish/inspect.c @@ -33,6 +33,7 @@ #include #include "c-ctype.h" +#include "getprogname.h" #include "guestfs.h" @@ -93,7 +94,7 @@ inspect_mount_handle (guestfs_h *g) "If using other virt tools, this disk image won't work\n" "with these tools. Use the guestfish equivalent commands\n" "(see the virt tool manual page).\n"), - guestfs_int_program_name); + getprogname ()); guestfs_int_free_string_list (roots); exit (EXIT_FAILURE); } @@ -114,7 +115,7 @@ inspect_mount_handle (guestfs_h *g) "If using other virt tools, multi-boot operating systems won't work\n" "with these tools. Use the guestfish equivalent commands\n" "(see the virt tool manual page).\n"), - guestfs_int_program_name); + getprogname ()); guestfs_int_free_string_list (roots); exit (EXIT_FAILURE); } @@ -163,7 +164,7 @@ inspect_mount_root (guestfs_h *g, const char *root) if (mount_errors) fprintf (stderr, _("%s: some filesystems could not be mounted (ignored)\n"), - guestfs_int_program_name); + getprogname ()); } /** diff --git a/fish/options.c b/fish/options.c index 96db212c4..b88c194ec 100644 --- a/fish/options.c +++ b/fish/options.c @@ -39,6 +39,8 @@ #include #include +#include "getprogname.h" + #include "guestfs.h" #include "options.h" #include "uri.h" @@ -276,15 +278,15 @@ display_mountpoints_on_failure (const char *mp_device, return; fprintf (stderr, _("%s: '%s' could not be mounted.\n"), - guestfs_int_program_name, mp_device); + getprogname (), mp_device); if (user_supplied_options) fprintf (stderr, _("%s: Check mount(8) man page to ensure options '%s'\n" "%s: are supported by the filesystem that is being mounted.\n"), - guestfs_int_program_name, user_supplied_options, guestfs_int_program_name); + getprogname (), user_supplied_options, getprogname ()); fprintf (stderr, _("%s: Did you mean to mount one of these filesystems?\n"), - guestfs_int_program_name); + getprogname ()); for (i = 0; fses[i] != NULL; i += 2) { CLEANUP_FREE char *p = NULL; @@ -309,7 +311,7 @@ display_mountpoints_on_failure (const char *mp_device, p = guestfs_canonical_device_name (g, fses[i]); } - fprintf (stderr, "%s: \t%s (%s)\n", guestfs_int_program_name, + fprintf (stderr, "%s: \t%s (%s)\n", getprogname (), p ? p : fses[i], fses[i+1]); } } diff --git a/fish/options.h b/fish/options.h index 89afe9e93..061b41f95 100644 --- a/fish/options.h +++ b/fish/options.h @@ -215,7 +215,7 @@ extern void free_mps (struct mp *mp); #define OPTION_V \ { \ printf ("%s %s\n", \ - guestfs_int_program_name, \ + getprogname (), \ PACKAGE_VERSION_FULL); \ exit (EXIT_SUCCESS); \ } @@ -223,7 +223,7 @@ extern void free_mps (struct mp *mp); #define OPTION_w \ if (read_only) { \ fprintf (stderr, _("%s: cannot mix --ro and --rw options\n"), \ - guestfs_int_program_name); \ + getprogname ()); \ exit (EXIT_FAILURE); \ } @@ -235,7 +235,7 @@ extern void free_mps (struct mp *mp); if (!format_consumed) { \ fprintf (stderr, \ _("%s: --format parameter must appear before -a parameter\n"), \ - guestfs_int_program_name); \ + getprogname ()); \ exit (EXIT_FAILURE); \ } \ } while (0) diff --git a/fish/uri.c b/fish/uri.c index fc955a5f7..ae30bce9b 100644 --- a/fish/uri.c +++ b/fish/uri.c @@ -34,6 +34,7 @@ #include #include "c-ctype.h" +#include "getprogname.h" #include "guestfs.h" #include "guestfs-internal-frontend.h" @@ -116,7 +117,7 @@ parse (const char *arg, char **path_ret, char **protocol_ret, uri = xmlParseURI (arg); if (!uri) { fprintf (stderr, _("%s: --add: could not parse URI '%s'\n"), - guestfs_int_program_name, arg); + getprogname (), arg); return -1; } @@ -127,7 +128,7 @@ parse (const char *arg, char **path_ret, char **protocol_ret, if (uri->scheme == NULL || STREQ (uri->scheme, "")) { /* Probably can never happen. */ fprintf (stderr, _("%s: %s: scheme of URI is NULL or empty\n"), - guestfs_int_program_name, arg); + getprogname (), arg); return -1; } @@ -135,14 +136,14 @@ parse (const char *arg, char **path_ret, char **protocol_ret, if (uri->server && STRNEQ (uri->server, "") && socket) { fprintf (stderr, _("%s: %s: cannot both a server name and a socket query parameter\n"), - guestfs_int_program_name, arg); + getprogname (), arg); return -1; } /* Is this needed? XXX if (socket && socket[0] != '/') { fprintf (stderr, _("%s: --add %s: socket query parameter must be an absolute path\n"), - guestfs_int_program_name, arg); + getprogname (), arg); return -1; } */ diff --git a/format/format.c b/format/format.c index 0ce4ac452..e70f32d3b 100644 --- a/format/format.c +++ b/format/format.c @@ -31,6 +31,8 @@ #include #include +#include "getprogname.h" + #include "guestfs.h" #include "options.h" #include "display-options.h" @@ -65,7 +67,7 @@ usage (int status) if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n%s\n"), - guestfs_int_program_name, warning); + getprogname (), warning); else { printf (_("%s: erase and make a blank disk\n" "Copyright (C) 2012 Red Hat Inc.\n" @@ -89,8 +91,8 @@ usage (int status) "For more information, see the manpage %s(1).\n" "\n" "%s\n\n"), - guestfs_int_program_name, warning, - guestfs_int_program_name, guestfs_int_program_name, + getprogname (), warning, + getprogname (), getprogname (), warning); } exit (status); @@ -224,7 +226,7 @@ main (int argc, char *argv[]) fprintf (stderr, _("%s: error: extra argument '%s' on command line.\n" "Make sure to specify the argument for --format, --lvm " "or --partition like '--format=%s'.\n"), - guestfs_int_program_name, argv[optind], argv[optind]); + getprogname (), argv[optind], argv[optind]); usage (EXIT_FAILURE); } @@ -233,7 +235,7 @@ main (int argc, char *argv[]) /* The user didn't specify any drives to format. */ if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } diff --git a/fuse/guestmount.c b/fuse/guestmount.c index 9da96d29d..c5ca3b6ed 100644 --- a/fuse/guestmount.c +++ b/fuse/guestmount.c @@ -39,6 +39,7 @@ #include "guestfs.h" #include "ignore-value.h" +#include "getprogname.h" #include "options.h" #include "display-options.h" @@ -88,7 +89,7 @@ static void __attribute__((noreturn)) fuse_help (void) { static struct fuse_operations null_operations; - const char *tmp_argv[] = { guestfs_int_program_name, "--help", NULL }; + const char *tmp_argv[] = { getprogname (), "--help", NULL }; fuse_main (2, (char **) tmp_argv, &null_operations, NULL); exit (EXIT_SUCCESS); } @@ -98,7 +99,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: FUSE module for libguestfs\n" "%s lets you mount a virtual machine filesystem\n" @@ -130,8 +131,8 @@ usage (int status) " -w|--rw Mount read-write\n" " -x|--trace Trace guestfs API calls\n" ), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name); + getprogname (), getprogname (), + getprogname ()); } exit (status); } @@ -313,12 +314,12 @@ main (int argc, char *argv[]) if (!live) { if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } if (!(mps || inspector)) { fprintf (stderr, _("%s: error: you must specify either -i at least one -m option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } } else { diff --git a/fuse/guestunmount.c b/fuse/guestunmount.c index fe86706fa..dde691a46 100644 --- a/fuse/guestunmount.c +++ b/fuse/guestunmount.c @@ -38,6 +38,7 @@ #include "guestfs-internal-frontend.h" #include "ignore-value.h" +#include "getprogname.h" #include "display-options.h" @@ -53,7 +54,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: clean up a mounted filesystem\n" "Copyright (C) 2013 Red Hat Inc.\n" @@ -68,7 +69,7 @@ usage (int status) " -v|--verbose Verbose messages\n" " -V|--version Display version and exit\n" ), - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname ()); } exit (status); } @@ -204,7 +205,7 @@ main (int argc, char *argv[]) /* fusermount failed after N retries */ if (!quiet) { fprintf (stderr, _("%s: failed to unmount %s: %s\n"), - guestfs_int_program_name, mountpoint, error_str); + getprogname (), mountpoint, error_str); do_fuser (mountpoint); } free (error_str); @@ -215,7 +216,7 @@ main (int argc, char *argv[]) not_mounted: if (!quiet) fprintf (stderr, _("%s: %s is not mounted: %s\n"), - guestfs_int_program_name, mountpoint, error_str); + getprogname (), mountpoint, error_str); free (error_str); @@ -240,7 +241,7 @@ do_fusermount (const char *mountpoint, char **error_rtn) if (verbose) fprintf (stderr, "%s: running: fusermount -u %s\n", - guestfs_int_program_name, mountpoint); + getprogname (), mountpoint); pid = fork (); if (pid == -1) @@ -315,7 +316,7 @@ do_fusermount (const char *mountpoint, char **error_rtn) if (verbose) fprintf (stderr, "%s: fusermount successful\n", - guestfs_int_program_name); + getprogname ()); free (buf); return 0; /* fusermount successful */ diff --git a/fuse/test-guestmount-fd.c b/fuse/test-guestmount-fd.c index 9f302b416..abef7b293 100644 --- a/fuse/test-guestmount-fd.c +++ b/fuse/test-guestmount-fd.c @@ -30,6 +30,7 @@ #include #include "ignore-value.h" +#include "getprogname.h" #include "guestfs.h" #include "guestfs-internal-frontend.h" @@ -109,7 +110,7 @@ main (int argc, char *argv[]) } if (r == 0) { fprintf (stderr, "%s: unexpected end of file on pipe fd.\n", - guestfs_int_program_name); + getprogname ()); ignore_value (rmdir (MOUNTPOINT)); exit (EXIT_FAILURE); } @@ -117,7 +118,7 @@ main (int argc, char *argv[]) /* Check that the test image was mounted. */ if (access (TEST_FILE, R_OK) == -1) { fprintf (stderr, "%s: test failed because test image is not mounted and ready.", - guestfs_int_program_name); + getprogname ()); ignore_value (rmdir (MOUNTPOINT)); exit (EXIT_FAILURE); } @@ -127,7 +128,7 @@ main (int argc, char *argv[]) if (r != 0) { char status_string[80]; - fprintf (stderr, "%s: test failed: %s\n", guestfs_int_program_name, + fprintf (stderr, "%s: test failed: %s\n", getprogname (), guestfs_int_exit_status_to_string (r, GUESTUNMOUNT_BINARY, status_string, sizeof status_string)); @@ -148,7 +149,7 @@ main (int argc, char *argv[]) char status_string[80]; fprintf (stderr, "%s: test failed: %s\n", - guestfs_int_program_name, + getprogname (), guestfs_int_exit_status_to_string (status, GUESTMOUNT_BINARY, status_string, sizeof status_string)); diff --git a/generator/fish.ml b/generator/fish.ml index b16326b14..62752e80c 100644 --- a/generator/fish.ml +++ b/generator/fish.ml @@ -94,6 +94,7 @@ let generate_fish_run_cmds actions () = pr "\n"; pr "#include \"full-write.h\"\n"; pr "#include \"xstrtol.h\"\n"; + pr "#include \"getprogname.h\"\n"; pr "\n"; pr "#include \"guestfs.h\"\n"; pr "#include \"guestfs-internal-frontend.h\"\n"; @@ -287,7 +288,7 @@ let generate_fish_run_cmds actions () = pr " case -1:\n"; pr " fprintf (stderr,\n"; pr " _(\"%%s: '%%s': invalid boolean value, use 'true' or 'false'\\n\"),\n"; - pr " guestfs_int_program_name, argv[i-1]);\n"; + pr " getprogname (), argv[i-1]);\n"; pr " goto out_%s;\n" name; pr " case 0: %s = 0; break;\n" name; pr " default: %s = 1;\n" name; @@ -330,7 +331,7 @@ let generate_fish_run_cmds actions () = pr " case -1:\n"; pr " fprintf (stderr,\n"; pr " _(\"%%s: '%%s': invalid boolean value, use 'true' or 'false'\\n\"),\n"; - pr " guestfs_int_program_name, &argv[i][%d]);\n" (len+1); + pr " getprogname (), &argv[i][%d]);\n" (len+1); pr " goto out;\n"; pr " case 0: optargs_s.%s = 0; break;\n" n; pr " default: optargs_s.%s = 1;\n" n; diff --git a/inspector/inspector.c b/inspector/inspector.c index 9a8fa4d49..8f9d04dc3 100644 --- a/inspector/inspector.c +++ b/inspector/inspector.c @@ -37,6 +37,8 @@ #include #include +#include "getprogname.h" + #include "guestfs.h" #include "options.h" #include "display-options.h" @@ -69,7 +71,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: display information about a virtual machine\n" "Copyright (C) 2010 Red Hat Inc.\n" @@ -91,8 +93,8 @@ usage (int status) " -x Trace libguestfs API calls\n" " --xpath query Perform an XPath query\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } @@ -238,7 +240,7 @@ main (int argc, char *argv[]) fprintf (stderr, _("%s: error: extra argument '%s' on command line.\n" "Make sure to specify the argument for --format " "like '--format=%s'.\n"), - guestfs_int_program_name, argv[optind], argv[optind]); + getprogname (), argv[optind], argv[optind]); usage (EXIT_FAILURE); } @@ -260,7 +262,7 @@ main (int argc, char *argv[]) /* User must have specified some drives. */ if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } diff --git a/m4/.gitignore b/m4/.gitignore index b447284d7..42cb69f26 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -77,6 +77,7 @@ /getlogin_r.m4 /getopt.m4 /getpagesize.m4 +/getprogname.m4 /gettime.m4 /gettimeofday.m4 /getugroups.m4 diff --git a/m4/guestfs_libraries.m4 b/m4/guestfs_libraries.m4 index 582cbbf34..90123de2c 100644 --- a/m4/guestfs_libraries.m4 +++ b/m4/guestfs_libraries.m4 @@ -34,9 +34,6 @@ AC_CHECK_MEMBER([struct stat.st_ctim.tv_nsec],[ dnl Define a C symbol for the host CPU architecture. AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.]) -dnl Check if libc has program_invocation_short_name. -AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include ]) - dnl Headers. AC_CHECK_HEADERS([\ attr/xattr.h \ @@ -63,7 +60,6 @@ AC_CHECK_FUNCS([\ be32toh \ fsync \ futimens \ - getprogname \ getxattr \ htonl \ htons \ diff --git a/make-fs/make-fs.c b/make-fs/make-fs.c index ade2e60af..7d0117305 100644 --- a/make-fs/make-fs.c +++ b/make-fs/make-fs.c @@ -38,6 +38,7 @@ #include "guestfs-internal-frontend.h" #include "xstrtol.h" +#include "getprogname.h" #include "options.h" #include "display-options.h" @@ -74,7 +75,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: make a filesystem from a tar archive or files\n" "Copyright (C) 2010-2016 Red Hat Inc.\n" @@ -94,9 +95,9 @@ usage (int status) " -V|--version Display version and exit\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname (), + getprogname ()); } exit (status); } @@ -183,7 +184,7 @@ main (int argc, char *argv[]) if (optind + 2 != argc) { fprintf (stderr, _("%s: missing input and output arguments on the command line\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } @@ -202,7 +203,7 @@ check_ntfs_available (void) guestfs_feature_available (g, (char **) ntfs_features) == 0) { fprintf (stderr, _("%s: NTFS support was disabled when libguestfs was compiled\n"), - guestfs_int_program_name); + getprogname ()); return -1; } @@ -252,7 +253,7 @@ exec_command (char **argv, const char *file) } if (!WIFEXITED (status) || WEXITSTATUS (status) != 0) { fprintf (stderr, _("%s: %s command failed\n"), - guestfs_int_program_name, argv[0]); + getprogname (), argv[0]); return -1; } return 0; @@ -316,7 +317,7 @@ exec_command_count_output (char **argv, uint64_t *bytes_rtn) } if (!WIFEXITED (status) || WEXITSTATUS (status) != 0) { fprintf (stderr, _("%s: %s command failed\n"), - guestfs_int_program_name, argv[0]); + getprogname (), argv[0]); return -1; } return 0; @@ -441,7 +442,7 @@ estimate_input (const char *input, uint64_t *estimate_rtn, char **ifmt_rtn) if (sscanf (line, "%" SCNu64, estimate_rtn) != 1) { fprintf (stderr, _("%s: cannot parse the output of 'du' command: %s\n"), - guestfs_int_program_name, line); + getprogname (), line); return -1; } } @@ -476,7 +477,7 @@ estimate_input (const char *input, uint64_t *estimate_rtn, char **ifmt_rtn) if (strstr (line, "tar archive") == NULL) { fprintf (stderr, _("%s: %s: input is not a directory, tar archive or compressed tar archive\n"), - guestfs_int_program_name, input); + getprogname (), input); return -1; } @@ -507,7 +508,7 @@ estimate_input (const char *input, uint64_t *estimate_rtn, char **ifmt_rtn) } else { fprintf (stderr, _("%s: %s: unknown compressed input format (%s)\n"), - guestfs_int_program_name, input, line); + getprogname (), input, line); return -1; } @@ -630,7 +631,7 @@ parse_size (const char *str, uint64_t estimate, uint64_t *size_rtn) if (xerr != LONGINT_OK) { fprintf (stderr, _("%s: %s: invalid size parameter '%s' (%s returned %u)\n"), - guestfs_int_program_name, "parse_size", str, "xstrtoull", xerr); + getprogname (), "parse_size", str, "xstrtoull", xerr); return -1; } @@ -778,7 +779,7 @@ do_make_fs (const char *input, const char *output_str) if (r == -1) { /* Provide more guidance in the error message (RHBZ#823883). */ fprintf (stderr, "%s: 'mkfs' (create filesystem) operation failed: %s\n", - guestfs_int_program_name, guestfs_last_error (g)); + getprogname (), guestfs_last_error (g)); if (STREQ (type, "fat")) fprintf (stderr, "Instead of 'fat', try 'vfat' (long filenames) or 'msdos' (short filenames).\n"); else @@ -835,7 +836,7 @@ do_make_fs (const char *input, const char *output_str) return -1; } if (!WIFEXITED (status) || WEXITSTATUS (status) != 0) { - fprintf (stderr, _("%s: subprocess failed\n"), guestfs_int_program_name); + fprintf (stderr, _("%s: subprocess failed\n"), getprogname ()); return -1; } } diff --git a/mllib/getopt-c.c b/mllib/getopt-c.c index 29845f6a9..955dc1832 100644 --- a/mllib/getopt-c.c +++ b/mllib/getopt-c.c @@ -31,6 +31,7 @@ #include #include "xstrtol.h" +#include "getprogname.h" #include #include @@ -70,7 +71,7 @@ static void __attribute__((noreturn)) show_error (int status) { fprintf (stderr, _("Try `%s --help' or consult %s(1) for more information.\n"), - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname ()); exit (status); } @@ -189,13 +190,13 @@ strtoint (const char *arg) if (xstrtol (arg, NULL, 0, &num, "") != LONGINT_OK) { fprintf (stderr, _("%s: '%s' is not a numeric value.\n"), - guestfs_int_program_name, arg); + getprogname (), arg); show_error (EXIT_FAILURE); } if (num < -(1<<30) || num > (1<<30)-1) { fprintf (stderr, _("%s: %s: integer out of range\n"), - guestfs_int_program_name, arg); + getprogname (), arg); show_error (EXIT_FAILURE); } @@ -375,10 +376,10 @@ guestfs_int_mllib_getopt_parse (value argsv, value specsv, value anon_funv, valu if (!list_mem (v, optarg)) { if (c != 0) { fprintf (stderr, _("%s: '%s' is not allowed for -%c; allowed values are:\n"), - guestfs_int_program_name, optarg, c); + getprogname (), optarg, c); } else { fprintf (stderr, _("%s: '%s' is not allowed for %s%s; allowed values are:\n"), - guestfs_int_program_name, optarg, + getprogname (), optarg, vector_has_dashdash_opt (specv, longopts[option_index].name) ? "--" : "-", longopts[option_index].name); } diff --git a/p2v/conversion.c b/p2v/conversion.c index e8f57412b..3be9a45c2 100644 --- a/p2v/conversion.c +++ b/p2v/conversion.c @@ -54,6 +54,7 @@ #include #include "ignore-value.h" +#include "getprogname.h" #include "miniexpect.h" #include "p2v.h" @@ -268,7 +269,7 @@ start_conversion (struct config *config, #if DEBUG_STDERR fprintf (stderr, "%s: data connection for %s: SSH remote port %d, local port %d\n", - guestfs_int_program_name, device, + getprogname (), device, data_conns[i].nbd_remote_port, data_conns[i].nbd_local_port); #endif diff --git a/p2v/gui.c b/p2v/gui.c index 3ef1e7783..36bb65564 100644 --- a/p2v/gui.c +++ b/p2v/gui.c @@ -76,6 +76,7 @@ #pragma GCC diagnostic pop #include "ignore-value.h" +#include "getprogname.h" #include "p2v.h" @@ -275,7 +276,7 @@ create_connection_dialog (struct config *config) char port_str[64]; conn_dlg = gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW (conn_dlg), guestfs_int_program_name); + gtk_window_set_title (GTK_WINDOW (conn_dlg), getprogname ()); gtk_window_set_resizable (GTK_WINDOW (conn_dlg), FALSE); /* The main dialog area. */ @@ -683,7 +684,7 @@ static void about_button_clicked (GtkWidget *w, gpointer data) { gtk_show_about_dialog (GTK_WINDOW (conn_dlg), - "program-name", guestfs_int_program_name, + "program-name", getprogname (), "version", PACKAGE_VERSION_FULL " (" host_cpu ")", "copyright", "\u00A9 2009-2016 Red Hat Inc.", "comments", @@ -766,7 +767,7 @@ create_conversion_dialog (struct config *config) char memory_str[64]; conv_dlg = gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW (conv_dlg), guestfs_int_program_name); + gtk_window_set_title (GTK_WINDOW (conv_dlg), getprogname ()); gtk_window_set_resizable (GTK_WINDOW (conv_dlg), FALSE); /* XXX It would be nice not to have to set this explicitly, but * if we don't then Gtk chooses a very small window. @@ -1639,7 +1640,7 @@ create_running_dialog (void) GtkTextBuffer *buf; run_dlg = gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW (run_dlg), guestfs_int_program_name); + gtk_window_set_title (GTK_WINDOW (run_dlg), getprogname ()); gtk_window_set_resizable (GTK_WINDOW (run_dlg), FALSE); /* The main dialog area. */ @@ -2157,7 +2158,7 @@ notify_ui_callback (int type, const char *data) default: fprintf (stderr, "%s: unknown message during conversion: type=%d data=%s\n", - guestfs_int_program_name, type, data); + getprogname (), type, data); free (copy); } } diff --git a/p2v/kernel-cmdline.c b/p2v/kernel-cmdline.c index c10c04507..c53b9783b 100644 --- a/p2v/kernel-cmdline.c +++ b/p2v/kernel-cmdline.c @@ -29,6 +29,8 @@ #include #include +#include "getprogname.h" + #include "p2v.h" static void @@ -141,7 +143,7 @@ parse_cmdline_string (const char *cmdline) break; case VALUE_QUOTED: /* unterminated key="value" */ fprintf (stderr, "%s: warning: unterminated quoted string on kernel command line\n", - guestfs_int_program_name); + getprogname ()); add_string (&ret, &len, value, p-value); } diff --git a/p2v/kernel.c b/p2v/kernel.c index 793e2f619..e22510354 100644 --- a/p2v/kernel.c +++ b/p2v/kernel.c @@ -35,6 +35,8 @@ #include #include +#include "getprogname.h" + #include "p2v.h" static void notify_ui_callback (int type, const char *data); @@ -163,7 +165,7 @@ update_config_from_kernel_cmdline (struct config *config, char **cmdline) config->output_allocation = OUTPUT_ALLOCATION_PREALLOCATED; else fprintf (stderr, "%s: warning: don't know what p2v.oa=%s means\n", - guestfs_int_program_name, p); + getprogname (), p); } p = get_cmdline_key (cmdline, "p2v.oc"); @@ -230,7 +232,7 @@ kernel_conversion (struct config *config, char **cmdline, int cmdline_source) const char *err = get_conversion_error (); fprintf (stderr, "%s: error during conversion: %s\n", - guestfs_int_program_name, err); + getprogname (), err); p = get_cmdline_key (cmdline, "p2v.fail"); if (p) @@ -259,7 +261,7 @@ notify_ui_callback (int type, const char *data) switch (type) { case NOTIFY_LOG_DIR: ansi_magenta (stdout); - printf ("%s: remote log directory location: ", guestfs_int_program_name); + printf ("%s: remote log directory location: ", getprogname ()); ansi_red (stdout); fputs (data, stdout); ansi_restore (stdout); @@ -272,7 +274,7 @@ notify_ui_callback (int type, const char *data) case NOTIFY_STATUS: ansi_magenta (stdout); - printf ("%s: %s", guestfs_int_program_name, data); + printf ("%s: %s", getprogname (), data); ansi_restore (stdout); putchar ('\n'); break; @@ -280,7 +282,7 @@ notify_ui_callback (int type, const char *data) default: ansi_red (stdout); printf ("%s: unknown message during conversion: type=%d data=%s", - guestfs_int_program_name, type, data); + getprogname (), type, data); ansi_restore (stdout); putchar ('\n'); } diff --git a/p2v/main.c b/p2v/main.c index a37528097..f6014561b 100644 --- a/p2v/main.c +++ b/p2v/main.c @@ -44,6 +44,7 @@ #pragma GCC diagnostic pop #include "ignore-value.h" +#include "getprogname.h" #include "p2v.h" char **all_disks; @@ -84,7 +85,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: Convert a physical machine to use KVM\n" "Copyright (C) 2009-2016 Red Hat Inc.\n" @@ -99,8 +100,8 @@ usage (int status) " -v|--verbose Verbose messages\n" " -V|--version Display version and exit\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name); + getprogname (), getprogname (), + getprogname ()); } exit (status); } @@ -198,7 +199,7 @@ main (int argc, char *argv[]) break; case 'V': - printf ("%s %s\n", guestfs_int_program_name, PACKAGE_VERSION_FULL); + printf ("%s %s\n", getprogname (), PACKAGE_VERSION_FULL); exit (EXIT_SUCCESS); case HELP_OPTION: @@ -211,7 +212,7 @@ main (int argc, char *argv[]) if (optind != argc) { fprintf (stderr, _("%s: unused arguments on the command line\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } diff --git a/p2v/ssh.c b/p2v/ssh.c index d10a12179..5c657edb9 100644 --- a/p2v/ssh.c +++ b/p2v/ssh.c @@ -54,6 +54,7 @@ #include #include "ignore-value.h" +#include "getprogname.h" #include "miniexpect.h" #include "p2v.h" @@ -140,7 +141,7 @@ compile_regexps (void) pcre_fullinfo ((re), NULL, PCRE_INFO_OKPARTIAL, &p); \ if (p != 1) { \ fprintf (stderr, "%s: %s:%d: internal error: pattern '%s' cannot be used for partial matching\n", \ - guestfs_int_program_name, \ + getprogname (), \ __FILE__, __LINE__, (pattern)); \ abort (); \ } \ @@ -778,7 +779,7 @@ test_connection (struct config *config) v2v_version = strndup (&h->buffer[ovector[2]], ovector[3]-ovector[2]); #if DEBUG_STDERR fprintf (stderr, "%s: remote virt-v2v version: %s\n", - guestfs_int_program_name, v2v_version); + getprogname (), v2v_version); #endif break; @@ -860,7 +861,7 @@ test_connection (struct config *config) case 101: /* virt-v2v supports --colours option */ #if DEBUG_STDERR fprintf (stderr, "%s: remote virt-v2v supports --colours option\n", - guestfs_int_program_name); + getprogname ()); #endif feature_colours_option = 1; break; @@ -974,7 +975,7 @@ add_option (const char *type, char ***drivers, const char *name, size_t len) #if DEBUG_STDERR fprintf (stderr, "%s: remote virt-v2v supports %s driver %s\n", - guestfs_int_program_name, type, (*drivers)[n-1]); + getprogname (), type, (*drivers)[n-1]); #endif } diff --git a/rescue/rescue.c b/rescue/rescue.c index 0f83f045c..0c0439657 100644 --- a/rescue/rescue.c +++ b/rescue/rescue.c @@ -32,6 +32,7 @@ #include "ignore-value.h" #include "xvasprintf.h" +#include "getprogname.h" #include "guestfs.h" #include "options.h" @@ -56,7 +57,7 @@ usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), - guestfs_int_program_name); + getprogname ()); else { printf (_("%s: Run a rescue shell on a virtual machine\n" "Copyright (C) 2009-2016 Red Hat Inc.\n" @@ -82,8 +83,8 @@ usage (int status) " -w|--rw Mount read-write\n" " -x Trace libguestfs API calls\n" "For more information, see the manpage %s(1).\n"), - guestfs_int_program_name, guestfs_int_program_name, - guestfs_int_program_name, guestfs_int_program_name); + getprogname (), getprogname (), + getprogname (), getprogname ()); } exit (status); } @@ -279,7 +280,7 @@ main (int argc, char *argv[]) fprintf (stderr, _("%s: error: extra argument '%s' on command line.\n" "Make sure to specify the argument for --format or --scratch " "like '--format=%s'.\n"), - guestfs_int_program_name, argv[optind], argv[optind]); + getprogname (), argv[optind], argv[optind]); usage (EXIT_FAILURE); } @@ -288,7 +289,7 @@ main (int argc, char *argv[]) /* User must have specified some drives. */ if (drvs == NULL) { fprintf (stderr, _("%s: error: you must specify at least one -a or -d option.\n"), - guestfs_int_program_name); + getprogname ()); usage (EXIT_FAILURE); } @@ -306,7 +307,7 @@ main (int argc, char *argv[]) STRPREFIX (backend, "libvirt:")) { fprintf (stderr, _("%s: warning: virt-rescue doesn't work with the libvirt backend\n" "at the moment. As a workaround, forcing backend = 'direct'.\n"), - guestfs_int_program_name); + getprogname ()); if (guestfs_set_backend (g, "direct") == -1) exit (EXIT_FAILURE); } diff --git a/src/guestfs-internal-frontend.h b/src/guestfs-internal-frontend.h index 567693456..da7709a7c 100644 --- a/src/guestfs-internal-frontend.h +++ b/src/guestfs-internal-frontend.h @@ -129,17 +129,6 @@ extern void guestfs_int_cleanup_pclose (void *ptr); */ #include "guestfs-internal-frontend-cleanups.h" -/* Current program name. Note must be included in all files - * that want to use 'guestfs_int_program_name'. - */ -#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME == 1 -# define guestfs_int_program_name program_invocation_short_name -#elif HAVE_GETPROGNAME -# define guestfs_int_program_name getprogname() -#else -# define guestfs_int_program_name "libguestfs" -#endif - /* Close all file descriptors matching the condition. */ #define close_file_descriptors(cond) do { \ int max_fd = sysconf (_SC_OPEN_MAX); \ diff --git a/src/handle.c b/src/handle.c index 81a3cb1f2..b28a1e067 100644 --- a/src/handle.c +++ b/src/handle.c @@ -34,6 +34,7 @@ #include "glthread/lock.h" #include "ignore-value.h" #include "c-ctype.h" +#include "getprogname.h" #include "guestfs.h" #include "guestfs-internal.h" @@ -120,15 +121,11 @@ guestfs_create_flags (unsigned flags, ...) if (!g->hv) goto error; /* Get program name. */ -#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME == 1 - if (STRPREFIX (program_invocation_short_name, "lt-")) + if (STRPREFIX (getprogname (), "lt-")) /* Remove libtool (lt-*) prefix from short name. */ - g->program = strdup (program_invocation_short_name + 3); + g->program = strdup (getprogname () + 3); else - g->program = strdup (program_invocation_short_name); -#else - g->program = strdup (""); -#endif + g->program = strdup (getprogname ()); if (!g->program) goto error; g->identifier = strdup (""); diff --git a/tests/charsets/test-charset-fidelity.c b/tests/charsets/test-charset-fidelity.c index 9a477ce3f..952256edd 100644 --- a/tests/charsets/test-charset-fidelity.c +++ b/tests/charsets/test-charset-fidelity.c @@ -33,6 +33,8 @@ #include "guestfs.h" #include "guestfs-internal-frontend.h" +#include "getprogname.h" + static const char ourenvvar[] = "SKIP_TEST_CHARSET_FIDELITY"; struct filesystem { @@ -83,7 +85,7 @@ main (int argc, char *argv[]) str = getenv (ourenvvar); if (str && guestfs_int_is_true (str) > 0) { printf ("%s: test skipped because environment variable is set.\n", - guestfs_int_program_name); + getprogname ()); exit (77); } diff --git a/tests/mount-local/test-parallel-mount-local.c b/tests/mount-local/test-parallel-mount-local.c index 37b2b3db1..3e5d95c23 100644 --- a/tests/mount-local/test-parallel-mount-local.c +++ b/tests/mount-local/test-parallel-mount-local.c @@ -42,6 +42,7 @@ #include "estimate-max-threads.h" #include "ignore-value.h" +#include "getprogname.h" #define TOTAL_TIME 60 /* Seconds, excluding launch. */ #define DEBUG 1 /* Print overview debugging messages. */ @@ -96,13 +97,13 @@ main (int argc, char *argv[]) skip = getenv ("SKIP_TEST_PARALLEL_MOUNT_LOCAL"); if (skip && guestfs_int_is_true (skip) > 0) { fprintf (stderr, "%s: test skipped because environment variable set.\n", - guestfs_int_program_name); + getprogname ()); exit (77); } if (access ("/dev/fuse", W_OK) == -1) { fprintf (stderr, "%s: test skipped because /dev/fuse is not writable.\n", - guestfs_int_program_name); + getprogname ()); exit (77); } diff --git a/tests/parallel/test-parallel.c b/tests/parallel/test-parallel.c index e0d1385ae..20100d17f 100644 --- a/tests/parallel/test-parallel.c +++ b/tests/parallel/test-parallel.c @@ -38,6 +38,7 @@ #include "guestfs-internal-frontend.h" #include "ignore-value.h" +#include "getprogname.h" #define TOTAL_TIME 600 /* Seconds, excluding launch. */ #define NR_THREADS 5 @@ -79,7 +80,7 @@ main (int argc, char *argv[]) slow = getenv ("SLOW"); if (!slow || guestfs_int_is_true (slow) <= 0) { fprintf (stderr, "%s: use 'make check-slow' to run this test.\n", - guestfs_int_program_name); + getprogname ()); exit (77); } @@ -87,7 +88,7 @@ main (int argc, char *argv[]) skip = getenv ("SKIP_TEST_PARALLEL"); if (skip && guestfs_int_is_true (skip) > 0) { fprintf (stderr, "%s: test skipped because environment variable set.\n", - guestfs_int_program_name); + getprogname ()); exit (77); } diff --git a/tests/regressions/Makefile.am b/tests/regressions/Makefile.am index 32bbc83e4..dc91c6092 100644 --- a/tests/regressions/Makefile.am +++ b/tests/regressions/Makefile.am @@ -112,15 +112,18 @@ rhbz501893_LDADD = \ rhbz790721_SOURCES = rhbz790721.c rhbz790721_CPPFLAGS = \ + -I$(top_srcdir)/gnulib/lib -I$(top_builddir)/gnulib/lib \ -I$(top_srcdir)/src -I$(top_builddir)/src rhbz790721_CFLAGS = \ -pthread \ $(WARN_CFLAGS) $(WERROR_CFLAGS) rhbz790721_LDADD = \ - $(top_builddir)/src/libguestfs.la + $(top_builddir)/src/libguestfs.la \ + $(top_builddir)/gnulib/lib/libgnu.la rhbz914931_SOURCES = rhbz914931.c rhbz914931_CPPFLAGS = \ + -I$(top_srcdir)/gnulib/lib -I$(top_builddir)/gnulib/lib \ -I$(top_srcdir)/src -I$(top_builddir)/src \ -DGUESTFS_PRIVATE=1 rhbz914931_CFLAGS = \ @@ -129,7 +132,8 @@ rhbz914931_CFLAGS = \ rhbz914931_LDADD = \ $(top_builddir)/src/libutils.la \ $(LTLIBINTL) \ - $(top_builddir)/src/libguestfs.la + $(top_builddir)/src/libguestfs.la \ + $(top_builddir)/gnulib/lib/libgnu.la rhbz1055452_SOURCES = rhbz1055452.c rhbz1055452_CPPFLAGS = \ diff --git a/tests/regressions/rhbz790721.c b/tests/regressions/rhbz790721.c index e2178e5e6..2dfcd2768 100644 --- a/tests/regressions/rhbz790721.c +++ b/tests/regressions/rhbz790721.c @@ -45,6 +45,8 @@ #include "guestfs.h" #include "guestfs-internal-frontend.h" +#include "getprogname.h" + /* Number of worker threads running the test. */ #define NR_THREADS 20 @@ -71,7 +73,7 @@ main (int argc, char *argv[]) } if (STRNEQ (backend, "direct")) { fprintf (stderr, "%s: test skipped because backend isn't 'direct'.\n", - guestfs_int_program_name); + getprogname ()); free (backend); guestfs_close (g); exit (77); diff --git a/tests/regressions/rhbz914931.c b/tests/regressions/rhbz914931.c index 61b81ba7e..93878dbf5 100644 --- a/tests/regressions/rhbz914931.c +++ b/tests/regressions/rhbz914931.c @@ -33,6 +33,8 @@ #include "guestfs.h" #include "guestfs-internal-frontend.h" +#include "getprogname.h" + int main (int argc, char *argv[]) { @@ -44,7 +46,7 @@ main (int argc, char *argv[]) str = getenv ("SKIP_TEST_RHBZ914931"); if (str && guestfs_int_is_true (str) > 0) { printf ("%s: test skipped because environment variable is set.\n", - guestfs_int_program_name); + getprogname ()); exit (77); } diff --git a/utils/boot-analysis/boot-analysis.c b/utils/boot-analysis/boot-analysis.c index 2b042d920..04b3bddf3 100644 --- a/utils/boot-analysis/boot-analysis.c +++ b/utils/boot-analysis/boot-analysis.c @@ -45,6 +45,8 @@ #include "boot-analysis.h" #include "boot-analysis-utils.h" +#include "getprogname.h" + /* Activities taking longer than this % of the total time, except * those flagged as LONG_ACTIVITY, are highlighted in red. */ @@ -167,13 +169,13 @@ main (int argc, char *argv[]) break; } fprintf (stderr, "%s: unknown long option: %s (%d)\n", - guestfs_int_program_name, long_options[option_index].name, option_index); + getprogname (), long_options[option_index].name, option_index); exit (EXIT_FAILURE); case 'm': if (sscanf (optarg, "%d", &memsize) != 1) { fprintf (stderr, "%s: could not parse memsize parameter: %s\n", - guestfs_int_program_name, optarg); + getprogname (), optarg); exit (EXIT_FAILURE); } break; diff --git a/utils/boot-benchmark/boot-benchmark.c b/utils/boot-benchmark/boot-benchmark.c index fb946dea0..73da722ff 100644 --- a/utils/boot-benchmark/boot-benchmark.c +++ b/utils/boot-benchmark/boot-benchmark.c @@ -38,6 +38,8 @@ #include "boot-analysis-utils.h" +#include "getprogname.h" + #define NR_WARMUP_PASSES 3 #define NR_TEST_PASSES 10 @@ -102,19 +104,19 @@ main (int argc, char *argv[]) else if (STREQ (long_options[option_index].name, "smp")) { if (sscanf (optarg, "%d", &smp) != 1) { fprintf (stderr, "%s: could not parse smp parameter: %s\n", - guestfs_int_program_name, optarg); + getprogname (), optarg); exit (EXIT_FAILURE); } break; } fprintf (stderr, "%s: unknown long option: %s (%d)\n", - guestfs_int_program_name, long_options[option_index].name, option_index); + getprogname (), long_options[option_index].name, option_index); exit (EXIT_FAILURE); case 'm': if (sscanf (optarg, "%d", &memsize) != 1) { fprintf (stderr, "%s: could not parse memsize parameter: %s\n", - guestfs_int_program_name, optarg); + getprogname (), optarg); exit (EXIT_FAILURE); } break; diff --git a/utils/qemu-boot/qemu-boot.c b/utils/qemu-boot/qemu-boot.c index 270301445..d99fa3c1c 100644 --- a/utils/qemu-boot/qemu-boot.c +++ b/utils/qemu-boot/qemu-boot.c @@ -39,6 +39,8 @@ #include "guestfs-internal-frontend.h" #include "estimate-max-threads.h" +#include "getprogname.h" + #define MIN(a,b) ((a)<(b)?(a):(b)) /* Maximum number of threads we would ever run. Note this should not @@ -204,7 +206,7 @@ run_test (size_t P) err = pthread_join (threads[i], &status); if (err != 0) { fprintf (stderr, "%s: pthread_join[%zu]: %s\n", - guestfs_int_program_name, i, strerror (err)); + getprogname (), i, strerror (err)); errors++; } if (*(int *)status == -1) @@ -235,7 +237,7 @@ start_thread (void *thread_data_vp) err = pthread_mutex_lock (&mutex); if (err != 0) { fprintf (stderr, "%s: pthread_mutex_lock: %s", - guestfs_int_program_name, strerror (err)); + getprogname (), strerror (err)); goto error; } @@ -252,7 +254,7 @@ start_thread (void *thread_data_vp) err = pthread_mutex_unlock (&mutex); if (err != 0) { fprintf (stderr, "%s: pthread_mutex_unlock: %s", - guestfs_int_program_name, strerror (err)); + getprogname (), strerror (err)); goto error; } @@ -320,7 +322,7 @@ start_thread (void *thread_data_vp) if (errors > 0) { fprintf (stderr, "%s: thread %d: %u errors were ignored\n", - guestfs_int_program_name, thread_data->thread_num, errors); + getprogname (), thread_data->thread_num, errors); goto error; } diff --git a/utils/qemu-speed-test/qemu-speed-test.c b/utils/qemu-speed-test/qemu-speed-test.c index 091959436..54875fa46 100644 --- a/utils/qemu-speed-test/qemu-speed-test.c +++ b/utils/qemu-speed-test/qemu-speed-test.c @@ -41,6 +41,8 @@ #include "guestfs.h" #include "guestfs-internal-frontend.h" +#include "getprogname.h" + static void test_virtio_serial (void); static void test_block_device (void); @@ -133,7 +135,7 @@ main (int argc, char *argv[]) } else { fprintf (stderr, "%s: unknown long option: %s (%d)\n", - guestfs_int_program_name, long_options[option_index].name, option_index); + getprogname (), long_options[option_index].name, option_index); exit (EXIT_FAILURE); } break; @@ -142,7 +144,7 @@ main (int argc, char *argv[]) if (sscanf (optarg, "%d", &max_time_override) != 1 || max_time_override < 0) { fprintf (stderr, "%s: -t: argument is not a positive integer\n", - guestfs_int_program_name); + getprogname ()); exit (EXIT_FAILURE); } break; @@ -157,7 +159,7 @@ main (int argc, char *argv[]) if (optind != argc) { fprintf (stderr, "%s: extra arguments found on the command line\n", - guestfs_int_program_name); + getprogname ()); exit (EXIT_FAILURE); } @@ -312,14 +314,14 @@ test_virtio_serial (void) if (r == -1 && guestfs_last_errno (g) != EINTR) { fprintf (stderr, "%s: expecting upload command to return EINTR\n%s\n", - guestfs_int_program_name, guestfs_last_error (g)); + getprogname (), guestfs_last_error (g)); exit (EXIT_FAILURE); } if (rate == -1) { rate_error: fprintf (stderr, "%s: internal error: progress callback was not called! (r=%d, errno=%d)\n", - guestfs_int_program_name, + getprogname (), r, guestfs_last_errno (g)); exit (EXIT_FAILURE); } @@ -348,7 +350,7 @@ test_virtio_serial (void) if (r == -1 && guestfs_last_errno (g) != EINTR) { fprintf (stderr, "%s: expecting download command to return EINTR\n%s\n", - guestfs_int_program_name, guestfs_last_error (g)); + getprogname (), guestfs_last_error (g)); exit (EXIT_FAILURE); } @@ -417,7 +419,7 @@ test_block_device (void) exit (EXIT_FAILURE); if (devices[0] == NULL) { fprintf (stderr, "%s: expected guestfs_list_devices to return at least 1 device\n", - guestfs_int_program_name); + getprogname ()); exit (EXIT_FAILURE); } @@ -433,7 +435,7 @@ test_block_device (void) if (sscanf (r, "%" SCNi64, &bytes_written) != 1) { fprintf (stderr, "%s: could not parse device_speed output\n", - guestfs_int_program_name); + getprogname ()); exit (EXIT_FAILURE); } @@ -452,7 +454,7 @@ test_block_device (void) if (sscanf (r, "%" SCNi64, &bytes_read) != 1) { fprintf (stderr, "%s: could not parse device_speed output\n", - guestfs_int_program_name); + getprogname ()); exit (EXIT_FAILURE); }