From fc6e6d245ee3989c222a2a8cc82a33475f9922f3 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Thu, 18 Apr 2013 07:34:25 +0200 Subject: Add ugly CMP_F_TYPE() macro On some architectures (like s390x) the kernel has the type int for f_type, but long in userspace. Assigning the 32 bit magic constants from linux/magic.h to the 31 bit signed f_type in the kernel, causes f_type to be negative for some constants. glibc extends the int to long for those architecures in 64 bit mode, so the negative int becomes a negative long, which cannot be simply compared to the original magic constant, because the compiler would automatically cast the constant to long. To workaround this issue, we also compare to the (int)MAGIC value in a macro. Of course, we could do #ifdef with the architecure, but it has to be maintained, and the magic constants are 32 bit anyway. Someday, when the int is unsigned or long for all architectures, we can remove this macro again. Until then, keep it as simple as it can be. --- src/journal/sd-journal.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/journal') diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 88777cbcb9..e92f20b63b 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -1248,11 +1248,11 @@ static void check_network(sd_journal *j, int fd) { return; j->on_network = - (unsigned __SWORD_TYPE) sfs.f_type == CIFS_MAGIC_NUMBER || - (unsigned __SWORD_TYPE) sfs.f_type == CODA_SUPER_MAGIC || - (unsigned __SWORD_TYPE) sfs.f_type == NCP_SUPER_MAGIC || - (unsigned __SWORD_TYPE) sfs.f_type == NFS_SUPER_MAGIC || - (unsigned __SWORD_TYPE) sfs.f_type == SMB_SUPER_MAGIC; + CMP_F_TYPE(sfs.f_type, CIFS_MAGIC_NUMBER) || + CMP_F_TYPE(sfs.f_type, CODA_SUPER_MAGIC) || + CMP_F_TYPE(sfs.f_type, NCP_SUPER_MAGIC) || + CMP_F_TYPE(sfs.f_type, NFS_SUPER_MAGIC) || + CMP_F_TYPE(sfs.f_type, SMB_SUPER_MAGIC); } static int add_file(sd_journal *j, const char *prefix, const char *filename) { -- cgit v1.2.3-54-g00ecf