Advertisement
Guest User

Untitled

a guest
Sep 6th, 2017
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <stdarg.h>
  5. #include <string.h>
  6. #include "list.h"
  7.  
  8. typedef struct user_info {
  9. //unsigned int uid;
  10. char* uname;
  11. char* pw;
  12. char* UID;
  13. char* GID;
  14. char* GECOS;
  15. char* dir;
  16. char* shell;
  17. }user_info;
  18.  
  19. bool empty_str(char* str) {
  20. return str==NULL;
  21. }
  22.  
  23. char* get_str(char* str) {
  24. char* temp = malloc(sizeof(1024));
  25. sscanf(str, "%[^:\n]", temp);
  26. char* str_scan = malloc(sizeof(strlen(temp)));
  27. strcpy(str_scan,temp);
  28. return str_scan;
  29. }
  30.  
  31. char* update_str(char* str) {
  32. char* str_scan;
  33. str_scan = get_str(str);
  34. return (str+(strlen(str_scan)+1));
  35. }
  36.  
  37. char* ret_Info(char** l_str) {
  38. char* uinfo = get_str(*l_str);
  39. *l_str = update_str(*l_str);
  40. if(empty_str(uinfo))
  41. return NULL;
  42. else
  43. return uinfo;
  44. }
  45.  
  46. l_list* list_insert(l_list*list, user_info*newUser, bool pw, bool GECOS, int insertCount,...) {
  47. va_list uinfo;
  48. va_start(uinfo, insertCount);
  49. for(int i=0; i<insertCount ; i++) {
  50. void* str = va_arg(uinfo, void*);
  51. switch(i) {
  52. case 0:
  53. newUser->dir = str;
  54. break;
  55. case 1:
  56. newUser->uname = str;
  57. break;
  58. case 2:
  59. newUser->UID = str;
  60. break;
  61. case 3:
  62. newUser->GID = str;
  63. break;
  64. case 4:
  65. newUser->shell = str;
  66. break;
  67. case 5:
  68. if(pw)
  69. newUser->pw = str;
  70. break;
  71. case 6:
  72. if(GECOS)
  73. newUser->GECOS = str;
  74. break;
  75. }
  76. }
  77. va_end(uinfo);
  78. llist_insert(list,newUser);
  79. return list;
  80. }
  81.  
  82. l_list* fileReader(char **argv, l_list* llist) {
  83. FILE* fp;
  84. fp = fopen(argv[1],"r");
  85. char str[1024];
  86. char* l_str;
  87. if(fp==NULL) {
  88. perror(argv[1]);
  89. }
  90. else {
  91. while(fgets(str, 1023, fp)!=NULL) {
  92. l_str = str;
  93. user_info* USER = malloc(sizeof(user_info));
  94. char* username = ret_Info(&l_str);
  95. char* password = ret_Info(&l_str);
  96. char* UID = ret_Info(&l_str);
  97. char* GID = ret_Info(&l_str);
  98. char* GECOS = ret_Info(&l_str);
  99. char* dir = ret_Info(&l_str);
  100. char* shell = ret_Info(&l_str);
  101. printf("%s %s %s %s %s %s %s\n", username, password, UID, GID, GECOS, dir, shell);
  102.  
  103. if(empty_str(username) || empty_str(UID) || empty_str(GID)
  104. || empty_str(dir) ||empty_str(shell))
  105. EXIT_FAILURE;
  106.  
  107. if(empty_str(GECOS) && !empty_str(password)) {
  108. list_insert(llist,USER,1,0,6,dir,
  109. username, UID, GID, shell, password);
  110. }
  111. else if(!empty_str(GECOS) && empty_str(password)) {
  112. list_insert(llist,USER,0,1,7, dir,
  113. username, UID, GID, shell, NULL, GECOS);
  114. }
  115. else if(empty_str(GECOS) && empty_str(password)) {
  116. list_insert(llist,USER,0,0,5,dir,
  117. username, UID, GID, shell);
  118. }
  119. else
  120. list_insert(llist, USER,1,1,7, dir,
  121. username, UID, GID, shell, password, GECOS);
  122. }
  123. }
  124. fclose(fp);
  125. return llist;
  126. }
  127.  
  128. //l_list* sort_list()
  129.  
  130. int main(int argc, char **argv) {
  131. l_list* LINKEDLIST = llist_empty();
  132. fileReader(argv, LINKEDLIST);
  133.  
  134. return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement