irqbalance/bugfix-fgets-will-get-a-redundant-new-line.patch
2019-09-30 10:53:30 -04:00

51 lines
1.6 KiB
Diff

From 0c8ecab9e6f5fae5860e7fbc795e988c112edede Mon Sep 17 00:00:00 2001
From: xiashuang <xiashuang1@huawei.com>
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