Skip to content

Commit 7d363e7

Browse files
committed
chcp: fix inverted logic in argument parsing
Since commit 7aae659 ("chcp: fix segfault"), the logic to distinguish between the optional device argument and the checkpoint number list has been inverted. The code intended to check if the current argument is *not* a valid checkpoint number (indicating it is a device string). However, due to a logic error in that commit, if the argument is not a number (e.g. "/dev/sda1"), it sets the device to NULL (implying no device argument). Conversely, if it is a number, it incorrectly consumes it as a device name. This causes chcp to fail with "invalid checkpoint number" when a device is explicitly specified, because the parser fails to advance past the device string, subsequently attempting to parse the device name as a checkpoint number in the main loop. Fix this regression by correcting the if-else branch assignments. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com> Fixes: 7aae659 ("chcp: fix segfault")
1 parent fd6402a commit 7d363e7

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

bin/chcp.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,9 @@ int main(int argc, char *argv[])
118118
modestr = argv[optind++];
119119
cno = nilfs_parse_cno(argv[optind], &endptr, CHCP_BASE);
120120
if (cno >= NILFS_CNO_MAX || *endptr != '\0')
121-
dev = NULL;
122-
else
123121
dev = argv[optind++];
122+
else
123+
dev = NULL;
124124
}
125125

126126
if (strcmp(modestr, CHCP_MODE_CP) == 0)

0 commit comments

Comments
 (0)