From 0c8ecab9e6f5fae5860e7fbc795e988c112edede Mon Sep 17 00:00:00 2001 From: xiashuang Date: Thu, 25 Jul 2019 22:38:32 -0400 Subject: [PATCH] fix fgets will get a redundant new line this patch fix a bug introduced by bugfix-force-irq-into-rebalance-list-when-irq-removed-and-reinserted.patch. the previous patch use fgets to get a directory name from buffer. but fgets will get a redundant newline, so the directory name are always invalid, this patch just remove the '\n'. --- classify.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/classify.c b/classify.c index e61c39b..440576f 100644 --- a/classify.c +++ b/classify.c @@ -747,6 +747,7 @@ void find_irq_dev_path(int irq, char *dirname, int length) char path[PATH_MAX]; char buffer[128]; char *brc = NULL; + size_t dirlen; memset(dirname, 0, length); /* Return defaults if irq is 0 */ @@ -762,8 +763,10 @@ void find_irq_dev_path(int irq, char *dirname, int length) } brc = fgets(buffer, 128, output); - if (brc) { + /* fgets will get a redundant \n */ + if (brc && (dirlen = strcspn(brc, "\n")) > 0) { log(TO_CONSOLE, LOG_INFO, "msi_irqs IRQ %d dirname is %s\n", irq, brc); + brc[dirlen] = '\0'; strncpy(dirname, brc, length); pclose(output); return; @@ -779,8 +782,9 @@ void find_irq_dev_path(int irq, char *dirname, int length) } brc = fgets(buffer, 128, output); - if (brc) { + if (brc && (dirlen = strcspn(brc, "\n")) > 0) { log(TO_CONSOLE, LOG_INFO, "IRQ %d dirname is %s\n", irq, brc); + brc[dirlen] = '\0'; strncpy(dirname, brc, length); pclose(output); return; -- 1.8.3.1