-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_error2.c
135 lines (123 loc) · 2.54 KB
/
_error2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include "shell.h"
/**
* _erratoi - Function converts a string to an integer
* @str: The string to be converted
* Return: Return 0 if no numbers in the string, converted number otherwise
* -1 on error
*/
int _erratoi(char *str)
{
int index = 0;
unsigned long int result = 0;
if (*str == '+')
str++;
for (index = 0; str[index] != '\0'; index++)
{
if (str[index] >= '0' && str[index] <= '9')
{
result *= 10;
result += (str[index] - '0');
if (result > INT_MAX)
return (-1);
}
else
return (-1);
}
return (result);
}
/**
* _printDecimal - Function prints a decimal (integer) number (base 10)
* @input: The input number
* @fd: The file descriptor to write to
* Return: Return number of characters printed
*/
int _printDecimal(int input, int fd)
{
int (*putchar_func)(char) = _putchar;
int i, count = 0;
unsigned int abs_val, current;
if (fd == STDERR_FILENO)
putchar_func = _eputchar;
if (input < 0)
{
abs_val = -input;
putchar_func('-');
count++;
}
else
abs_val = input;
current = abs_val;
for (i = 1000000000; i > 1; i /= 10)
{
if (abs_val / i)
{
putchar_func('0' + current / i);
count++;
}
current %= i;
}
putchar_func('0' + current);
count++;
return (count);
}
/**
* _printError - Function prints an error messages
* @info: The parameter and return info struct
* @error_type: The string containing the specified error type
* Return: Void
*/
void _printError(info_t *info, char *error_type)
{
_eputs(info->_filename);
_eputs(": ");
_printDecimal(info->_lineCount, STDERR_FILENO);
_eputs(": ");
_eputs(info->_argv[0]);
_eputs(": ");
_eputs(error_type);
}
/**
* _removeComments - Function replaces the first instance of '#' with '\0'
* @buf: Address of the string to modify
* Return: Void
*/
void _removeComments(char *buf)
{
int index;
for (index = 0; buf[index] != '\0'; index++)
if (buf[index] == '#' && (!index || buf[index - 1] == ' '))
{
buf[index] = '\0';
break;
}
}
/**
* _convertNumber - Function converter, a clone of itoa
* @num: number
* @base: base
* @flags: argument flags
* Return: string
*/
char *_convertNumber(long int num, int base, int flags)
{
static char *array;
static char buffer[50];
char sign = 0;
char *ptr;
unsigned long n = num;
if (!(flags & CONVERT_UNSIGNED) && num < 0)
{
n = -num;
sign = '-';
}
array = flags & CONVERT_LOWERCASE ? "0123456789abcdef" : "0123456789ABCDEF";
ptr = &buffer[49];
*ptr = '\0';
do {
*--ptr = array[n % base];
n /= base;
} while (n != 0);
if (sign)
*--ptr = sign;
return (ptr);
}