Commit 496ebd11 authored by gnomus's avatar gnomus
Browse files

Merge branch 'develop' into 'master'

 nitpicking and better c standard compliant code

let us...

...use the proper main(void) signature.

...use variable names which speak for their semantic content not their type, as types are explicitly declared.

...use perror() to signal the correct errno message upon error.

...move the password out of the running code, so we can change and find it easily.

...use exit() as it's a linear CLI tool, which can and should exit on certain failure/error states.

...decouple error handling from business logic. (e.g. getline() error handling and strcmp() for password check).

...not free() at the end of the program as it **is** and should **never** be necessary, since the OS **must** handle this.
parents e315738b 29786349
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main() {
int ret;
size_t nbytes = 0;
char *input_str = NULL;
char *password = "23door42\n";
const char *password = "23door42\n";
int main(void) {
size_t input_size = 0;
char *input_line = NULL;
printf("Please enter Password: ");
ret = getline(&input_str, &nbytes, stdin);
if (ret == -1) {
puts("Error");
} else if (strcmp(input_str, password) == 0) {
puts("Success");
ret = 0;
// read in password from standard input, exit on error.
if (getline(&input_line, &input_size, stdin) == -1) {
perror("Error");
exit(EXIT_FAILURE);
}
// compare password, print info, exit appropriately
if (strcmp(input_line, password) == 0) {
puts("Success!");
exit(EXIT_SUCCESS);
} else {
puts("How about no?!");
ret = -1;
exit(EXIT_FAILURE);
}
free(input_str);
return ret;
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment