-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfprinter_utils.c
83 lines (68 loc) · 2 KB
/
fprinter_utils.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
// fprinter_utils.c
#include "gheader.h"
#include "gdefs.h"
f_printer *init_fprinter(void)
{
f_printer *fprinter;
fprinter = malloc(sizeof(f_printer));
if (!fprinter)
return NULL;
// Initialize all fields to safe defaults
fprinter->buffer = NULL;
fprinter->_error_stat = FP_ERROR_NONE;
fprinter->_fd = STDOUT_FILENO; // Default to standard output
fprinter->_filepath = NULL;
fprinter->_flags = FP_FLAG_NONE;
fprinter->_p_data = NULL;
return fprinter;
}
// Helper function to set buffer data
int set_buffer(f_printer *fprinter, const char *format)
{
if (!fprinter || !format)
return FP_ERROR_INVALID_ARGS;
// Free old buffer if it exists
if (fprinter->buffer)
free(fprinter->buffer);
// Duplicate the format string
fprinter->buffer = (unsigned char *)data_dup(format);
if (!fprinter->buffer)
return FP_ERROR_MEMORY;
return FP_ERROR_NONE;
}
// ?? helper function to set file path
int set_filepath(f_printer *fprinter, const char *filepath)
{
if (!fprinter || !filepath)
return FP_ERROR_INVALID_ARGS;
// ?? free old filepath if it exists
if (fprinter->_filepath)
free(fprinter->_filepath);
// ?? duplicate the filepath
fprinter->_filepath = (unsigned char *)data_dup(filepath);
if (!fprinter->_filepath)
return FP_ERROR_MEMORY;
// ?? reset file descriptor to force new file opening
fprinter->_fd = -1;
return FP_ERROR_NONE;
}
int fprinter_set_buffer(f_printer *fprinter, const char *format)
{
return set_buffer(fprinter, format);
}
int fprinter_set_file(f_printer *fprinter, const char *format, int flags)
{
int result = set_filepath(fprinter, format);
if (result == FP_ERROR_NONE)
{
fprinter->_flags = flags;
}
return result;
}
int fprinter_set_data(f_printer *fprinter, void **data)
{
if (!fprinter)
return (FP_ERROR_INVALID_ARGS);
fprinter->_p_data = data;
return FP_ERROR_NONE;
}