Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: added #define _STDC_WANT_LIB_EXT1_ 1 #include <stdlib.h>

...

This recommendation depends on C11 Annex K being implemented.  The following code can be added to remove this dependency:

 

Code Block
languagecpp
#ifndef __STDC_LIB_EXT1__
  typedef int errno_t;
#endif

 

...

Code Block
bgColor#ccccff
langc
#include <errno.h>
#include <stdio.h>

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdlib.h>
    
enum { NO_FILE_POS_VALUES = 3 };

errno_t opener(
  FILE *file,
  size_t *width,
  size_t *height,
  size_t *data_offset
) {
  size_t file_w;
  size_t file_h;
  size_t file_o;
  fpos_t offset;

  if (NULL == file) { return EINVAL; }
  errno = 0;
  if (fgetpos(file, &offset) != 0 ) { return errno; }
  if (fscanf(file, "%zu %zu %zu", &file_w, &file_h, &file_o)
        != NO_FILE_POS_VALUES) {
    return EIO;
  }

  errno = 0;
  if (fsetpos(file, &offset) != 0 ) { return errno; }

  if (width != NULL) { *width = file_w; }
  if (height != NULL) { *height = file_h; }
  if (data_offset != NULL) { *data_offset = file_o; }

  return 0;
}

...

Bibliography

 

...