2
0
mirror of https://github.com/lm-sensors/lm-sensors synced 2025-08-23 10:27:50 +00:00
Jean Delvare 8fb3922219 isadump: Fix compilation under musl
From Brendan Heading:

You may be aware of the musl C-library implementation, which tries to
be strictly standards compliant, avoids non-standard extensions, etc.
Some distributions have adopted it as their standard C library, in
others (such as buildroot) it is a configuration alternative.

Vanilla lm-sensors does not compile under musl, due to the following
excerpt which appears in four different places. The code is checking
that the glibc version is greater than 2.0.

#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 0
#include <sys/io.h>
#else
#include <asm/io.h>
#endif

This fails under musl does not define __GLIBC__ (in fact, by design,
it doesn't provide any way to identify itself at all) - which causes
it to try to include <asm/io.h> rather than <sys/io.h>.

It's a long time since glibc 2.0.1 was released - 1997. Accordingly,
it seems to make little sense at this stage to try to retain
compatibility with very old libcs - so maybe it should be removed
entirely.
2015-08-31 07:34:51 +00:00

79 lines
1.3 KiB
C

/*
util.c - helper functions
Copyright (C) 2006-2011 Jean Delvare <jdelvare@suse.de>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
*/
#include <sys/io.h>
#include <stdio.h>
#include "util.h"
/* Return 1 if we should continue, 0 if we should abort */
int user_ack(int def)
{
char s[2];
int ret;
if (!fgets(s, 2, stdin))
return 0; /* Nack by default */
switch (s[0]) {
case 'y':
case 'Y':
ret = 1;
break;
case 'n':
case 'N':
ret = 0;
break;
default:
ret = def;
}
/* Flush extra characters */
while (s[0] != '\n') {
int c = fgetc(stdin);
if (c == EOF) {
ret = 0;
break;
}
s[0] = c;
}
return ret;
}
/* I/O read of specified size */
unsigned long inx(int addr, int width)
{
switch (width) {
case 2:
return inw(addr);
break;
case 4:
return inl(addr);
break;
default:
return inb(addr);
}
}
/* I/O write of specified size */
void outx(unsigned long value, int addr, int width)
{
switch (width) {
case 2:
outw(value, addr);
break;
case 4:
outl(value, addr);
break;
default:
outb(value, addr);
}
}