From: Jaroslav Kysela Date: Thu, 25 Feb 2010 08:19:45 +0000 (+0100) Subject: alsactl: improve -d to get warnings and store exitcode to runstate file X-Git-Tag: v1.0.23~4 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=5c35aa8b69ae67caf094fb3f41a1b270d4eb5b2d;p=alsa-utils.git alsactl: improve -d to get warnings and store exitcode to runstate file Also, make the initialization & restore logic for one card similar to multiple card initialization & restore. Signed-off-by: Jaroslav Kysela --- diff --git a/alsactl/alsactl.h b/alsactl/alsactl.h index 89ad295..be90efb 100644 --- a/alsactl/alsactl.h +++ b/alsactl/alsactl.h @@ -34,16 +34,16 @@ extern char *statefile; #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) #define cerror(cond, ...) do {\ - if (cond) { \ - fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ + if (cond || debugflag) { \ + fprintf(stderr, "%s%s: %s:%d: ", debugflag ? "WARNING: " : "", command, __FUNCTION__, __LINE__); \ fprintf(stderr, __VA_ARGS__); \ putc('\n', stderr); \ } \ } while (0) #else #define cerror(cond, args...) do {\ - if (cond) { \ - fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ + if (cond || debugflag) { \ + fprintf(stderr, "%s%s: %s:%d: ", debugflag ? "WARNING: " : "", command, __FUNCTION__, __LINE__); \ fprintf(stderr, ##args); \ putc('\n', stderr); \ } \ @@ -78,7 +78,7 @@ int generate_names(const char *cfgfile); int file_map(const char *filename, char **buf, size_t *bufsize); void file_unmap(void *buf, size_t bufsize); size_t line_width(const char *buf, size_t bufsize, size_t pos); -void initfailed(int cardnumber, const char *reason); +void initfailed(int cardnumber, const char *reason, int exitcode); static inline int hextodigit(int c) { diff --git a/alsactl/state.c b/alsactl/state.c index 635a999..582fdf9 100644 --- a/alsactl/state.c +++ b/alsactl/state.c @@ -1582,9 +1582,9 @@ int load_state(const char *file, const char *initfile, const char *cardname, err = init(initfile, cardname1); if (err < 0) { finalerr = err; - initfailed(card, "init"); + initfailed(card, "init", err); } - initfailed(card, "restore"); + initfailed(card, "restore", -ENOENT); } if (first) finalerr = 0; /* no cards, no error code */ @@ -1617,14 +1617,14 @@ int load_state(const char *file, const char *initfile, const char *cardname, sprintf(cardname1, "%i", card); err = init(initfile, cardname1); if (err < 0) { - initfailed(card, "init"); + initfailed(card, "init", err); finalerr = err; } } if ((err = set_controls(card, config, 1))) { if (!force_restore) finalerr = err; - initfailed(card, "restore"); + initfailed(card, "restore", err); } } } else { @@ -1639,12 +1639,12 @@ int load_state(const char *file, const char *initfile, const char *cardname, if (do_init && set_controls(cardno, config, 0)) { err = init(initfile, cardname); if (err < 0) { - initfailed(cardno, "init"); - return err; + initfailed(cardno, "init", err); + finalerr = err; } } if ((err = set_controls(cardno, config, 1))) { - initfailed(cardno, "restore"); + initfailed(cardno, "restore", err); if (!force_restore) return err; } diff --git a/alsactl/utils.c b/alsactl/utils.c index ab4dbd4..a27eb6e 100644 --- a/alsactl/utils.c +++ b/alsactl/utils.c @@ -79,19 +79,23 @@ size_t line_width(const char *buf, size_t bufsize, size_t pos) return count - pos; } -void initfailed(int cardnumber, const char *reason) +void initfailed(int cardnumber, const char *reason, int exitcode) { int fp; char *str; + char sexitcode[16]; if (statefile == NULL) return; if (snd_card_get_name(cardnumber, &str) < 0) return; + sprintf(sexitcode, "%i", exitcode); fp = open(statefile, O_WRONLY|O_CREAT|O_APPEND, 0644); write(fp, str, strlen(str)); write(fp, ":", 1); write(fp, reason, strlen(reason)); + write(fp, ":", 1); + write(fp, sexitcode, strlen(sexitcode)); write(fp, "\n", 1); close(fp); free(str);