Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <stdarg.h>
- #include <string.h>
- #include "list.h"
- typedef struct user_info {
- //unsigned int uid;
- char* uname;
- char* pw;
- char* UID;
- char* GID;
- char* GECOS;
- char* dir;
- char* shell;
- }user_info;
- bool empty_str(char* str) {
- return str==NULL;
- }
- char* get_str(char* str) {
- char* temp = malloc(sizeof(1024));
- sscanf(str, "%[^:\n]", temp);
- char* str_scan = malloc(sizeof(strlen(temp)));
- strcpy(str_scan,temp);
- return str_scan;
- }
- char* update_str(char* str) {
- char* str_scan;
- str_scan = get_str(str);
- return (str+(strlen(str_scan)+1));
- }
- char* ret_Info(char** l_str) {
- char* uinfo = get_str(*l_str);
- *l_str = update_str(*l_str);
- if(empty_str(uinfo))
- return NULL;
- else
- return uinfo;
- }
- l_list* list_insert(l_list*list, user_info*newUser, bool pw, bool GECOS, int insertCount,...) {
- va_list uinfo;
- va_start(uinfo, insertCount);
- for(int i=0; i<insertCount ; i++) {
- void* str = va_arg(uinfo, void*);
- switch(i) {
- case 0:
- newUser->dir = str;
- break;
- case 1:
- newUser->uname = str;
- break;
- case 2:
- newUser->UID = str;
- break;
- case 3:
- newUser->GID = str;
- break;
- case 4:
- newUser->shell = str;
- break;
- case 5:
- if(pw)
- newUser->pw = str;
- break;
- case 6:
- if(GECOS)
- newUser->GECOS = str;
- break;
- }
- }
- va_end(uinfo);
- llist_insert(list,newUser);
- return list;
- }
- l_list* fileReader(char **argv, l_list* llist) {
- FILE* fp;
- fp = fopen(argv[1],"r");
- char str[1024];
- char* l_str;
- if(fp==NULL) {
- perror(argv[1]);
- }
- else {
- while(fgets(str, 1023, fp)!=NULL) {
- l_str = str;
- user_info* USER = malloc(sizeof(user_info));
- char* username = ret_Info(&l_str);
- char* password = ret_Info(&l_str);
- char* UID = ret_Info(&l_str);
- char* GID = ret_Info(&l_str);
- char* GECOS = ret_Info(&l_str);
- char* dir = ret_Info(&l_str);
- char* shell = ret_Info(&l_str);
- printf("%s %s %s %s %s %s %s\n", username, password, UID, GID, GECOS, dir, shell);
- if(empty_str(username) || empty_str(UID) || empty_str(GID)
- || empty_str(dir) ||empty_str(shell))
- EXIT_FAILURE;
- if(empty_str(GECOS) && !empty_str(password)) {
- list_insert(llist,USER,1,0,6,dir,
- username, UID, GID, shell, password);
- }
- else if(!empty_str(GECOS) && empty_str(password)) {
- list_insert(llist,USER,0,1,7, dir,
- username, UID, GID, shell, NULL, GECOS);
- }
- else if(empty_str(GECOS) && empty_str(password)) {
- list_insert(llist,USER,0,0,5,dir,
- username, UID, GID, shell);
- }
- else
- list_insert(llist, USER,1,1,7, dir,
- username, UID, GID, shell, password, GECOS);
- }
- }
- fclose(fp);
- return llist;
- }
- //l_list* sort_list()
- int main(int argc, char **argv) {
- l_list* LINKEDLIST = llist_empty();
- fileReader(argv, LINKEDLIST);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement