From 5ebb8d9ed006ecbd6f79a72e50a1913bcfccecbd Mon Sep 17 00:00:00 2001 From: Lawrence Eniola Date: Mon, 26 Jun 2023 21:56:46 +0100 Subject: [PATCH] link task --- 0x17-doubly_linked_lists/0-print_dlistint.c | 20 ++++++++ 0x17-doubly_linked_lists/1-dlistint_len.c | 16 ++++++ 0x17-doubly_linked_lists/100-password | 1 + 0x17-doubly_linked_lists/102-result | 1 + 0x17-doubly_linked_lists/103-keygen.c | 45 ++++++++++++++++ 0x17-doubly_linked_lists/2-add_dnodeint.c | 27 ++++++++++ 0x17-doubly_linked_lists/3-add_dnodeint_end.c | 34 +++++++++++++ 0x17-doubly_linked_lists/4-free_dlistint.c | 20 ++++++++ 0x17-doubly_linked_lists/5-get_dnodeint.c | 25 +++++++++ 0x17-doubly_linked_lists/6-sum_dlistint.c | 19 +++++++ 0x17-doubly_linked_lists/7-insert_dnodeint.c | 48 ++++++++++++++++++ 0x17-doubly_linked_lists/8-delete_dnodeint.c | 40 +++++++++++++++ 0x17-doubly_linked_lists/README.md | 1 + 0x17-doubly_linked_lists/lists.h | 31 +++++++++++ 0x17-doubly_linked_lists/palindrome.py | 11 ++++ .../1-create_dynamic_lib.sh | 3 ++ 0x18-dynamic_libraries/100-operations.so | 0 0x18-dynamic_libraries/100-test.py | 11 ++++ 0x18-dynamic_libraries/101-make_me_win.sh | 3 ++ 0x18-dynamic_libraries/README.md | 17 +++++++ 0x18-dynamic_libraries/TEST/_putchar.c | 13 +++++ 0x18-dynamic_libraries/TEST/_putchar.o | Bin 0 -> 1576 bytes 0x18-dynamic_libraries/TEST/abs.c | 15 ++++++ 0x18-dynamic_libraries/TEST/abs.o | Bin 0 -> 1384 bytes 0x18-dynamic_libraries/TEST/atoi.c | 41 +++++++++++++++ 0x18-dynamic_libraries/TEST/atoi.o | Bin 0 -> 1640 bytes 0x18-dynamic_libraries/TEST/isalpha.c | 20 ++++++++ 0x18-dynamic_libraries/TEST/isalpha.o | Bin 0 -> 1416 bytes 0x18-dynamic_libraries/TEST/isdigit.c | 16 ++++++ 0x18-dynamic_libraries/TEST/isdigit.o | Bin 0 -> 1400 bytes 0x18-dynamic_libraries/TEST/islower.c | 17 +++++++ 0x18-dynamic_libraries/TEST/islower.o | Bin 0 -> 1400 bytes 0x18-dynamic_libraries/TEST/isupper.c | 18 +++++++ 0x18-dynamic_libraries/TEST/isupper.o | Bin 0 -> 1400 bytes 0x18-dynamic_libraries/TEST/libfilename.so | Bin 0 -> 17352 bytes 0x18-dynamic_libraries/TEST/main.h | 25 +++++++++ 0x18-dynamic_libraries/TEST/memcpy.c | 22 ++++++++ 0x18-dynamic_libraries/TEST/memcpy.o | Bin 0 -> 1424 bytes 0x18-dynamic_libraries/TEST/memset.c | 23 +++++++++ 0x18-dynamic_libraries/TEST/memset.o | Bin 0 -> 1424 bytes 0x18-dynamic_libraries/TEST/puts.c | 20 ++++++++ 0x18-dynamic_libraries/TEST/puts.o | Bin 0 -> 1640 bytes 0x18-dynamic_libraries/TEST/strcat.c | 23 +++++++++ 0x18-dynamic_libraries/TEST/strcat.o | Bin 0 -> 1472 bytes 0x18-dynamic_libraries/TEST/strchr.c | 22 ++++++++ 0x18-dynamic_libraries/TEST/strchr.o | Bin 0 -> 1424 bytes 0x18-dynamic_libraries/TEST/strcmp.c | 22 ++++++++ 0x18-dynamic_libraries/TEST/strcmp.o | Bin 0 -> 1504 bytes 0x18-dynamic_libraries/TEST/strcpy.c | 20 ++++++++ 0x18-dynamic_libraries/TEST/strcpy.o | Bin 0 -> 1480 bytes 0x18-dynamic_libraries/TEST/strlen.c | 18 +++++++ 0x18-dynamic_libraries/TEST/strlen.o | Bin 0 -> 1408 bytes 0x18-dynamic_libraries/TEST/strncat.c | 28 ++++++++++ 0x18-dynamic_libraries/TEST/strncat.o | Bin 0 -> 1528 bytes 0x18-dynamic_libraries/TEST/strncpy.c | 29 +++++++++++ 0x18-dynamic_libraries/TEST/strncpy.o | Bin 0 -> 1496 bytes 0x18-dynamic_libraries/TEST/strpbrk.c | 25 +++++++++ 0x18-dynamic_libraries/TEST/strpbrk.o | Bin 0 -> 1512 bytes 0x18-dynamic_libraries/TEST/strspn.c | 26 ++++++++++ 0x18-dynamic_libraries/TEST/strspn.o | Bin 0 -> 1504 bytes 0x18-dynamic_libraries/TEST/strstr.c | 42 +++++++++++++++ 0x18-dynamic_libraries/TEST/strstr.o | Bin 0 -> 1640 bytes 0x18-dynamic_libraries/iwin.c | 22 ++++++++ 0x18-dynamic_libraries/iwin.so | 0 0x18-dynamic_libraries/libdynamic.so | Bin 0 -> 17352 bytes 0x18-dynamic_libraries/main.h | 25 +++++++++ 0x18-dynamic_libraries/test.c | 28 ++++++++++ 67 files changed, 933 insertions(+) create mode 100644 0x17-doubly_linked_lists/0-print_dlistint.c create mode 100644 0x17-doubly_linked_lists/1-dlistint_len.c create mode 100644 0x17-doubly_linked_lists/100-password create mode 100644 0x17-doubly_linked_lists/102-result create mode 100644 0x17-doubly_linked_lists/103-keygen.c create mode 100644 0x17-doubly_linked_lists/2-add_dnodeint.c create mode 100644 0x17-doubly_linked_lists/3-add_dnodeint_end.c create mode 100644 0x17-doubly_linked_lists/4-free_dlistint.c create mode 100644 0x17-doubly_linked_lists/5-get_dnodeint.c create mode 100644 0x17-doubly_linked_lists/6-sum_dlistint.c create mode 100644 0x17-doubly_linked_lists/7-insert_dnodeint.c create mode 100644 0x17-doubly_linked_lists/8-delete_dnodeint.c create mode 100644 0x17-doubly_linked_lists/README.md create mode 100644 0x17-doubly_linked_lists/lists.h create mode 100644 0x17-doubly_linked_lists/palindrome.py create mode 100644 0x18-dynamic_libraries/1-create_dynamic_lib.sh create mode 100644 0x18-dynamic_libraries/100-operations.so create mode 100644 0x18-dynamic_libraries/100-test.py create mode 100644 0x18-dynamic_libraries/101-make_me_win.sh create mode 100644 0x18-dynamic_libraries/README.md create mode 100644 0x18-dynamic_libraries/TEST/_putchar.c create mode 100644 0x18-dynamic_libraries/TEST/_putchar.o create mode 100644 0x18-dynamic_libraries/TEST/abs.c create mode 100644 0x18-dynamic_libraries/TEST/abs.o create mode 100644 0x18-dynamic_libraries/TEST/atoi.c create mode 100644 0x18-dynamic_libraries/TEST/atoi.o create mode 100644 0x18-dynamic_libraries/TEST/isalpha.c create mode 100644 0x18-dynamic_libraries/TEST/isalpha.o create mode 100644 0x18-dynamic_libraries/TEST/isdigit.c create mode 100644 0x18-dynamic_libraries/TEST/isdigit.o create mode 100644 0x18-dynamic_libraries/TEST/islower.c create mode 100644 0x18-dynamic_libraries/TEST/islower.o create mode 100644 0x18-dynamic_libraries/TEST/isupper.c create mode 100644 0x18-dynamic_libraries/TEST/isupper.o create mode 100644 0x18-dynamic_libraries/TEST/libfilename.so create mode 100644 0x18-dynamic_libraries/TEST/main.h create mode 100644 0x18-dynamic_libraries/TEST/memcpy.c create mode 100644 0x18-dynamic_libraries/TEST/memcpy.o create mode 100644 0x18-dynamic_libraries/TEST/memset.c create mode 100644 0x18-dynamic_libraries/TEST/memset.o create mode 100644 0x18-dynamic_libraries/TEST/puts.c create mode 100644 0x18-dynamic_libraries/TEST/puts.o create mode 100644 0x18-dynamic_libraries/TEST/strcat.c create mode 100644 0x18-dynamic_libraries/TEST/strcat.o create mode 100644 0x18-dynamic_libraries/TEST/strchr.c create mode 100644 0x18-dynamic_libraries/TEST/strchr.o create mode 100644 0x18-dynamic_libraries/TEST/strcmp.c create mode 100644 0x18-dynamic_libraries/TEST/strcmp.o create mode 100644 0x18-dynamic_libraries/TEST/strcpy.c create mode 100644 0x18-dynamic_libraries/TEST/strcpy.o create mode 100644 0x18-dynamic_libraries/TEST/strlen.c create mode 100644 0x18-dynamic_libraries/TEST/strlen.o create mode 100644 0x18-dynamic_libraries/TEST/strncat.c create mode 100644 0x18-dynamic_libraries/TEST/strncat.o create mode 100644 0x18-dynamic_libraries/TEST/strncpy.c create mode 100644 0x18-dynamic_libraries/TEST/strncpy.o create mode 100644 0x18-dynamic_libraries/TEST/strpbrk.c create mode 100644 0x18-dynamic_libraries/TEST/strpbrk.o create mode 100644 0x18-dynamic_libraries/TEST/strspn.c create mode 100644 0x18-dynamic_libraries/TEST/strspn.o create mode 100644 0x18-dynamic_libraries/TEST/strstr.c create mode 100644 0x18-dynamic_libraries/TEST/strstr.o create mode 100644 0x18-dynamic_libraries/iwin.c create mode 100644 0x18-dynamic_libraries/iwin.so create mode 100644 0x18-dynamic_libraries/libdynamic.so create mode 100644 0x18-dynamic_libraries/main.h create mode 100644 0x18-dynamic_libraries/test.c diff --git a/0x17-doubly_linked_lists/0-print_dlistint.c b/0x17-doubly_linked_lists/0-print_dlistint.c new file mode 100644 index 0000000..42cdf9f --- /dev/null +++ b/0x17-doubly_linked_lists/0-print_dlistint.c @@ -0,0 +1,20 @@ +#include "lists.h" +#include + +/** + * print_dlistint - print all the elements of a dlistint_t list + * @h: pointer to the start of the linked list + * + * Return: number of nodes + */ +size_t print_dlistint(const dlistint_t *h) +{ + size_t i; + + for (i = 0; h != NULL; i++) + { + printf("%d\n", h->n); + h = h->next; + } + return (i); +} diff --git a/0x17-doubly_linked_lists/1-dlistint_len.c b/0x17-doubly_linked_lists/1-dlistint_len.c new file mode 100644 index 0000000..a7ff922 --- /dev/null +++ b/0x17-doubly_linked_lists/1-dlistint_len.c @@ -0,0 +1,16 @@ +#include "lists.h" + +/** + * dlistint_len - count the number of nodes in the linked list + * @h: pointer to the beginning of a linked list + * + * Return: number of nodes + */ +size_t dlistint_len(const dlistint_t *h) +{ + size_t i; + + for (i = 0; h != NULL; i++) + h = h->next; + return (i); +} diff --git a/0x17-doubly_linked_lists/100-password b/0x17-doubly_linked_lists/100-password new file mode 100644 index 0000000..b720b2f --- /dev/null +++ b/0x17-doubly_linked_lists/100-password @@ -0,0 +1 @@ +en C Pyfo neZ diff --git a/0x17-doubly_linked_lists/102-result b/0x17-doubly_linked_lists/102-result new file mode 100644 index 0000000..ad0ea79 --- /dev/null +++ b/0x17-doubly_linked_lists/102-result @@ -0,0 +1 @@ +906609 \ No newline at end of file diff --git a/0x17-doubly_linked_lists/103-keygen.c b/0x17-doubly_linked_lists/103-keygen.c new file mode 100644 index 0000000..4223f03 --- /dev/null +++ b/0x17-doubly_linked_lists/103-keygen.c @@ -0,0 +1,45 @@ +#include +#include +#include + +/** + * main - generate a key depending on a username for crackme5 + * @argc: number of arguments passed + * @argv: arguments passed to main + * + * Return: 0 on success, 1 on error + */ +int main(int argc, char *argv[]) +{ + unsigned int i, b; + size_t len, add; + char *l = "A-CHRDw87lNS0E9B2TibgpnMVys5XzvtOGJcYLU+4mjW6fxqZeF3Qa1rPhdKIouk"; + char p[7] = " "; + + if (argc != 2) + { + printf("Correct usage: ./keygen5 username\n"); + return (1); + } + len = strlen(argv[1]); + p[0] = l[(len ^ 59) & 63]; + for (i = 0, add = 0; i < len; i++) + add += argv[1][i]; + p[1] = l[(add ^ 79) & 63]; + for (i = 0, b = 1; i < len; i++) + b *= argv[1][i]; + p[2] = l[(b ^ 85) & 63]; + for (b = argv[1][0], i = 0; i < len; i++) + if ((char)b <= argv[1][i]) + b = argv[1][i]; + srand(b ^ 14); + p[3] = l[rand() & 63]; + for (b = 0, i = 0; i < len; i++) + b += argv[1][i] * argv[1][i]; + p[4] = l[(b ^ 239) & 63]; + for (b = 0, i = 0; (char)i < argv[1][0]; i++) + b = rand(); + p[5] = l[(b ^ 229) & 63]; + printf("%s\n", p); + return (0); +} diff --git a/0x17-doubly_linked_lists/2-add_dnodeint.c b/0x17-doubly_linked_lists/2-add_dnodeint.c new file mode 100644 index 0000000..84ee1f2 --- /dev/null +++ b/0x17-doubly_linked_lists/2-add_dnodeint.c @@ -0,0 +1,27 @@ +#include "lists.h" +#include + +/** + * add_dnodeint - add a new node at the beginning of the linked list + * @head: double pointer to the beginning of the linked list + * @n: value to add to the new node + * + * Return: pointer to the new node, or NULL on failure + */ +dlistint_t *add_dnodeint(dlistint_t **head, const int n) +{ + dlistint_t *new; + + if (head == NULL) + return (NULL); + new = malloc(sizeof(dlistint_t)); + if (new == NULL) + return (NULL); + new->n = n; + new->prev = NULL; + new->next = *head; + *head = new; + if (new->next != NULL) + (new->next)->prev = new; + return (new); +} diff --git a/0x17-doubly_linked_lists/3-add_dnodeint_end.c b/0x17-doubly_linked_lists/3-add_dnodeint_end.c new file mode 100644 index 0000000..32898ed --- /dev/null +++ b/0x17-doubly_linked_lists/3-add_dnodeint_end.c @@ -0,0 +1,34 @@ +#include "lists.h" +#include + +/** + * add_dnodeint_end - adds a node to the end of a linked list + * @head: double pointer to the beginning of the linked list + * @n: value to add to new node + * + * Return: pointer to the new node, or NULL on failure + */ +dlistint_t *add_dnodeint_end(dlistint_t **head, const int n) +{ + dlistint_t *new, *tmp; + + if (head == NULL) + return (NULL); + new = malloc(sizeof(dlistint_t)); + if (new == NULL) + return (NULL); + new->n = n; + new->next = NULL; + if (*head == NULL) + { + new->prev = NULL; + *head = new; + return (new); + } + tmp = *head; + while (tmp->next != NULL) + tmp = tmp->next; + tmp->next = new; + new->prev = tmp; + return (new); +} diff --git a/0x17-doubly_linked_lists/4-free_dlistint.c b/0x17-doubly_linked_lists/4-free_dlistint.c new file mode 100644 index 0000000..a7cbab1 --- /dev/null +++ b/0x17-doubly_linked_lists/4-free_dlistint.c @@ -0,0 +1,20 @@ +#include "lists.h" +#include + +/** + * free_dlistint - free a dlistint_t list + * @head: pointer to the beginning of the linked list + * + * Return: void + */ +void free_dlistint(dlistint_t *head) +{ + dlistint_t *next; + + while (head != NULL) + { + next = head->next; + free(head); + head = next; + } +} diff --git a/0x17-doubly_linked_lists/5-get_dnodeint.c b/0x17-doubly_linked_lists/5-get_dnodeint.c new file mode 100644 index 0000000..6370739 --- /dev/null +++ b/0x17-doubly_linked_lists/5-get_dnodeint.c @@ -0,0 +1,25 @@ +#include "lists.h" + +/** + * get_dnodeint_at_index - finds a specific node of a linked list + * @head: pointer to the beginning of the list + * @index: index of the node to retrieve + * + * Return: pointer to the indexed node, or NULL on failure + */ +dlistint_t *get_dnodeint_at_index(dlistint_t *head, unsigned int index) +{ + unsigned int i; + + if (head == NULL) + return (NULL); + if (index == 0) + return (head); + for (i = 0; i < index; i++) + { + if (head->next == NULL) + return (NULL); + head = head->next; + } + return (head); +} diff --git a/0x17-doubly_linked_lists/6-sum_dlistint.c b/0x17-doubly_linked_lists/6-sum_dlistint.c new file mode 100644 index 0000000..9f688aa --- /dev/null +++ b/0x17-doubly_linked_lists/6-sum_dlistint.c @@ -0,0 +1,19 @@ +#include "lists.h" + +/** + * sum_dlistint - sums all of the data of a dlistint_t linked list + * @head: pointer to the beginning of the linked list + * + * Return: sum of all data, or 0 if the list is empty + */ +int sum_dlistint(dlistint_t *head) +{ + int sum = 0; + + while (head != NULL) + { + sum += head->n; + head = head->next; + } + return (sum); +} diff --git a/0x17-doubly_linked_lists/7-insert_dnodeint.c b/0x17-doubly_linked_lists/7-insert_dnodeint.c new file mode 100644 index 0000000..b913348 --- /dev/null +++ b/0x17-doubly_linked_lists/7-insert_dnodeint.c @@ -0,0 +1,48 @@ +#include "lists.h" +#include +#include + +/** + * insert_dnodeint_at_index - inserts a new node at a given position + * @h: double pointer to the beginning of the linked list + * @idx: index at which to insert the new node + * @n: data to enter into new node + * + * Return: pointer to the new node, or NULL on failure + */ +dlistint_t *insert_dnodeint_at_index(dlistint_t **h, unsigned int idx, int n) +{ + dlistint_t *new, *next, *current; + unsigned int i; + + if (h == NULL) + return (NULL); + if (idx != 0) + { + current = *h; + for (i = 0; i < idx - 1 && current != NULL; i++) + current = current->next; + if (current == NULL) + return (NULL); + } + new = malloc(sizeof(dlistint_t)); + if (new == NULL) + return (NULL); + new->n = n; + if (idx == 0) + { + next = *h; + *h = new; + new->prev = NULL; + } + else + { + new->prev = current; + next = current->next; + current->next = new; + } + new->next = next; + if (new->next != NULL) + new->next->prev = new; + return (new); +} diff --git a/0x17-doubly_linked_lists/8-delete_dnodeint.c b/0x17-doubly_linked_lists/8-delete_dnodeint.c new file mode 100644 index 0000000..af05fc8 --- /dev/null +++ b/0x17-doubly_linked_lists/8-delete_dnodeint.c @@ -0,0 +1,40 @@ +#include "lists.h" +#include + +/** + * delete_dnodeint_at_index - deletes a node at a specific index + * @head: double pointer to the linked list + * @index: index at which to delete node + * + * Return: 1 on success, -1 on failure + */ +int delete_dnodeint_at_index(dlistint_t **head, unsigned int index) +{ + dlistint_t *current; + unsigned int i; + + if (head == NULL || *head == NULL) + return (-1); + current = *head; + if (index == 0) + { + *head = current->next; + if (current->next != NULL) + { + current->next->prev = NULL; + } + free(current); + return (1); + } + for (i = 0; i < index; i++) + { + if (current->next == NULL) + return (-1); + current = current->next; + } + current->prev->next = current->next; + if (current->next != NULL) + current->next->prev = current->prev; + free(current); + return (1); +} diff --git a/0x17-doubly_linked_lists/README.md b/0x17-doubly_linked_lists/README.md new file mode 100644 index 0000000..35f60f2 --- /dev/null +++ b/0x17-doubly_linked_lists/README.md @@ -0,0 +1 @@ +0x17-doubly_linked_lists diff --git a/0x17-doubly_linked_lists/lists.h b/0x17-doubly_linked_lists/lists.h new file mode 100644 index 0000000..07c3ecd --- /dev/null +++ b/0x17-doubly_linked_lists/lists.h @@ -0,0 +1,31 @@ +#ifndef LIST_H +#define LIST_H + +#include +/** + * struct dlistint_s - doubly linked list + * @n: integer + * @prev: points to the previous node + * @next: points to the next node + * + * Description: doubly linked list node structure + * + */ +typedef struct dlistint_s +{ + int n; + struct dlistint_s *prev; + struct dlistint_s *next; +} dlistint_t; + +size_t print_dlistint(const dlistint_t *h); +size_t dlistint_len(const dlistint_t *h); +dlistint_t *add_dnodeint(dlistint_t **head, const int n); +dlistint_t *add_dnodeint_end(dlistint_t **head, const int n); +void free_dlistint(dlistint_t *head); +dlistint_t *get_dnodeint_at_index(dlistint_t *head, unsigned int index); +int sum_dlistint(dlistint_t *head); +dlistint_t *insert_dnodeint_at_index(dlistint_t **h, unsigned int idx, int n); +int delete_dnodeint_at_index(dlistint_t **head, unsigned int index); + +#endif/*LIST_H*/ diff --git a/0x17-doubly_linked_lists/palindrome.py b/0x17-doubly_linked_lists/palindrome.py new file mode 100644 index 0000000..cd5e007 --- /dev/null +++ b/0x17-doubly_linked_lists/palindrome.py @@ -0,0 +1,11 @@ +#!/usr/bin/python3 +def ispalindrome(n): + string = str(n) + return string == string[::-1] + +array = [] +for i in range(999, 99, -1): + for j in range(i, 99, -1): + if ispalindrome(i * j): + array.append(i * j) +print(max(array)) diff --git a/0x18-dynamic_libraries/1-create_dynamic_lib.sh b/0x18-dynamic_libraries/1-create_dynamic_lib.sh new file mode 100644 index 0000000..5286752 --- /dev/null +++ b/0x18-dynamic_libraries/1-create_dynamic_lib.sh @@ -0,0 +1,3 @@ +#!/bin/bash +gcc *.c -c -fPIC +gcc *.o -shared -o liball.so diff --git a/0x18-dynamic_libraries/100-operations.so b/0x18-dynamic_libraries/100-operations.so new file mode 100644 index 0000000..e69de29 diff --git a/0x18-dynamic_libraries/100-test.py b/0x18-dynamic_libraries/100-test.py new file mode 100644 index 0000000..206418d --- /dev/null +++ b/0x18-dynamic_libraries/100-test.py @@ -0,0 +1,11 @@ +import random +import ctypes + +cops = ctypes.CDLL('./100-operations.so') +a = random.randint(-111, 111) +b = random.randint(-111, 111) +print("{} + {} = {}".format(a, b, cops.add(a, b))) +print("{} - {} = {}".format(a, b, cops.sub(a, b))) +print("{} x {} = {}".format(a, b, cops.mul(a, b))) +print("{} / {} = {}".format(a, b, cops.div(a, b))) +print("{} % {} = {}".format(a, b, cops.mod(a, b))) diff --git a/0x18-dynamic_libraries/101-make_me_win.sh b/0x18-dynamic_libraries/101-make_me_win.sh new file mode 100644 index 0000000..0b10fdf --- /dev/null +++ b/0x18-dynamic_libraries/101-make_me_win.sh @@ -0,0 +1,3 @@ +#!/bin/bash +wget -P /tmp https://github.com/eyoul/alx-low_level_programming/raw/main/0x18-dynamic_libraries/iwin.so +export LD_PRELOAD=/tmp/iwin.so diff --git a/0x18-dynamic_libraries/README.md b/0x18-dynamic_libraries/README.md new file mode 100644 index 0000000..0317835 --- /dev/null +++ b/0x18-dynamic_libraries/README.md @@ -0,0 +1,17 @@ +# 0x18. C - Dynamic libraries + +In this project, i learnt about what dynamic library is, how it works, how to create one and how it works. It also helped me understand the differences between static and shared libraries. + +## Function Prototypes :floppy_disk: +The following files are scripts written for the projects written in C: + + +## Table of contents +Files | Description +----- | ----------- +[libdynamic.so](./libdynamic.so) | C dynamic library containing the function definitions +[main.h](./main.h) | Header files containing the function prototypes +[1-create_dynamic_lib.sh](./1-create_dynamic_lib.sh) | Bash script that creates a dynamic library called liball.so from all the .c files that are in the current directory +[100-operations.so](./100-operations.so) | C dynamic library that contains C functions that can be called from Python +[random.so](./random.so) | C dynamic library to inject in a giga million program +[101-make_me_win.sh](./101-make_me_win.sh) | Bash script to inject the libmask.so library, using LD_PRELOAD, in the giga million program diff --git a/0x18-dynamic_libraries/TEST/_putchar.c b/0x18-dynamic_libraries/TEST/_putchar.c new file mode 100644 index 0000000..e7b796c --- /dev/null +++ b/0x18-dynamic_libraries/TEST/_putchar.c @@ -0,0 +1,13 @@ +#include + +/** + * _putchar - writes the character c to stdout + * @c: The character to print + * + * Return: On success 1. + * On error, -1 is returned, and errno is set appropriately. + */ +int _putchar(char c) +{ + return (write(1, &c, 1)); +} diff --git a/0x18-dynamic_libraries/TEST/_putchar.o b/0x18-dynamic_libraries/TEST/_putchar.o new file mode 100644 index 0000000000000000000000000000000000000000..0c2bddd3a05124e2fcacee02bbf14db5e3b1b476 GIT binary patch literal 1576 zcmbVL&1(};5TDJ~){j)9Cq+uvl;x4kJbZ z_Hu`QIdRJ{3wii`?&{x$H~Q|q{81SFdF_t9H}3c&W$;E{Kat&|)8D>8tx{QbZZw*4 zSH{jAu_THMr8tR7&liiLxFkyRDNckb)B@@W)Y|<9VENC4*{CEJQv=qs2Ve~g)?9w( z;wYT1k9LIs#9+50gC<%TrMAsp6z&8NrGmrs@ z=3oG#)$4S^E@IuD3o@)KD%f@HASg!<%RPy28yHx21Tdp&Yv0!hmufmtR6I zOSoF@N+I&hm0 zDr@o|A)d9rjg0*fm-)QEtlCuSCp}Oc^}+P-oI*AEgqgcT2nwn`?MD}Le&_LJ7JsPt KJ31MClm8DTJa4D~ literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/abs.c b/0x18-dynamic_libraries/TEST/abs.c new file mode 100644 index 0000000..b6e05d1 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/abs.c @@ -0,0 +1,15 @@ +#include "main.h" +/** + *_abs - compute the absolute value of an integer + *@n: print character + *Return: 0 + */ +int _abs(int n) +{ +if (n > 0) +{ +return (n); +} +else +return (-n); +} diff --git a/0x18-dynamic_libraries/TEST/abs.o b/0x18-dynamic_libraries/TEST/abs.o new file mode 100644 index 0000000000000000000000000000000000000000..bd479d54629dc2d077223c4a741abc2356803815 GIT binary patch literal 1384 zcmbtTy-EW?5T47$|EN(cgs8+y1+yfgpcWDcQ46sU12!U;cpA_oa<>5^L<>O(Ha?1v zAovn_0U=LasRd#Y8N*VQImcHO3%&-8h(??1vuDzzG&&1B0(UXHG?MHY`G%3hSXT!^#y zB1_EqyqrCVP8dfQj*aaM;Ia?InK;PCd;sHO2aNNu5efD5-eJQN$kQO3q)&P%d=p3w zcJE>V#lINsH3+YtoziB8|t>ONu#L`xdeOhNqDy zPQD{i2K&;{P}k33p5D=4_4BBuIpa7~lj~DnHMzdTB}__Rt*fbl;_J0(%+XtEyL*i9 zgeEFbg8t7?pERegzZZgKDHN#d_mHR8n-qBo4bkYhAo>ugPpOxDr?pAapby%M573WD ibLe{F^t&TTU92CXKrunLm=W|k>E(eOw<>){*M9*|#8;63 literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/atoi.c b/0x18-dynamic_libraries/TEST/atoi.c new file mode 100644 index 0000000..545f180 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/atoi.c @@ -0,0 +1,41 @@ +#include "main.h" +#include +/** + * _atoi - gets sign and numbers of string + * @s: array + * Return: gets numbers with its sign + */ +int _atoi(char *s) +{ + unsigned int cont1 = 0, a, b, c, num = 0, tam; + int aux2 = 1; + + while (*(s + cont1) != '\0') + { + cont1++; + } + for (a = 0; a < cont1; a++) + { + if (*(s + a) >= '0' && *(s + a) <= '9') + break; + } + for (b = a; b < cont1; b++) + { + if (!(*(s + b) >= '0' && *(s + b) <= '9')) + break; + } + for (c = 0; c < a; c++) + { + if (*(s + c) == '-') + aux2 = aux2 * (-1); + } + tam = b - a; + while (tam >= 1) + { + num = (num * 10) + (*(s + a) - '0'); + a++; + tam--; + } + num = num * aux2; + return (num); +} diff --git a/0x18-dynamic_libraries/TEST/atoi.o b/0x18-dynamic_libraries/TEST/atoi.o new file mode 100644 index 0000000000000000000000000000000000000000..990d8a3f0caa450f272a5e57aa8ab4af6e504c18 GIT binary patch literal 1640 zcmbtU&1(}u6rah)){okx;vrC#^x_BFF_j9&iUi8o9K?gL;H8vJTwBp3WwQ&d(Dbk( zghl9oq9>1%>LDIH1W!Ho5Md!XL<|_Dpzlp~lHGN^=!2Pg@AuyCy*D4byZrvW7^OrC zC3nf#k|-e?%2>|{HAkk%De^sW;isCff6do-4w}4;o+j@Pmm^HniQBwQ9krcz_(7hw z67R^%hSh0u7lS$%9n~Fs?p&|U1c7XA+U72GxVyyL#+MG=1GUb(NbClP=Yv3Ycgp5n zAa(_@$$O$+%29hh+PtOwSUs|N4+48j+%*n?a1|>II?Pe~_16AjjJ9Z_z8~l-@xDPn z*>0xJ``Dgc8c=&@K&;OWKLT3f%?I!}yubR9tSm3zPG43FR@t=DS+>YB^9z=+7HT&# zEVIZKt_*Q(Fb*RL;~0#U2P%mX(m+fe|5?yc=!=JhZYAmL)a3C!IOlVK;Xs+gbLZ2^ zSFz>O6H1Cgh`^&J42_d-zoL9f&8rw304L|JO7NY`m-RiRHYk zqkVfe#`{Ie3 w9#tDDu2*0D-M~Hx19OD=h=uPCAadZ +/** + *_isalpha - check for alphabetic character + *@c: verify character + *Return: 0 + */ +int _isalpha(int c) +{ +if (c >= 65 && c <= 90) +{ +return (1); +} +else if (c >= 97 && c <= 122) +{ +return (1); +} +else +return (0); +} diff --git a/0x18-dynamic_libraries/TEST/isalpha.o b/0x18-dynamic_libraries/TEST/isalpha.o new file mode 100644 index 0000000000000000000000000000000000000000..52f08bf72772f0c1e77fa6769948a251f8f30ec4 GIT binary patch literal 1416 zcmbtUPfHs?6n~qI#@47&dI&_y_S6bGB*lVykcANAq4ZD)l!Bz2xEj&?VRr&iFgXa) z-1;GU=ts!0(2HNhlb4j^Z6a; zRjJZ$@V2wfHd%Hf*A`K(`#Q_An=H2$;bOHojw#d`)Z)7mU_0Llvr$Q&MFy;k_h5BW zRwkL4`+`lZB2G%OMMGgRbsftu%r>!r;s=EKkHgPD)6(|T6QW+UL(+)$s7nn**A}~( z#3-_1_Fquoi3e~xiAkBqa7F7=?43$ZLhr0q^H>$i(iKEUj39O}u?rTS*SS{#7V;pn zHRW-?!+{-o+yhn#Ltxcrz3w*CViPbLE_){mYnYb$NjSVd_1pTt_*EHTf?wPw(k}`RmA~IkTv`sP!qY zi&|gVH<(nuUiVcGG~cW(V2)nb#NA{3O>!J*l`+4a15D7ICjUkf%=0(-AFz&Iu`BD9 znUfQyCGZ3-^{My@pSHH3$c+vq|0!CU!{ifY-W^eflCS= 48 && c <= 57) +a = 1; +return (a); +} diff --git a/0x18-dynamic_libraries/TEST/isdigit.o b/0x18-dynamic_libraries/TEST/isdigit.o new file mode 100644 index 0000000000000000000000000000000000000000..2772aa83a26a83f4321b95ddcc94b561650f5ab1 GIT binary patch literal 1400 zcmbtUy-Ooe5TDI@#?Lc~g`ga<@=nfYA_}L41j6bShlLQZ5!u8wMol8SFAxQ_I1t3f zO8iqS1q=TT8#@b+Yea-|X7^2edB(;Ym^U-OnctiDwR`0JT8LQ|uvjn;uMwjF_1LSQ z3Ed3zKsWsD`|_0gd2)AhaDU@GQ{wl*{p4XUj_C)CBI9ANt^!faHM!N`EMzYJDAVGZ}hJI=7z z2;!t9<1{#*6UVV^Z@Y^H6u%?1%r^M*uT|P^c_OqH?NBtL-B_gtqHBk{X~rnBq5Ulw z;_-KII*DfK#&AGeXSjDNDFy4LVo8butSL7nCc_cJ9W?Di1bb!a=0OC~kL)IU(yL1l z>#lS`egcRgS3f$+T@S9qIi8@^liRP+BZ z!^ovOGfys~=4|X=#Z;@yC_=_IPpAVaHYy{> +/** + *_islower - check for lowercase alphabet + *@c: the character to print + *Return: 0 + */ +int _islower(int c) +{ +if (c >= 97 && c <= 122) +{ +return (1); +} +else +return (0); +} + diff --git a/0x18-dynamic_libraries/TEST/islower.o b/0x18-dynamic_libraries/TEST/islower.o new file mode 100644 index 0000000000000000000000000000000000000000..5b61dda4bb6c7a56560e50d6ed2f910769eb5fb4 GIT binary patch literal 1400 zcmbtU%`Zbi5TDnF`c~o~AyNlH!lo4x9HdE89K=D=#DVZyPYG@1y={~P2Z_Xun?J=- z;vaEwav?4v5@z=8)^@cQCYha?-_CDm_T#h$yC^mFU11ILr|@Exu3+;~Ts8xOFUOwL6|)0t9%m!h+5ip3`4B@xBX zCSxo%#o}WDE|$ij0X2f!h`P9v1}uM1n2k!(8yK)oR>3Mqtp4_J^EDP7K%A6hn1)nm z+xe?o_pXhcXxBgbMme%{twfST)H#!uCVvD8^q&68A4e{&8AH`Y)u(w~RDETqaZ>qu-i;n;zL}fC zIeJ}HcaQO{fCoencKfu96uzCjT2=AzL{B literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/isupper.c b/0x18-dynamic_libraries/TEST/isupper.c new file mode 100644 index 0000000..5cbff61 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/isupper.c @@ -0,0 +1,18 @@ +#include "main.h" +#include + +/** + * _isupper - function block + * Description: check for uppercase + * @c: integer + * Return: 0 + */ + +int _isupper(int c) +{ +int a = 0; + +if (c >= 65 && c <= 90) +a = 1; +return (a); +} diff --git a/0x18-dynamic_libraries/TEST/isupper.o b/0x18-dynamic_libraries/TEST/isupper.o new file mode 100644 index 0000000000000000000000000000000000000000..718499798df29478465ac05a007657b72f221194 GIT binary patch literal 1400 zcmbtU%}X0m5TDIjQ){fT^dMLyo?1(NB%)AzkcF_-L-9}uh!A9xZnf2Xu=^HbA<01y zf)`Jve~L$;hyEMA^yZ<`i-=HXcHhL8*Lbl5^JeBZ^Lz8YcDwGow<*g477JG4HewW@ zmAdtv*mWQS5VqWBzL}5O`kurjsMSXy}wow9Xe@2*%O7b)@V10QHRx4}GWYP~$ zu-7xhNl9MP;6BbCrHT`y9u`o1htM)d;NtJFv_14hXf4{IXhgfeN)1HUj(0PNQDnpD zzhI1~@4)FK24x(>C)zsWy;I4jFlsjaKvZE{xiK*pj}Y%*U>71hs7bE^B9uX5ciEGE zOM>{|Ne@IN3_(;IwVGc?tlp5mz-w9vrB~fk@lHJw&7gtJ;qNI+@S-u--)ZO#=$sN9fZWCZ90#?ht~Xsz3i<2qRH&65u$6I*gxH2eQ+zOdOMc E0~d2%a{vGU literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/libfilename.so b/0x18-dynamic_libraries/TEST/libfilename.so new file mode 100644 index 0000000000000000000000000000000000000000..02a3cf7c561d5c3ce0cb8efb2bfc5a0e4409e2e6 GIT binary patch literal 17352 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 P`a{bsiF%KMr>Xt~SvEwY literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/main.h b/0x18-dynamic_libraries/TEST/main.h new file mode 100644 index 0000000..b273979 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/main.h @@ -0,0 +1,25 @@ +#ifndef MAIN_H +#define MAIN_H + +int _putchar(char c); +int _islower(int c); +int _isalpha(int c); +int _abs(int n); +int _isupper(int c); +int _isdigit(int c); +int _strlen(char *s); +void _puts(char *s); +char *_strcpy(char *dest, char *src); +int _atoi(char *s); +char *_strcat(char *dest, char *src); +char *_strncat(char *dest, char *src, int n); +char *_strncpy(char *dest, char *src, int n); +int _strcmp(char *s1, char *s2); +char *_memset(char *s, char b, unsigned int n); +char *_memcpy(char *dest, char *src, unsigned int n); +char *_strchr(char *s, char c); +unsigned int _strspn(char *s, char *accept); +char *_strpbrk(char *s, char *accept); +char *_strstr(char *haystack, char *needle); + +#endif/*MAIN_H*/ diff --git a/0x18-dynamic_libraries/TEST/memcpy.c b/0x18-dynamic_libraries/TEST/memcpy.c new file mode 100644 index 0000000..f84ea6f --- /dev/null +++ b/0x18-dynamic_libraries/TEST/memcpy.c @@ -0,0 +1,22 @@ +#include "main.h" + +/** + *_memcpy - copies bytes from memory area src to memory area dest + *@dest: destination area memory + *@src: source memory area + *@n: data + * + *Return: dest + */ + +char *_memcpy(char *dest, char *src, unsigned int n) +{ +unsigned int i; +i = 0; + +while (i < n) +{ +dest[i] = src[i]; +i++; +} +} diff --git a/0x18-dynamic_libraries/TEST/memcpy.o b/0x18-dynamic_libraries/TEST/memcpy.o new file mode 100644 index 0000000000000000000000000000000000000000..cb89765fd931a5695783c9a6c1faaa8af7e50e5b GIT binary patch literal 1424 zcmbtT&ubGw6n>LUn`*0##e+~S>B$!Ckdz4i013pkdr%L;f|pV@>9&P-ldwArjiMfu z(vVC36i=Q74}z!O?V%T;;HAZjNI>7)ok=HSdeH}O-}kB&!l%M3H+em zYV$g*rAW#OGExUaUGS(K2(Jb_5@8y*6cYZf0KV=C4|pw#fY+Nr;5U$KG=rA2wT;jVe7X34gjv+motY54t f&b&LM;HT8jP@knZPjXH=|QMSJXygGiBzZ+G!UlEK|BZxUP{@-u?5|v>`tUD*d7FF z$ff_oizm-w554v$^bn!orQ$^-pzrOzNhf1^(Fe2Nd*6HC%)FV|UHN1w=XqevgGX={ z85UqacjlKC)wT0 zy^}q!BYO|!aonZE$^k4_DvO2Lpw?>WR^fq|7sa_!D~(D!_llx8FG_bZK3x<>5b`)K z;8=bd0B-9uaXt>R=?uWzeg@uV-kX^i8{fx@j`h)%^Qh<;v(AETH%tqq7)+ z@4tto{h=pCd$A7768imJS|qxD+RY$Gkq@JPlPN!T4o@dBXqPaYvi6zwP9>3w5~W2Q zRx^)f1xD&%pbL>~MLMj3NOYXxy79Ey)F57jIs{Qm5)k!f6sZPsjiy!tuW2sPVf_`y zYmJuJh?^TK)>|NA^*R)4ef4D=Mv52z512tM-I;rGWuCL&KgaG{zlA(;<~?y4>>9^G zSAQGx^q&4ze;2hhXAy^OW_`-rX4W@&ACtzn>ps|l<-4^KbM(3f?jGZhtSK-WaQ~eZ zOwgRJ{)hz&M#$*upCeDNxXgJ2d7kh(6BiL_pGI%^VQZ6QoEtr*0FC|&n#0u-=iVJs b@RRjZ6j;V|pSgzKF#Rm=f307cIj;T>2Lx$B literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/puts.c b/0x18-dynamic_libraries/TEST/puts.c new file mode 100644 index 0000000..9874c49 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/puts.c @@ -0,0 +1,20 @@ +#include "main.h" + +/** + *_puts - prints a string + *@s: string + * + *Return : nothing + */ + +void _puts(char *s) +{ +int i = 0; + +while (s[i] != '\0') +{ +_putchar(s[i]); +i++; +} +_putchar('\n'); +} diff --git a/0x18-dynamic_libraries/TEST/puts.o b/0x18-dynamic_libraries/TEST/puts.o new file mode 100644 index 0000000000000000000000000000000000000000..48f427b8c0b6185aab41f4531f5afdff75f73e53 GIT binary patch literal 1640 zcmbtT&1(};5TDJ~){nMH#e+~Odl0E$o=NFJdyuqYlSP6-ZNQ5xo46XV`Cvbw71TpT z2)*>^(Z51GX+WWRk^U1xKriA=0(EBdhHReOOC6ZZ%x~s5?`7ugOS4i+X&SI-a0|u} zqX5hL*e^tG0p?&9ey5lI)U4ijYxk#N^_~w7%pqleEbW;?t8r-UnFC8ZOuvKlhkoy1 zK)GFWsHxdk{qWnzvzUx3_P>6DazF_ zDbx(=Db(_v8l(XFgz>d6piiPby9e5KMq8YnIlYg6^b%sEBoFAvoX@;Y73Zc?RjeQ& zS!hO6@arfkt0zv7?!vd3Wa-iECozh2nEn@x@R?)qhNeJcaOmh ziQ_(Lr(+TRPAhQgApF1^*(Q6QyXA<$-3~xJasmfL-SI<1!5My%ZlT!C*S>jzHb zsf?erL(%m*UDpeCKtvtfrv2D+TJHGF|L_dt(wk8?T0o41=Rb-@wd|8!M5UP(P~*~- zL&-^yz9Bk?U&2L+Uy-=_0^i8IYN$tCu3P`flrvaJA|Mh&(Bg26Lo$Im`mcnm;9|5mt2+q7eu9t{r~^~ literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/strcat.c b/0x18-dynamic_libraries/TEST/strcat.c new file mode 100644 index 0000000..e6d6478 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/strcat.c @@ -0,0 +1,23 @@ +#include "main.h" + +/** + * _strcat - appends src to the dest string + * @dest: string to append by src + * @src: string to append to dest + * + * Return: address of dest + */ +char *_strcat(char *dest, char *src) +{ + int i, j; + + i = j = 0; + while (*(dest + i)) + i++; + while ((*(dest + i) = *(src + j))) + { + i++; + j++; + } + return (dest); +} diff --git a/0x18-dynamic_libraries/TEST/strcat.o b/0x18-dynamic_libraries/TEST/strcat.o new file mode 100644 index 0000000000000000000000000000000000000000..59f0bd07680a76ea1f5afca7bd126b031bfeaa47 GIT binary patch literal 1472 zcmbtT&ubGw6n>kHZPjXG@E}wqo~&SpL@HDdvJl4ZK|Bb7UP{@dYYVzb*`0+}P!AO` zzmz%A)BjV~^w#sTN z^*D*@FK^daZI#t;rg*YN9EzxA)HA5-kD7pO3<$GPNiL@btmlux+Amv6i}MTb@BpqN zPD&Ecz%Q2H6dD)i3fovgK)%q~72*4@ysVvjva}cNa5bVm-K7SiYbV{zViegh_a~U( z^MAqVBxdCth81m}N$*q=iLmVn)`qRrleDU|)WJ*_EIJ5;*8+y+sohnc@b?9 zT2Tb7-3i)>rlpCY7(( zebEEWH)}cO=ylE9J;p;+l4>$$gZXtfF-3Ele6^{yjGA~Re*;l^#ZHpV21ibKMM7uM z(moYm;kj#L-I{Flo8;5KpgBxFVdmWtWm&FYp+FNk?G(9$ULJo#@^_|{sblhg19c#N AJOBUy literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/strchr.c b/0x18-dynamic_libraries/TEST/strchr.c new file mode 100644 index 0000000..086db8e --- /dev/null +++ b/0x18-dynamic_libraries/TEST/strchr.c @@ -0,0 +1,22 @@ +#include "main.h" + +/** + *_strchr - locates character in a string + *@s: string + *@c: character + * + *Return: 0 + */ + +char *_strchr(char *s, char c) +{ + +do { +if (*s == c) +return ((char *)s); +} +while (*s++) +; + +return (0); +} diff --git a/0x18-dynamic_libraries/TEST/strchr.o b/0x18-dynamic_libraries/TEST/strchr.o new file mode 100644 index 0000000000000000000000000000000000000000..67dc6ee5f0e4330a16f7ba2a54abd0c38977578b GIT binary patch literal 1424 zcmbtT&r2Io5T4CywDngSdJrrnJ*iM1NwJ_pOCYT7L5dUtUPLzOYQQFu-M65H)QgCr z6#O@O>#6i8_z!sZ?8%E#522TKW_MnEdB#gSFgr8f%s21Ndv6b%)#a3Bff5Ve!d;|L zfRognUyR)%jKT=~nt1-Z?6xo6cB|9AK6Y;1FHUFT2P`8 zX9^MS*QHkhf#r#CViPD{{~7{2ZHa{RQHLsrSTX&{B?JP5w0I={@}` z|0Qy%XC74-wLax_QR^%F8k5S`>%QrM=9{$+=IC|x+&#wMnUiCyjQQ_uV1jy@{BtHO zC?Z>vzm7P);v(mj$#BC-1|FfMeJZ}f`>josVIK6F0u=f$sE5fX%)C2j>-QEoSkMh literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/strcmp.c b/0x18-dynamic_libraries/TEST/strcmp.c new file mode 100644 index 0000000..400bdd4 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/strcmp.c @@ -0,0 +1,22 @@ +#include "main.h" + +/** + *_strcmp - compare strings + *@s1: string + *@s2: string + * + *Return: integer j + */ + +int _strcmp(char *s1, char *s2) +{ +int i = 0; +int j = 0; + +while (s1[i] == s2[i] && s1[i] != '\0') +{ +i++; +} +j += s1[i] - s2[i]; +return (j); +} diff --git a/0x18-dynamic_libraries/TEST/strcmp.o b/0x18-dynamic_libraries/TEST/strcmp.o new file mode 100644 index 0000000000000000000000000000000000000000..dad89304bf6a78f29d0ac1e2ca276ebf98a816ef GIT binary patch literal 1504 zcmbtT&1(};5TBQgtsm8mr3axR>q!gtkw}H=K>}gz9>jwX=%v)ny0%a^3Ht%5pdS2y z5D@>G9!sb~dy@PKxd;U>ikDCVIaIxsskznR~gH}AcDZ9jZaU<{-%xDTh1 zL;;3{Q@@(JRhWYd@YB3@Qg^yvo$kwHr<)89?Ga@U?J=2e#W(hd_3V-34V<2R?685k zS4!g}jE4?8GWTHhAX(6A;B7zotYhZ>K&P7f{iTEMfZ5}oJ>K{PYqi=v>t?-?G~>j& z%U5`Lxss$&<<;#nFR$>*Qijv^P>QG})HA4SkLrM9_6ajkNft5#?8ReXof2D|n?3sx z59li5q$D5cV_z!0FVrs16y9M40r^5_TZA9K^0G$m$xdI3-;*eVFVfMh&cA_qdQSh!zlB^{vy7^W>`!@BWPfSz zU{d;O-H93~zFuo%j$YT)-BZ0Nw8&RP|8+JnN2NO768u$#ORmmeM~q%^6;+idV!rIq((f>OIDD+>@8akga{q7I~NA#bkKoPO*1i6e}9={{_Ta(Jn(fPjt Dgqw^Q literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/strcpy.c b/0x18-dynamic_libraries/TEST/strcpy.c new file mode 100644 index 0000000..31cd5f8 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/strcpy.c @@ -0,0 +1,20 @@ +#include "main.h" +#include + +/** + *_strcpy - copy string including the terminating null byte + *@dest: destination of string + *@src: source of string + * + *Return: the value dest + */ + +char *_strcpy(char *dest, char *src) +{ +int i = 0; + +for (i = 0; src[i]; i++) +dest[i] = src[i]; +dest[i] = src[i]; +return (dest); +} diff --git a/0x18-dynamic_libraries/TEST/strcpy.o b/0x18-dynamic_libraries/TEST/strcpy.o new file mode 100644 index 0000000000000000000000000000000000000000..0a3c8ed3c57b4603913a9deb693edcc6e44e5705 GIT binary patch literal 1480 zcmbtTy=xRv5TCajlc>>Lf`t%~6AKm0V=qLA7P4@xd4*UA3pOF{t!n~$AM6L@L}Q_d z$2I;nRu%yZHC6tEG{S+6VkZYWv-{rV?aSKe!0gQYW_~m8YhQYI?^uk15(c;7C{ifE zXY0s!bJvAAI1NANFaGky;HwzC7>Pl4_{kenR+?{@hu&C(2V&?Q3U)B`G1wPFeiRt&a65a1*{CGv3IpufePBB^wlp_0`wkD{0^+13&*|fxt-Z0DXQr(L zD+s6-I>RaW@w+N(SDrAfMLT4TXirwDf#}-#Zps)%HcTG}bA0A6IGsdUPGPvHtux;{ zl_Y5#_WC@8&BBwky0o-|(k^(?Z>K>EIF=W7TX|`;lLCJfqyg|&k^m38?RL~btkX>+ zj@PuDq(S&Z##^0?_u_6Ziqk&uIC>iJXnXT<9JC`j{6EYRa_P>@lXGRy$^K<*{v($V zCrrI3Sq2}JV_1`a1@rWr{*`|nxzy7^)kV#xye?|KvNtfPe7$a@2byozdYGfvRl0kO z6~B(YF6OVZfl2CV@@M6sHJyyU$$x+ty8UN$Aqf^*4-yD#_E35d0=}b z5OV1!5I=?IfCsPn5<r5BNaeQ$RrnM~uQeemYJ_j~U*GjIMJS?|{qh5=FxSc73C zQGoA>p@ z1(Zvr)$GekHS~CxeaBWZS~dYU>(l%7m{!2*gO5b8Y%zwXDS&9Ns#dr=NYA)13- zDj>RM)XgYHkqHxjgAqRY08S?{D$^J)DEo|hr;>pCyROG-uoZiPmKByd80mrq`*rSA zfnj-UccjPNJr3-X!yRDNAOKct)a$N?nAhMg!)sa&xKsNo;%zTvO~27}eZCLOcXu7; z?reSbow_R){|}QvF5Q`aaz!!cpnnnTZ~Hmogvs|L%D|V7W_A7x%+q`NSN?0{(wsR| zRpk1VS4FNb?Hf!=U#&Y;1I5>CEzHsD8o7In&rnIS(KsCRzq5%cnp5X@1m&%;(&+q; zn4ni&lm*g?3DY8;LQDIUe2I@+n<%$5pxnd;=wHwrI-fB8?ugP82em+fA_5*D^XQG^ Or^Wua2bHm-^Zx)T9%4HH literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/strncat.c b/0x18-dynamic_libraries/TEST/strncat.c new file mode 100644 index 0000000..8bda7c7 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/strncat.c @@ -0,0 +1,28 @@ +#include "main.h" + +/** + *_strncat - concatenate strings + *@dest: destination + *@src: source + *@n: integer + * + *Return: destination + */ + +char *_strncat(char *dest, char *src, int n) +{ +int j = 0; +int i = 0; + +while (dest[i] != '\0') +{ +i++; +} + +for (j = 0; j < n && src[j] != '\0'; j++) + +dest[j + 1] = src[i]; +dest[j + i + 1] = '\0'; + +return (dest); +} diff --git a/0x18-dynamic_libraries/TEST/strncat.o b/0x18-dynamic_libraries/TEST/strncat.o new file mode 100644 index 0000000000000000000000000000000000000000..0392df34c1fa34f88dbb8bff7d2483035fb842bc GIT binary patch literal 1528 zcmbtU&1(};5TD(Rt=ei+>7h`Oc&dVZBvPR&NFc0zh=>RaUP|4pYYUo9*bhjB>Y*Zr zQ0UQvSN{cXLP4WjLg`C;+^lU*z3&R4#DN8?=!tG{6N8-2@+u}6H<+~1r*oA#pewAV*u zVHd5(-}3GI$V}#Z1|VbW!9POol1hx z_Z&N94y+0{A(oOaBs&<{1q(JBpGn={Vt51Bp;fmq^Vdjuaccz|PRrDP0U&QKf>LTKV z$@e76;7~e>Rr&Lnr|0yq{42<%o@Lam$oZ7dikvU)HB3rBTQ{8t=G2;q(d!zydyHoV zzl45P)Su1@CaF~AFA4rqmW;m2e~1{p;woxZ+M?mC08gQ%bxOX(^JWvJCFXyl0Od3) m^-%eQsdtAEJQDNe{|jLxqHP-BcN#U1za#i-!^+fA`M&{lx0ZhZ literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/strncpy.c b/0x18-dynamic_libraries/TEST/strncpy.c new file mode 100644 index 0000000..358fab6 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/strncpy.c @@ -0,0 +1,29 @@ +#include "main.h" + +/** + *_strncpy - copy strings + *@dest: destination + *@src: source + *@n: integer + * + *Return: destination + */ + +char *_strncpy(char *dest, char *src, int n) +{ + +int j = 0; + +for (j = 0; src[j] != '\0'; j++) +{ +if (j < n) +{ +dest[j] = src[j]; +} +} +for (; j < n; j++) +{ +dest[j] = '\0'; +} +return (dest); +} diff --git a/0x18-dynamic_libraries/TEST/strncpy.o b/0x18-dynamic_libraries/TEST/strncpy.o new file mode 100644 index 0000000000000000000000000000000000000000..3619f5dcf5e2f76bc7456b91a09cf87f87a6ace0 GIT binary patch literal 1496 zcmbtU%WD&15TD(xt=ej%^iZg1JgI0u5~<(=WFf5GgNO(Vy_B+9*A_IJun%a&=s_ul zT>NW1SA+^Z<>;Y@9uxw-__&A!bY^$HboVn}bYOO7elx$B@0Gl;?%vTg4Wwvr8xA9h z0({gDeKU1Un1N~dK7013V|PE>-Oj-7Ci`7y?}Ig@0yYPid)Dxlwbwa^*7o{#&)T=O ze$T;R*X}t3Ticy|3$OK;)=(>yAo^-Md3P{3Lb0~L1HhHo^w}qDH&}fS%eC6g@M9to~-sBTkrnPh18&(ow9+zkqpqPXEfkf?VoZLCuSt zPx-va`O;p)r1bN3-||7uS8FZI(d#PQJ;pznQ)VlT`qNp(1oc$;^E~LfB(hccD~Qu8 zHaRcN3OAf*;22t3r{qg~+-#!U=lNeKKsk;|Jybqn>fIp(CeN4uFNBeB+bqEEDb#WN N7W3Cfm6@aRe*>eZi)H`- literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/strpbrk.c b/0x18-dynamic_libraries/TEST/strpbrk.c new file mode 100644 index 0000000..c471101 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/strpbrk.c @@ -0,0 +1,25 @@ +#include "main.h" + +#include + +/** + *_strpbrk - locate the first occurence in the string + *@s: string + *@accept: string + * + *Return: NULL + */ + +char *_strpbrk(char *s, char *accept) +{ +int i = 0; +int j = 0; + +for (i = 0; s[i]; i++) +{ +for (j = 0; accept[j]; j++) +if (*(accept + j) == s[i]) +return (&(s[i])); +} +return (NULL); +} diff --git a/0x18-dynamic_libraries/TEST/strpbrk.o b/0x18-dynamic_libraries/TEST/strpbrk.o new file mode 100644 index 0000000000000000000000000000000000000000..3000e2a81944c310c13b2c263b3a719cb71825b5 GIT binary patch literal 1512 zcmbtU&1(}u6n~qoX|>fv@gP(ro~&SpL|UvKBoM~#K}3W=FQsnQwSk%s_5)hM52y$s z7X?rL9~O^A5A88$PrV3%Tof-s0{Y(UOgb6Yi#~Ys-uun_&6}AwyD#|NI~mIYB^KO< z<4B1JlF8!=Jov%*kS>NfzM+baJvj=>X7!eKDWIVXhcZhM{u?};4u<|L+35;?O>kXE7`N%S8@M=H)u*-*tBVDB;9r1S`sq*?~ zSgllU6&9+sxEaNTn{0^{7fZ2-O3$wsS#gP#t|mCes{$T(pD-Jhd2^!HJ z?@|NNwZ&;BF^X)+{s{_v`Y$-$#H7q(cuw1=I6I|;QP8dhTg-zE=?Y>&j37=haS9gh zG$OYK46_qkS6<|AN5CGrkqfLAhQPd5qv1CZYqlbvVVf4i$n~~lyxELdJ7~52Ald;I z_)lEs*Eb#qZo`+w|HI59mwIO2Tv@I;KEI63Z|E}OgsJx=)8LD83~TbQ;5x`3sW2qLa}# z`D=*LD=wqzQkM%}kl;zQv`@uXcv@|uJe2jnQGjv^mDVu%gqgiV2=2@J>i`&XDyy31S7j+)F+lvYo%N5@ZdKHSSBSH^g!VYwuyDR=a6m@#;w^ z68i>U4mOjp@(yK!4 zSup)OnBp^k!099==GuGuh->1;G9|qF?wAScTbIEQ=5EE%wJ~>b5v^bZOLEOxa6ArRmA8OS5b9&ARC^O z;4!qcPQ_Pv-fW_*%K2X@K%xJFdYF8|%)3JfTseP^0!?Jw5po*6Jbp*=H%672WAc9i Da4L>q literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/TEST/strstr.c b/0x18-dynamic_libraries/TEST/strstr.c new file mode 100644 index 0000000..6862a15 --- /dev/null +++ b/0x18-dynamic_libraries/TEST/strstr.c @@ -0,0 +1,42 @@ +#include "main.h" +#include + +/** + *_strstr - find the first occurence + *@haystack: string + *@needle: string + * + *Return: the pointer to the first occurence + */ +#include +char *_strstr(char *haystack, char *needle) +{ + + int i = 0; + int j = 0; + int k, s; + + for (s = 0; needle[s]; s++) + ; + if (s == 0) + return (haystack); + while (haystack[i]) + { + if (haystack[i] == needle[j]) + { + i++; + j++; + for (k = i; haystack[k]; k++) + { + if (needle[j] == '\0') + return (&(haystack[i - 1])); + if (haystack[k] != needle[j]) + break; + j++; + } + } + i++; + j = 0; + } + return (NULL); +} diff --git a/0x18-dynamic_libraries/TEST/strstr.o b/0x18-dynamic_libraries/TEST/strstr.o new file mode 100644 index 0000000000000000000000000000000000000000..921b77b9ff956e91e6dd45fd499eba2bb47526b7 GIT binary patch literal 1640 zcmbtU&ubGw6n>M9tv{+sg9oKj;znDC&z#=+s<-xfdduz}iUCy*#n5$Qa{XvSj9FWZ^+HE) zi>}T(u@CU#!0t8n#t>`1M-Jk>Z(lHIi-Ak)Ikb3N4E4g1D?38j>LkmU|1V6B)5)W-^(4 zq#bX3hP7<=R`O~tZ+E#|a#3_i_*cI3P^D z_VXB%v8U_6cH?YeZuaCp9@HhoXpmi`gA?cCFC*ErGg_P>#lgcKM2*7tNmxw_y#cfq zTvdo^(^dM5nzI`}MwtdPzk?1w`v;ufgx^kMn((aC**j5cRuzA|0Gn~a0{rVGYh`CjO;nxzs!m2wab_grtXufJq!|MAqZbVoNm*< z>aU}gdZuuAP0deruc`T!zkx*+dwI<;FoY`*qub>>d(2-+eG+4@1;3mPED|-Se<$^; zUNOc&{R7147H4pHttT5^kl-owv`(d0c-Y(|>B{+?e_hP!yPzIHJz>GKLkK!@{sbi+ UlWnKSJVs%91#V55ZV=S}0_2{?KL7v# literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/iwin.c b/0x18-dynamic_libraries/iwin.c new file mode 100644 index 0000000..078a4c8 --- /dev/null +++ b/0x18-dynamic_libraries/iwin.c @@ -0,0 +1,22 @@ +#include +#include + +int rand() +{ + static int ct = -1; + + ct++; + if (ct == 0) + return 8; + if (ct == 1) + return 8; + if (ct == 2) + return 7; + if (ct == 3) + return 9; + if (ct == 4) + return 23; + if (ct == 5) + return 74; + return ct * ct % 30000; +} diff --git a/0x18-dynamic_libraries/iwin.so b/0x18-dynamic_libraries/iwin.so new file mode 100644 index 0000000..e69de29 diff --git a/0x18-dynamic_libraries/libdynamic.so b/0x18-dynamic_libraries/libdynamic.so new file mode 100644 index 0000000000000000000000000000000000000000..02a3cf7c561d5c3ce0cb8efb2bfc5a0e4409e2e6 GIT binary patch literal 17352 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 P`a{bsiF%KMr>Xt~SvEwY literal 0 HcmV?d00001 diff --git a/0x18-dynamic_libraries/main.h b/0x18-dynamic_libraries/main.h new file mode 100644 index 0000000..b273979 --- /dev/null +++ b/0x18-dynamic_libraries/main.h @@ -0,0 +1,25 @@ +#ifndef MAIN_H +#define MAIN_H + +int _putchar(char c); +int _islower(int c); +int _isalpha(int c); +int _abs(int n); +int _isupper(int c); +int _isdigit(int c); +int _strlen(char *s); +void _puts(char *s); +char *_strcpy(char *dest, char *src); +int _atoi(char *s); +char *_strcat(char *dest, char *src); +char *_strncat(char *dest, char *src, int n); +char *_strncpy(char *dest, char *src, int n); +int _strcmp(char *s1, char *s2); +char *_memset(char *s, char b, unsigned int n); +char *_memcpy(char *dest, char *src, unsigned int n); +char *_strchr(char *s, char c); +unsigned int _strspn(char *s, char *accept); +char *_strpbrk(char *s, char *accept); +char *_strstr(char *haystack, char *needle); + +#endif/*MAIN_H*/ diff --git a/0x18-dynamic_libraries/test.c b/0x18-dynamic_libraries/test.c new file mode 100644 index 0000000..9bc9a8e --- /dev/null +++ b/0x18-dynamic_libraries/test.c @@ -0,0 +1,28 @@ +int add(int a, int b) +{ + return (a + b); +} + +int sub(int a, int b) +{ + return (a - b); +} + +int mul(int a, int b) +{ + return(a * b); +} + +int div(int a, int b) +{ + if (b != 0) + return (a / b); + return (0); +} + +int mod(int a, int b) +{ + if (b != 0) + return (a % b); + return (0); +}