C and C++ Binaries


IO.OIWOP : Output After Input Without Positioning

Summary

Output is written to a stream, and input is subsequently read from the same stream without an intervening positioning operation.

Properties

Class Name Output After Input Without Positioning
Significance reliability
Mnemonic IO.OIWOP
Categories
AUTOSARC++14 AUTOSARC++14:A27-0-3 Alternate input and output operations on a file stream shall not be used without an intervening flush or positioning call.
MisraC++2023 MisraC++2023:30.0.2 Reads and writes on the same file stream shall be separated by a positioning operation
CERT-C CERT-C:FIO39-C Do not alternately input and output from a stream without an intervening flush or positioning call
CERT-CPP CERT-CPP:FIO50-CPP Do not alternately input and output from a file stream without an intervening positioning call
Availability Available for C and C++.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="Output After Input Without Positioning"

Example

#include <stdio.h>

void in_out(FILE * f){
    (void)fgetc(f);
    (void)fputc('b', f); /* 'Output after Input without Positioning' warning issued here */
}

int in_other_out(FILE * f){
    int x = 1;
    int y = 2;
    (void)fgetc(f);
    x += y;
    (void)fputc('b', f); /* 'Output after Input without Positioning' warning issued here
                          * - output operation does not need to immediately follow input operation
                          */
    return x;
}

void callee_with_out(FILE *f);
void in_then_call(FILE *f){
    (void)fgetc(f);
    callee_with_out(f);
}

void callee_with_out(FILE *f){
    (void)fputc('b', f); /* 'Output after Input without Positioning' warning issued here
                          * - no intervening positioning operation when callee_with_out() is called from in_then_call()
                          */
}

void in_position_out(FILE * f){
    (void)fgetc(f);
    (void)fseek(f, 0, SEEK_SET);
    (void)fputc('b', f);                  /* ok: intervening call to fseek() */
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.