2nd_Sem_Bogachev/2025.05.23/03Ex/io_node.c
2025-05-18 20:07:48 +03:00

83 lines
1.2 KiB
C

#include "io_node.h"
#include "node.h"
#include "status.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int get_length (node * head)
{
node *curr;
int i = 0;
for (curr = head; curr; curr=curr->next)
i++;
return i;
}
void delete_list (node * head)
{
node *curr, *next;
for (curr = head; curr; curr = next) {
next = curr->next;
free(curr->string);
free(curr);
}
}
io_status read_list (node **list, const char *filename)
{
FILE *fp = 0;
char *string, buf[LEN_STR];
node *head, *lunit, *unit;
head = lunit = unit = NULL;
if (!(fp = fopen(filename, "r")))
return ERR_OPEN;
while (fgets(buf, LEN_STR, fp))
{
unit = (node *)malloc(sizeof(node));
if (!unit) {
fclose(fp);
delete_list(head);
return ERR_MEM;
}
unit->next = NULL;
buf[strcspn(buf, "\n")] = '\0';
string = strdup(buf);
if (!string) {
fclose(fp);
free(unit);
delete_list(head);
return ERR_MEM;
}
unit->string = string;
if (!lunit)
head = unit;
else
lunit->next = unit;
lunit = unit;
}
*list = head;
fclose(fp);
return SUCCESS;
}
void print_list (node *head, const int p)
{
for (int i = 0; head && i < p; head = head->next, i++)
printf("%s\n", head->string);
}