C and C++ Binaries


IO.IOWOP : Input After Output Without Positioning

Summary

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

Properties

Class Name Input After Output Without Positioning
Significance reliability
Mnemonic IO.IOWOP
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="Input After Output Without Positioning"

Example

#include <stdio.h>

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

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

void callee_with_in(FILE *f);
void out_then_call(FILE *f){
  (void)fputc('b', f);
  callee_with_in(f);
}

void callee_with_in(FILE *f){
  (void)fgetc(f);        /* 'Input after Output without Positioning' warning issued here
                          * - no intervening positioning operation when callee_with_in() is called from out_then_call()
                          */
}

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

Relevant Configuration File Parameters

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