X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmount%2Ferror.c;h=147e919bd56fdd29649ed205f7233ba66e6681b4;hp=62f6850660b11dab725d53a03094bf359b9cf70b;hb=52dff26c60c07cf1b4fbf8fbd3a1eab7ba90405f;hpb=28e4224b9bbfc355c83e17df74c47221afacd560 diff --git a/utils/mount/error.c b/utils/mount/error.c index 62f6850..147e919 100644 --- a/utils/mount/error.c +++ b/utils/mount/error.c @@ -23,7 +23,10 @@ * + Proper support for internationalization */ -#include "config.h" +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include @@ -67,14 +70,25 @@ static int rpc_strerror(int spos) tmp = &errbuf[spos]; if (cf_stat == RPC_SYSTEMERROR) pos = snprintf(tmp, (erreob - tmp), - "System Error: %s", strerror(cf_errno)); + _("System Error: %s"), + strerror(cf_errno)); else - pos = snprintf(tmp, (erreob - tmp), "RPC Error:%s", estr); + pos = snprintf(tmp, (erreob - tmp), + _("RPC Error:%s"), estr); } return pos; } -void mount_errors(char *server, int will_retry, int bg) +/** + * rpc_mount_errors - log an RPC error that occurred during a user-space mount + * @server: C string containing name of server we are attempting to mount + * @will_retry: one indicates mount will retry at some later point + * @bg: one indicates this is a background mount + * + * Extracts the error code from the user-space RPC library, and reports it + * on stderr (fg mount) or in the system log (bg mount). + */ +void rpc_mount_errors(char *server, int will_retry, int bg) { int pos = 0; char *tmp; @@ -83,40 +97,125 @@ void mount_errors(char *server, int will_retry, int bg) tmp = &errbuf[pos]; if (bg) pos = snprintf(tmp, (erreob - tmp), - "mount to NFS server '%s' failed: ", server); + _("mount to NFS server '%s' failed: "), + server); else pos = snprintf(tmp, (erreob - tmp), - "mount: mount to NFS server '%s' failed: ", server); + _("%s: mount to NFS server '%s' failed: "), + progname, server); tmp = &errbuf[pos]; if (rpc_createerr.cf_stat == RPC_TIMEDOUT) { - pos = snprintf(tmp, (erreob - tmp), "timed out %s", - will_retry ? "(retrying)" : "(giving up)"); + if (will_retry) + pos = snprintf(tmp, (erreob - tmp), + _("timed out, retrying")); + else + pos = snprintf(tmp, (erreob - tmp), + _("timed out, giving up")); } else { pos += rpc_strerror(pos); tmp = &errbuf[pos]; if (bg) { - pos = snprintf(tmp, (erreob - tmp), " %s", - will_retry ? "(retrying)" : "(giving up)"); + if (will_retry) + pos = snprintf(tmp, (erreob - tmp), + _(", retrying")); + else + pos = snprintf(tmp, (erreob - tmp), + _(", giving up")); + } + } + + if (bg) { + if (onlyonce++ < 1) + openlog("mount", LOG_CONS|LOG_PID, LOG_AUTH); + syslog(LOG_ERR, "%s", errbuf); + } else + fprintf(stderr, "%s\n", errbuf); +} + +/** + * sys_mount_errors - log an error that occurred during a mount system call + * @server: C string containing name of server we are attempting to mount + * @error: errno value to report + * @will_retry: one indicates mount will retry at some later point + * @bg: one indicates this is a background mount + * + * Passed an errno value generated by a mount system call, and reports it + * on stderr (fg mount) or in the system log (bg mount). + */ +void sys_mount_errors(char *server, int error, int will_retry, int bg) +{ + int pos = 0; + char *tmp; + static int onlyonce = 0; + + tmp = &errbuf[pos]; + if (bg) + pos = snprintf(tmp, (erreob - tmp), + _("mount to NFS server '%s' failed: "), + server); + else + pos = snprintf(tmp, (erreob - tmp), + _("%s: mount to NFS server '%s' failed: "), + progname, server); + + tmp = &errbuf[pos]; + if (error == ETIMEDOUT) { + if (will_retry) + pos = snprintf(tmp, (erreob - tmp), + _("timed out, retrying")); + else + pos = snprintf(tmp, (erreob - tmp), + _("timed out, giving up")); + } else { + if (bg) { + if (will_retry) + pos = snprintf(tmp, (erreob - tmp), + _("%s, retrying"), + strerror(error)); + else + pos = snprintf(tmp, (erreob - tmp), + _("%s, giving up"), + strerror(error)); } } + if (bg) { if (onlyonce++ < 1) openlog("mount", LOG_CONS|LOG_PID, LOG_AUTH); - syslog(LOG_ERR, "%s.", errbuf); + syslog(LOG_ERR, "%s", errbuf); } else - fprintf(stderr, "%s.\n", errbuf); + fprintf(stderr, "%s\n", errbuf); } +/** + * mount_error - report a foreground mount error + * @spec: C string containing the device name being mounted + * @mount_point: C string containing the pathname of the local mounted on dir + * @error: errno value to report + * + */ void mount_error(const char *spec, const char *mount_point, int error) { switch(error) { + case EACCES: + nfs_error(_("%s: access denied by server while mounting %s"), + progname, spec); + break; + case EINVAL: + nfs_error(_("%s: an incorrect mount option was specified"), progname); + break; + case EOPNOTSUPP: + nfs_error(_("%s: requested NFS version or transport" + " protocol is not supported"), + progname); + break; case ENOTDIR: nfs_error(_("%s: mount point %s is not a directory"), progname, mount_point); break; case EBUSY: - nfs_error(_("%s: %s is already mounted or busy"), + nfs_error(_("%s: %s is busy or already mounted"), progname, mount_point); break; case ENOENT: @@ -128,6 +227,13 @@ void mount_error(const char *spec, const char *mount_point, int error) nfs_error(_("%s: mount point %s does not exist"), progname, mount_point); break; + case ESPIPE: + rpc_mount_errors((char *)spec, 0, 0); + break; + case EIO: + case EFAULT: + nfs_error(_("%s: internal error"), progname); + break; default: nfs_error(_("%s: %s"), progname, strerror(error)); @@ -135,7 +241,10 @@ void mount_error(const char *spec, const char *mount_point, int error) } /* - * Report a failed umount + * umount_error - report a failed umount request + * @err: errno value to report + * @dev: C string containing the pathname of the local mounted on dir + * */ void umount_error(int err, const char *dev) {