if (err)
printf("ERROR: No configuration file found\n");
- regs->eflags.l &= ~(EFLAGS_ZF | EFLAGS_CF);
- regs->eflags.l |= err ? EFLAGS_ZF : 0;
+ set_flags(regs, err ? EFLAGS_ZF : 0);
}
void pm_mangle_name(com32sys_t *regs)
struct file *file;
uint32_t sector_mask;
size_t pad;
+ uint32_t retflags = 0;
bytes = regs->eax.l;
zero_mask = regs->edx.w[0];
file = handle_to_file(regs->esi.w[0]);
fs = file->fs;
- regs->eflags.l &= ~(EFLAGS_CF|EFLAGS_OF|EFLAGS_AF|
- EFLAGS_PF|EFLAGS_ZF|EFLAGS_SF);
-
sector_mask = SECTOR_SIZE(fs) - 1;
while (bytes) {
if (buf + SECTOR_SIZE(fs) > limit) {
/* Can't fit even one more sector in... */
- regs->eflags.l |= EFLAGS_OF;
+ retflags = EFLAGS_OF;
break;
}
*/
_close_file(file);
regs->esi.w[0] = 0;
- regs->eflags.l |= EFLAGS_CF;
+ retflags = EFLAGS_CF;
break;
}
}
regs->ebx.l = (size_t)buf;
regs->edi.l = (size_t)buf + pad;
+ set_flags(regs, retflags);
}
return __ms_timer;
}
+/*
+ * Helper routine to return a specific set of flags
+ */
+static inline void set_flags(com32sys_t *regs, uint32_t flags)
+{
+ uint32_t eflags;
+
+ eflags = regs->eflags.l;
+ eflags &= ~(EFLAGS_CF|EFLAGS_PF|EFLAGS_AF|EFLAGS_ZF|EFLAGS_SF|EFLAGS_OF);
+ eflags |= flags;
+ regs->eflags.l = eflags;
+}
+
#endif /* CORE_H */