From: Sebastien GODARD Date: Fri, 24 Jul 2020 14:15:29 +0000 (+0200) Subject: Update non regression code to handle big minor numbers X-Git-Tag: v12.4.0~19 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9c8e5cae172f8859323db478e213e710f3deed06;p=sysstat Update non regression code to handle big minor numbers Signed-off-by: Sebastien GODARD --- diff --git a/ioconf.c b/ioconf.c index 8f7566a..94af735 100644 --- a/ioconf.c +++ b/ioconf.c @@ -489,8 +489,8 @@ char *transform_devmapname(unsigned int major, unsigned int minor) if (__stat(filen, &aux) == 0) { /* Get its minor and major numbers */ - dm_major = major(aux.st_rdev); - dm_minor = minor(aux.st_rdev); + dm_major = __major(aux.st_rdev); + dm_minor = __minor(aux.st_rdev); if ((dm_minor == minor) && (dm_major == major)) { strncpy(name, dp->d_name, sizeof(name)); diff --git a/iostat.c b/iostat.c index dcf23e2..8ef2249 100644 --- a/iostat.c +++ b/iostat.c @@ -318,8 +318,8 @@ int get_major_minor_nr(char filename[], int *major, int *minor) if (__stat(dfile, &statbuf) < 0) return -1; - *major = major(statbuf.st_rdev); - *minor = minor(statbuf.st_rdev); + *major = __major(statbuf.st_rdev); + *minor = __minor(statbuf.st_rdev); return 0; } diff --git a/systest.c b/systest.c index 0f60d82..a83b303 100644 --- a/systest.c +++ b/systest.c @@ -195,7 +195,7 @@ int virtual_stat(const char *name, struct stat *statbuf) int major, minor; if (!strcmp(name, VIRTUALHD)) { - statbuf->st_rdev = (253 << 8) + 2; + statbuf->st_rdev = (253 << MINORBITS) + 2; return 0; } @@ -206,7 +206,7 @@ int virtual_stat(const char *name, struct stat *statbuf) if (fgets(line, sizeof(line), fp) != NULL) { sscanf(line, "%d %d", &major, &minor); - statbuf->st_rdev = (major << 8) + minor; + statbuf->st_rdev = (major << MINORBITS) + minor; } fclose(fp); diff --git a/systest.h b/systest.h index c9ad265..f1cdbcd 100644 --- a/systest.h +++ b/systest.h @@ -12,6 +12,12 @@ #include #include +#ifndef MINORBITS +#define MINORBITS 20 +#endif +#define S_MAXMINOR ((1U << MINORBITS) - 1) +#define S_MAXMAJOR ((1U << (32 - MINORBITS)) - 1) + /* Test mode: Use alternate files and syscalls */ #ifdef TEST @@ -30,6 +36,8 @@ #define __gettimeofday(m,n) get_day_time(m) #define __getpwuid(m) get_usrname(m) #define __fork(m) get_known_pid(m) +#define __major(m) (m >> MINORBITS) +#define __minor(m) (m & S_MAXMINOR) #define ROOTDIR "./tests/root" #define ROOTFILE "root" @@ -55,6 +63,8 @@ #define __gettimeofday(m,n) gettimeofday(m,n) #define __getpwuid(m) getpwuid(m) #define __fork(m) fork(m) +#define __major(m) major(m) +#define __minor(m) minor(m) #endif