Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion courses/cunix/ex01/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ RM := rm -rf

LDFLAGS += -Llib

CFLAGS += -Iinclude -Wall -Wextra -Werror -g
CFLAGS += -std=c99 -Iinclude -Wall -Wextra -Werror -g

SRCS := $(wildcard src/*.c)

Expand Down
12 changes: 12 additions & 0 deletions courses/cunix/ex01/src/my_strlen.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

unsigned int my_strlen(char *str)
{
unsigned int strlen = 0;

while (str[strlen] != '\0')
{
strlen++;
}

return strlen;
}
2 changes: 1 addition & 1 deletion courses/cunix/ex02/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ RM := rm -rf

LDFLAGS += -Llib

CFLAGS += -Iinclude -Wall -Wextra -Werror -g
CFLAGS += -std=c99 -Iinclude -Wall -Wextra -Werror -g

SRCS := $(wildcard src/*.c)

Expand Down
18 changes: 18 additions & 0 deletions courses/cunix/ex02/src/my_strcmp.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
int my_strcmp(char *str1, char *str2)
{
int i = 0;

while ((str1[i] != '\0') || (str2[i] != '\0'))
{
if (str1[i] > str2[i])
{
return 1;
}
if (str1[i] < str2[i])
{
return -1;
}
i++;
}
return 0;
}
2 changes: 1 addition & 1 deletion courses/cunix/ex03/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ RM := rm -rf

LDFLAGS += -Llib

CFLAGS += -Iinclude -Wall -Wextra -Werror -g
CFLAGS += -std=c99 -Iinclude -Wall -Wextra -Werror -g

SRCS := $(wildcard src/*.c)

Expand Down
9 changes: 9 additions & 0 deletions courses/cunix/ex03/src/my_strcpy.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

char *my_strcpy(char *dest, const char *src)
{
char *res = dest;

while ((*dest++ = *src++));

return res;
}
2 changes: 1 addition & 1 deletion courses/cunix/ex04/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ RM := rm -rf

LDFLAGS += -Llib

CFLAGS += -Iinclude -Wall -Wextra -Werror -g
CFLAGS += -std=c99 -Iinclude -Wall -Wextra -Werror -g

SRCS := $(wildcard src/*.c)

Expand Down
20 changes: 20 additions & 0 deletions courses/cunix/ex04/src/my_atoi.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#define EXP 10

int my_atoi(const char *nptr)
{
int num = 0;
int sign = 1;

if (*nptr == '-')
{
sign = -1;
nptr++;
}

while (*nptr >= '0' && *nptr <= '9' && *nptr != '\0')
{
num = *nptr++ - '0' + num * EXP;
}

return num * sign;
}
45 changes: 45 additions & 0 deletions courses/cunix/ex04/src/my_itoa.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#include <stdlib.h>
#define EXP 10

void my_reverse(char *src, int len)
{
for (int i = 0; i < len / 2; i++)
{
char temp;
temp = src[i];
src[i] = src[len - i - 1];
src[len - i - 1] = temp;
}
}


char *my_itoa(int nmb)
{
char *result = (char *)malloc(32);
char *number = result;
int len = 0;
int sign;

if ((sign = nmb) < 0)
{
nmb = -nmb;
}

do
{
*result++ = nmb % EXP + '0';
len++;
}
while ((nmb /= EXP) > 0);

if (sign < 0)
{
len++;
*result++ = '-';
}

*result = '\0';
my_reverse(number, len);

return number;
}
2 changes: 1 addition & 1 deletion courses/cunix/ex05/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ RM := rm -rf

LDFLAGS += -Llib

CFLAGS += -Iinclude -Wall -Wextra -Werror -g
CFLAGS += -std=c99 -Iinclude -Wall -Wextra -Werror -g

SRCS := $(wildcard src/*.c)

Expand Down
13 changes: 13 additions & 0 deletions courses/cunix/ex05/src/my_puts.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#include<unistd.h>

int my_puts(const char *s)
{
while (*s != '\0')
{
write(1, s++, 1);
}

write(1, "\n", 1);

return 0;
}
2 changes: 1 addition & 1 deletion courses/cunix/ex07/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ RM := rm -rf

LDFLAGS += -Llib

CFLAGS += -Iinclude -Wall -Wextra -Werror -g
CFLAGS += -std=c99 -Iinclude -Wall -Wextra -Werror -g

SRCS := $(wildcard src/*.c)

Expand Down
123 changes: 123 additions & 0 deletions courses/cunix/ex07/src/linked_list.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
void *data;
struct node *next;
} node_t;


node_t *list_create(void *data)
{
node_t *new_node = (node_t *)malloc(sizeof(node_t));
new_node->data = data;
new_node->next = NULL;

return new_node;
}

void list_destroy(node_t **head, void (*fp)(void *data))
{
if (*head != NULL)
{
list_destroy(&(*head)->next, fp);
(*fp)((*head)->data);
free(*head);
*head = NULL;
}
}


void list_push(node_t *head, void *data)
{
if (head == NULL)
{
head = list_create(data);
}
else
{
node_t *new_node = list_create(data);

while (head->next != NULL)
{
head = head->next;
}

head->next = new_node;
}
}

void list_unshift(node_t **head, void *data)
{
if (*head != NULL)
{
node_t *new_node = (node_t *)malloc(sizeof(node_t));
new_node->data = data;
new_node->next = *head;
(*head) = new_node;
}
}


void *list_pop(node_t **head)
{
node_t *current = *head;

while (current->next->next != NULL)
{
current = current->next;
}

void *data = current->next->data;
free(current->next);
current->next = NULL;

return data;
}

void *list_shift(node_t **head)
{
node_t *first = *head;
*head = (*head)->next;
void *data = first->data;
free(first);

return data;
}

void *list_remove(node_t **head, int pos)
{
int i = 1;
node_t *current_head = *head;

while (i++ < pos && current_head->next->next)
{
current_head = current_head->next;
}

node_t *current = current_head->next;
void *data = current->data;
current_head->next = current->next;
free(current);

return data;
}

void list_print(node_t *head)
{
while (head != NULL)
{
printf("%s", (char *)head->data);
head = head->next;
}
}

void list_visitor(node_t *head, void (*fp)(void *data))
{
while (head != NULL)
{
(*fp)(head->data);
head = head->next;
}
}
2 changes: 1 addition & 1 deletion courses/cunix/ex07/src/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

void printInt(void *data)
{
printf("%s\n", data);
printf("%p\n", data);
}

void test_destroy_push(void *data)
Expand Down
2 changes: 1 addition & 1 deletion courses/cunix/ex08/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ RM := rm -rf

LDFLAGS += -Llib

CFLAGS += -Iinclude -Wall -Wextra -Werror -g
CFLAGS += -std=c99 -Iinclude -Wall -Wextra -Werror -g

SRCS := $(wildcard src/*.c)

Expand Down
Loading