diff options
Diffstat (limited to 'libbb/read_package_field.c')
-rw-r--r-- | libbb/read_package_field.c | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/libbb/read_package_field.c b/libbb/read_package_field.c deleted file mode 100644 index 9e5590347..000000000 --- a/libbb/read_package_field.c +++ /dev/null | |||
@@ -1,101 +0,0 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
2 | /* | ||
3 | * Utility routines. | ||
4 | * | ||
5 | * Copyright (C) many different people. | ||
6 | * If you wrote this, please acknowledge your work. | ||
7 | * | ||
8 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | ||
9 | */ | ||
10 | |||
11 | #include <stdlib.h> | ||
12 | #include <string.h> | ||
13 | #include "libbb.h" | ||
14 | |||
15 | /* | ||
16 | * Gets the next package field from package_buffer, seperated into the field name | ||
17 | * and field value, it returns the int offset to the first character of the next field | ||
18 | */ | ||
19 | int read_package_field(const char *package_buffer, char **field_name, char **field_value) | ||
20 | { | ||
21 | int offset_name_start = 0; | ||
22 | int offset_name_end = 0; | ||
23 | int offset_value_start = 0; | ||
24 | int offset_value_end = 0; | ||
25 | int offset = 0; | ||
26 | int next_offset; | ||
27 | int name_length; | ||
28 | int value_length; | ||
29 | int exit_flag = FALSE; | ||
30 | |||
31 | if (package_buffer == NULL) { | ||
32 | *field_name = NULL; | ||
33 | *field_value = NULL; | ||
34 | return(-1); | ||
35 | } | ||
36 | while (1) { | ||
37 | next_offset = offset + 1; | ||
38 | switch (package_buffer[offset]) { | ||
39 | case('\0'): | ||
40 | exit_flag = TRUE; | ||
41 | break; | ||
42 | case(':'): | ||
43 | if (offset_name_end == 0) { | ||
44 | offset_name_end = offset; | ||
45 | offset_value_start = next_offset; | ||
46 | } | ||
47 | /* TODO: Name might still have trailing spaces if ':' isnt | ||
48 | * immediately after name */ | ||
49 | break; | ||
50 | case('\n'): | ||
51 | /* TODO: The char next_offset may be out of bounds */ | ||
52 | if (package_buffer[next_offset] != ' ') { | ||
53 | exit_flag = TRUE; | ||
54 | break; | ||
55 | } | ||
56 | case('\t'): | ||
57 | case(' '): | ||
58 | /* increment the value start point if its a just filler */ | ||
59 | if (offset_name_start == offset) { | ||
60 | offset_name_start++; | ||
61 | } | ||
62 | if (offset_value_start == offset) { | ||
63 | offset_value_start++; | ||
64 | } | ||
65 | break; | ||
66 | } | ||
67 | if (exit_flag) { | ||
68 | /* Check that the names are valid */ | ||
69 | offset_value_end = offset; | ||
70 | name_length = offset_name_end - offset_name_start; | ||
71 | value_length = offset_value_end - offset_value_start; | ||
72 | if (name_length == 0) { | ||
73 | break; | ||
74 | } | ||
75 | if ((name_length > 0) && (value_length > 0)) { | ||
76 | break; | ||
77 | } | ||
78 | |||
79 | /* If not valid, start fresh with next field */ | ||
80 | exit_flag = FALSE; | ||
81 | offset_name_start = offset + 1; | ||
82 | offset_name_end = 0; | ||
83 | offset_value_start = offset + 1; | ||
84 | offset_value_end = offset + 1; | ||
85 | offset++; | ||
86 | } | ||
87 | offset++; | ||
88 | } | ||
89 | if (name_length == 0) { | ||
90 | *field_name = NULL; | ||
91 | } else { | ||
92 | *field_name = bb_xstrndup(&package_buffer[offset_name_start], name_length); | ||
93 | } | ||
94 | if (value_length > 0) { | ||
95 | *field_value = bb_xstrndup(&package_buffer[offset_value_start], value_length); | ||
96 | } else { | ||
97 | *field_value = NULL; | ||
98 | } | ||
99 | return(next_offset); | ||
100 | } | ||
101 | |||