Input Validation Patterns
Enum Validation
Validate a raw integer before casting it into an enum used by later branches.
Enum Validation
enum_validation.c
#include <stdio.h>
enum Mode {
MODE_READ = 1,
MODE_WRITE = 2,
MODE_ADMIN = 3
};
int validMode(int raw, enum Mode *mode) {
if (raw < MODE_READ || raw > MODE_ADMIN) {
return 0;
}
*mode = (enum Mode)raw;
return 1;
}
int main(void) {
int rawMode = ;
enum Mode mode = MODE_READ;
int ok = validMode(rawMode, &mode);
int canWrite = ok && mode != MODE_READ;
printf("rawMode=%d ok=%d mode=%d canWrite=%d\n", rawMode, ok, mode, canWrite);
return 0;
}
#include <stdio.h>
enum Mode {
MODE_READ = 1,
MODE_WRITE = 2,
MODE_ADMIN = 3
};
int validMode(int raw, enum Mode *mode) {
if (raw < MODE_READ || raw > MODE_ADMIN) {
return 0;
}
*mode = (enum Mode)raw;
return 1;
}
int main(void) {
int rawMode = ;
enum Mode mode = MODE_READ;
int ok = validMode(rawMode, &mode);
int canWrite = ok && mode != MODE_READ;
printf("rawMode=%d ok=%d mode=%d canWrite=%d\n", rawMode, ok, mode, canWrite);
return 0;
}
#include <stdio.h>
enum Mode {
MODE_READ = 1,
MODE_WRITE = 2,
MODE_ADMIN = 3
};
int validMode(int raw, enum Mode *mode) {
if (raw < MODE_READ || raw > MODE_ADMIN) {
return 0;
}
*mode = (enum Mode)raw;
return 1;
}
int main(void) {
int rawMode = ;
enum Mode mode = MODE_READ;
int ok = validMode(rawMode, &mode);
int canWrite = ok && mode != MODE_READ;
printf("rawMode=%d ok=%d mode=%d canWrite=%d\n", rawMode, ok, mode, canWrite);
return 0;
}
raw input
External values often arrive as plain integers, not typed enum constants.
safe cast
The cast happens only after a range check proves the enum value is expected.