Advertisement
volkovich_maksim

util.c

Dec 8th, 2016
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.20 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <errno.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6.  
  7. char* getline_unlim(void){
  8.     enum {FGETS_BUFSIZE = 50};
  9.     int i, counter = 1, flag = 0;
  10.     char *tmp, *c = (char*) calloc((FGETS_BUFSIZE-1)*counter + 1, sizeof(char*));
  11.     if (fgets(c, 2, stdin) != NULL && !(feof(stdin))){
  12.         if (feof(stdin)){
  13.             return NULL;
  14.         }
  15.         if ( *c == '\n' ) { *c = '\0'; return c;}
  16.         tmp = fgets(c + 1, FGETS_BUFSIZE, stdin);
  17.         if (tmp == NULL && !feof(stdin)){
  18.             fprintf(stderr, "\n%s\n", strerror(errno));
  19.             exit(EXIT_FAILURE);
  20.         }
  21.         for(i = 0; i < (FGETS_BUFSIZE - 1) + 1; i++){
  22.                 if (c[i] == '\n' || c[i] == '\0'){
  23.                     c[i] = '\0';
  24.                     flag = 1;
  25.                 }
  26.             }
  27.         for(; flag == 0; counter++){
  28.             c = realloc(c, counter*(FGETS_BUFSIZE - 1) + 1 + FGETS_BUFSIZE);
  29.             tmp = fgets(c + counter*(FGETS_BUFSIZE - 1) + 1, FGETS_BUFSIZE, stdin);
  30.             if (tmp == NULL && !feof(stdin)){
  31.                 fprintf(stderr, "\n%s\n", strerror(errno));
  32.                 exit(EXIT_FAILURE);
  33.             }
  34.             for(i = counter*(FGETS_BUFSIZE - 1); i < (counter + 1)*(FGETS_BUFSIZE - 1) + 1; i++){
  35.                 if (c[i] == '\n' || c[i] == '\0'){
  36.                     c[i] = '\0';
  37.                     flag = 1;
  38.                 }
  39.             }
  40.         }
  41.     }
  42.     else{
  43.             c = NULL;
  44.     }
  45.     return c;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement