int pat_info() { FILE *fp; fp = fopen("patient.txt", "rb+"); if(fp == NULL) { perror(" file cannot be accessed:"); return errno; } int op, n; char err[32]; while(1) { printpatmenu(); b:printf("\n\n\n\tEnter the option number:"); n = scanf("%d", &op); if(n == 0) { op = 7; readline(err, 32); } switch(op) { case 1:system("clear"); printheader(); new_pat(fp); break; case 2:system("clear"); printheader(); edit_pat(fp); break; case 3:system("clear"); printheader(); search_pat(fp); break; case 4:system("clear"); printheader(); list_pat(fp); break; case 5:system("clear"); printheader(); close_pat(fp); break; case 6:system("clear"); fclose(fp); printheader(); printmainmenu(); break; default:printf("\n\n\t***Invalid entry***"); goto b; break; } } return 0; }
/* function to handle files string operation */ int strops_files(void *arg){ int rc = 0; struct strops_args *ptr = (struct strops_args *)arg; struct strops_args *kptr = NULL; /*check validation of input */ rc = isInputValid(ptr); if(rc < 0) goto out; /*copy_from_user into kernel */ kptr = (struct strops_args *)kmalloc(sizeof(struct strops_args), GFP_KERNEL); if(IS_ERR(kptr)){ rc = -ENOMEM; goto out; } if(copy_from_user(kptr, ptr, sizeof(struct strops_args))){ rc = -EFAULT; goto free_kptr; } /* begin file strings operation mode*/ rc = search_pat(kptr); if(rc < 0) goto free_kptr; if(kptr->flag == 1 || kptr->flag == 2){ if(kptr->res_len == 0){ printk("No found pattern; Operation quit.\n"); goto free_kptr; } rc = write_pat(kptr, 0); if(rc < 0) goto free_kptr; } if(copy_to_user(ptr, kptr, sizeof(struct strops_args))){ rc = -EFAULT; goto free_kptr; } free_kptr: kfree(kptr); out: return rc; }