xorriso  1.5.4.pl02
About: GNU xorriso creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions. It is suitable for incremental data backup and for production of bootable ISO 9660 images. GNU xorriso is a statical compilation of the libraries libburn, libisofs, libisoburn, and libjte.
  Fossies Dox: xorriso-1.5.4.pl02.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

util.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2007 Vreixo Formoso
3  * Copyright (c) 2009 - 2012 Thomas Schmitt
4  *
5  * This file is part of the libisofs project; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License version 2
7  * or later as published by the Free Software Foundation.
8  * See COPYING file for details.
9  */
10 
11 #ifndef LIBISO_UTIL_H_
12 #define LIBISO_UTIL_H_
13 
14 #ifdef HAVE_STDINT_H
15 #include <stdint.h>
16 #else
17 #ifdef HAVE_INTTYPES_H
18 #include <inttypes.h>
19 #endif
20 #endif
21 
22 #include <time.h>
23 
24 #ifdef HAVE_STDLIB_H
25 #include <stdlib.h>
26 #endif
27 
28 #include <fcntl.h>
29 
30 #ifndef MAX
31 # define MAX(a, b) (((a) > (b)) ? (a) : (b))
32 #endif
33 
34 #ifndef MIN
35 # define MIN(a, b) (((a) < (b)) ? (a) : (b))
36 #endif
37 
38 #define DIV_UP(n,div) ((n + div - 1) / div)
39 #define ROUND_UP(n,mul) (DIV_UP(n, mul) * mul)
40 
41 int int_pow(int base, int power);
42 
43 /**
44  * Set up locale by LC_* environment variables.
45  */
46 int iso_init_locale(int flag);
47 
48 /**
49  * Convert the charset encoding of a given string.
50  *
51  * @param input
52  * Input string
53  * @param icharset
54  * Input charset. Must be supported by iconv
55  * @param ocharset
56  * Output charset. Must be supported by iconv
57  * @param output
58  * Location where the pointer to the output string will be stored
59  * @return
60  * 1 on success, < 0 on error
61  */
62 int strconv(const char *input, const char *icharset, const char *ocharset,
63  char **output);
64 
65 /* Like strconv but processing len input bytes rather than strlen(input)
66  */
67 int strnconv(const char *str, const char *icharset, const char *ocharset,
68  size_t len, char **output);
69 
70 /* Like strnconv but also returning the number of bytes in *output.
71  */
72 int strnconvl(const char *str, const char *icharset, const char *ocharset,
73  size_t len, char **output, size_t *out_len);
74 
75 /**
76  * Convert a given string from any input charset to ASCII
77  *
78  * @param icharset
79  * Input charset. Must be supported by iconv
80  * @param input
81  * Input string
82  * @param output
83  * Location where the pointer to the output string will be stored
84  * @return
85  * 1 on success, < 0 on error
86  */
87 int str2ascii(const char *icharset, const char *input, char **output);
88 
89 /**
90  * Convert a given string from any input charset to UCS-2BE charset,
91  * used for Joliet file identifiers.
92  *
93  * @param icharset
94  * Input charset. Must be supported by iconv
95  * @param input
96  * Input string
97  * @param output
98  * Location where the pointer to the output string will be stored
99  * @return
100  * 1 on success, < 0 on error
101  */
102 int str2ucs(const char *icharset, const char *input, uint16_t **output);
103 
104 /**
105  * Convert a given string from any input charset to UTF-16BE charset,
106  * used for HFS+ file identifiers.
107  * (UTF-16 differs from older UCS-2 by having multi word characters.)
108  *
109  * @param icharset
110  * Input charset. Must be supported by iconv
111  * @param input
112  * Input string
113  * @param output
114  * Location where the pointer to the output string will be stored
115  * @return
116  * 1 on success, < 0 on error
117  */
118 int str2utf16be(const char *icharset, const char *input, uint16_t **output);
119 
120 /**
121  * Create a level 1 directory identifier.
122  *
123  * @param src
124  * The identifier, in ASCII encoding.
125  * @param relaxed
126  * 0 only allow d-characters, 1 allow also lowe case chars,
127  * 2 allow all characters
128  */
129 char *iso_1_dirid(const char *src, int relaxed);
130 
131 /**
132  * Create a level 2 directory identifier.
133  *
134  * @param src
135  * The identifier, in ASCII encoding.
136  */
137 char *iso_2_dirid(const char *src);
138 
139 /**
140  * Create a dir name suitable for an ISO image with relaxed constraints.
141  *
142  * @param src
143  * The identifier, in ASCII encoding.
144  * @param size
145  * Max len for the name
146  * @param relaxed
147  * 0 only allow d-characters, 1 allow also lowe case chars,
148  * 2 allow all characters
149  */
150 char *iso_r_dirid(const char *src, int size, int relaxed);
151 
152 /**
153  * Create a level 1 file identifier that consists of a name, in 8.3
154  * format.
155  * Note that version number is not added to the file name
156  *
157  * @param src
158  * The identifier, in ASCII encoding.
159  * @param relaxed
160  * 0 only allow d-characters, 1 allow also lowe case chars,
161  * 2 allow all characters
162  * @param force_dots
163  * If 1 then prepend empty extension by SEPARATOR1 = '.'
164  */
165 char *iso_1_fileid(const char *src, int relaxed, int force_dots);
166 
167 /**
168  * Create a level 2 file identifier.
169  * Note that version number is not added to the file name
170  *
171  * @param src
172  * The identifier, in ASCII encoding.
173  */
174 char *iso_2_fileid(const char *src);
175 
176 /**
177  * Create a file name suitable for an ISO image with relaxed constraints.
178  *
179  * @param src
180  * The identifier, in ASCII encoding.
181  * @param len
182  * Max len for the name, without taken the "." into account.
183  * @param relaxed
184  * 0 only allow d-characters, 1 allow also lowe case chars,
185  * 2 allow all characters
186  * @param forcedot
187  * Whether to ensure that "." is added
188  */
189 char *iso_r_fileid(const char *src, size_t len, int relaxed, int forcedot);
190 
191 /**
192  * Create a Joliet file identifier that consists of name and extension. The
193  * combined name and extension length will normally not exceed 64 characters
194  * (= 128 bytes). The name and the extension will be separated (.).
195  * All characters consist of 2 bytes and the resulting string is
196  * NULL-terminated by a 2-byte NULL.
197  *
198  * Note that version number and (;1) is not appended.
199  * @param flag
200  * bit0= no_force_dots
201  * bit1= allow 103 characters rather than 64
202  * @return
203  * NULL if the original name and extension both are of length 0.
204  */
205 uint16_t *iso_j_file_id(const uint16_t *src, int flag);
206 
207 /**
208  * Create a Joliet directory identifier that consists of name and optionally
209  * extension. The combined name and extension length will not exceed 128 bytes,
210  * and the name and extension will be separated (.). All characters consist of
211  * 2 bytes and the resulting string is NULL-terminated by a 2-byte NULL.
212  *
213  * @param flag
214  * bit1= allow 103 characters rather than 64
215  * @return
216  * NULL if the original name and extension both are of length 0.
217  */
218 uint16_t *iso_j_dir_id(const uint16_t *src, int flag);
219 
220 /**
221  * Like strlen, but for Joliet strings.
222  */
223 size_t ucslen(const uint16_t *str);
224 
225 /**
226  * Like strrchr, but for Joliet strings.
227  */
228 uint16_t *ucsrchr(const uint16_t *str, char c);
229 
230 /**
231  * Like strdup, but for Joliet strings.
232  */
233 uint16_t *ucsdup(const uint16_t *str);
234 
235 /**
236  * Like strcmp, but for Joliet strings.
237  */
238 int ucscmp(const uint16_t *s1, const uint16_t *s2);
239 
240 /**
241  * Like strcpy, but for Joliet strings.
242  */
243 uint16_t *ucscpy(uint16_t *dest, const uint16_t *src);
244 
245 /**
246  * Like strncpy, but for Joliet strings.
247  * @param n
248  * Maximum number of characters to copy (2 bytes per char).
249  */
250 uint16_t *ucsncpy(uint16_t *dest, const uint16_t *src, size_t n);
251 
252 /**
253  * Check whether utf_word is the first surrogate word of a pair.
254  * If so, change it to UTF-16 character '_'.
255  */
256 void iso_handle_split_utf16(uint16_t *utf_word);
257 
258 /**
259  * Convert a given input string to d-chars.
260  * @return
261  * 1 on success, < 0 error, 0 if input was null (output is set to null)
262  */
263 int str2d_char(const char *icharset, const char *input, char **output);
264 int str2a_char(const char *icharset, const char *input, char **output);
265 
266 void iso_lsb(uint8_t *buf, uint32_t num, int bytes);
267 void iso_lsb64(uint8_t *buf, uint64_t num);
268 void iso_msb(uint8_t *buf, uint32_t num, int bytes);
269 void iso_bb(uint8_t *buf, uint32_t num, int bytes);
270 
271 /* An alternative to iso_lsb() which advances the write pointer
272 */
273 int iso_lsb_to_buf(char **wpt, uint32_t value, int bytes, int flag);
274 
275 uint32_t iso_read_lsb(const uint8_t *buf, int bytes);
276 uint32_t iso_read_msb(const uint8_t *buf, int bytes);
277 
278 /**
279  * if error != NULL it will be set to 1 if LSB and MSB integers don't match.
280  */
281 uint32_t iso_read_bb(const uint8_t *buf, int bytes, int *error);
282 
283 uint64_t iso_read_lsb64(const uint8_t *buf);
284 uint64_t iso_read_msb64(const uint8_t *buf);
285 
286 /**
287  * Records the date/time into a 7 byte buffer (ECMA-119, 9.1.5)
288  *
289  * @param buf
290  * Buffer where the date will be written
291  * @param t
292  * The time to be written
293  * @param always_gmt
294  * Always write the date in GMT and not in local time.
295  */
296 void iso_datetime_7(uint8_t *buf, time_t t, int always_gmt);
297 
298 /** Records the date/time into a 17 byte buffer (ECMA-119, 8.4.26.1) */
299 void iso_datetime_17(uint8_t *buf, time_t t, int always_gmt);
300 
301 time_t iso_datetime_read_7(const uint8_t *buf);
302 time_t iso_datetime_read_17(const uint8_t *buf);
303 
304 /**
305  * Check whether the caller process has read access to the given local file.
306  *
307  * @return
308  * 1 on success (i.e, the process has read access), < 0 on error
309  * (including ISO_FILE_ACCESS_DENIED on access denied to the specified file
310  * or any directory on the path).
311  */
312 int iso_eaccess(const char *path);
313 
314 /**
315  * Copy up to \p len chars from \p buf and return this newly allocated
316  * string. The new string is null-terminated.
317  */
318 char *iso_util_strcopy(const char *buf, size_t len);
319 
320 /**
321  * Copy up to \p len chars from \p buf and return this newly allocated
322  * string. The new string is null-terminated.
323  * Any trailing blanks will be removed.
324  */
325 char *iso_util_strcopy_untail(const char *buf, size_t len);
326 
327 /**
328  * Copy up to \p max characters from \p src to \p dest. If \p src has less than
329  * \p max characters, we pad dest with " " characters.
330  */
331 void strncpy_pad(char *dest, const char *src, size_t max);
332 
333 /**
334  * Convert a Joliet string with a length of \p len bytes to a new string
335  * in local charset.
336  */
337 char *ucs2str(const char *buf, size_t len);
338 
339 typedef struct iso_rbtree IsoRBTree;
340 typedef struct iso_htable IsoHTable;
341 
342 typedef unsigned int (*hash_funtion_t)(const void *key);
343 typedef int (*compare_function_t)(const void *a, const void *b);
344 typedef void (*hfree_data_t)(void *key, void *data);
345 
346 /**
347  * Create a new binary tree. libisofs binary trees allow you to add any data
348  * passing it as a pointer. You must provide a function suitable for compare
349  * two elements.
350  *
351  * @param compare
352  * A function to compare two keys. It takes a pointer to both keys
353  * and return 0, -1 or 1 if the first key is equal, less or greater
354  * than the second one.
355  * @param tree
356  * Location where the tree structure will be stored.
357  */
358 int iso_rbtree_new(int (*compare)(const void*, const void*), IsoRBTree **tree);
359 
360 /**
361  * Destroy a given tree.
362  *
363  * Note that only the structure itself is deleted. To delete the elements, you
364  * should provide a valid free_data function. It will be called for each
365  * element of the tree, so you can use it to free any related data.
366  */
367 void iso_rbtree_destroy(IsoRBTree *tree, void (*free_data)(void *));
368 
369 /**
370  * Inserts a given element in a Red-Black tree.
371  *
372  * @param tree
373  * the tree where to insert
374  * @param data
375  * element to be inserted on the tree. It can't be NULL
376  * @param item
377  * if not NULL, it will point to a location where the tree element ptr
378  * will be stored. If data was inserted, *item == data. If data was
379  * already on the tree, *item points to the previously inserted object
380  * that is equal to data.
381  * @return
382  * 1 success, 0 element already inserted, < 0 error
383  */
384 int iso_rbtree_insert(IsoRBTree *tree, void *data, void **item);
385 
386 /**
387  * Get the number of elements in a given tree.
388  */
389 size_t iso_rbtree_get_size(IsoRBTree *tree);
390 
391 /**
392  * Get an array view of the elements of the tree.
393  *
394  * @param include_item
395  * Function to select which elements to include in the array. It that takes
396  * a pointer to an element and returns 1 if the element should be included,
397  * 0 if not. If you want to add all elements to the array, you can pass a
398  * NULL pointer.
399  * @param size
400  * If not null, will be filled with the number of elements in the array,
401  * without counting the final NULL item.
402  * @return
403  * A sorted array with the contents of the tree, or NULL if there is not
404  * enough memory to allocate the array. You should free(3) the array when
405  * no more needed. Note that the array is NULL-terminated, and thus it
406  * has size + 1 length.
407  */
408 void **iso_rbtree_to_array(IsoRBTree *tree, int (*include_item)(void *),
409  size_t *size);
410 
411 /** Predict the size of the array which gets returned by iso_rbtree_to_array().
412  */
413 size_t iso_rbtree_count_array(IsoRBTree *tree, size_t initial_count,
414  int (*include_item)(void *));
415 
416 
417 /**
418  * Create a new hash table.
419  *
420  * @param size
421  * Number of slots in table.
422  * @param hash
423  * Function used to generate
424  */
427 
428 /**
429  * Put an element in a Hash Table. The element will be identified by
430  * the given key, that you should use to retrieve the element again.
431  *
432  * This function allow duplicates, i.e., two items with the same key. In those
433  * cases, the value returned by iso_htable_get() is undefined. If you don't
434  * want to allow duplicates, use iso_htable_put() instead;
435  *
436  * Both the key and data pointers will be stored internally, so you should
437  * free the objects they point to. Use iso_htable_remove() to delete an
438  * element from the table.
439  */
440 int iso_htable_add(IsoHTable *table, void *key, void *data);
441 
442 /**
443  * Like iso_htable_add(), but this doesn't allow dulpicates.
444  *
445  * @return
446  * 1 success, 0 if an item with the same key already exists, < 0 error
447  */
448 int iso_htable_put(IsoHTable *table, void *key, void *data);
449 
450 /**
451  * Retrieve an element from the given table.
452  *
453  * @param table
454  * Hash table
455  * @param key
456  * Key of the element that will be removed
457  * @param data
458  * Will be filled with the element found. Remains untouched if no
459  * element with the given key is found.
460  * @return
461  * 1 if found, 0 if not, < 0 on error
462  */
463 int iso_htable_get(IsoHTable *table, void *key, void **data);
464 
465 /**
466  * Remove an item with the given key from the table. In tables that allow
467  * duplicates, it is undefined the element that will be deleted.
468  *
469  * @param table
470  * Hash table
471  * @param key
472  * Key of the element that will be removed
473  * @param free_data
474  * Function that will be called passing as parameters both the key and
475  * the element that will be deleted. The user can use it to free the
476  * element. You can pass NULL if you don't want to delete the item itself.
477  * @return
478  * 1 success, 0 no element exists with the given key, < 0 error
479  */
480 int iso_htable_remove(IsoHTable *table, void *key, hfree_data_t free_data);
481 
482 /**
483  * Like remove, but instead of checking for key equality using the compare
484  * function, it just compare the key pointers. If the table allows duplicates,
485  * and you provide different keys (i.e. different pointers) to elements
486  * with same key (i.e. same content), this function ensure the exact element
487  * is removed.
488  *
489  * It has the problem that you must provide the same key pointer, and not just
490  * a key whose contents are equal. Moreover, if you use the same key (same
491  * pointer) to identify several objects, what of those are removed is
492  * undefined.
493  *
494  * @param table
495  * Hash table
496  * @param key
497  * Key of the element that will be removed
498  * @param free_data
499  * Function that will be called passing as parameters both the key and
500  * the element that will be deleted. The user can use it to free the
501  * element. You can pass NULL if you don't want to delete the item itself.
502  * @return
503  * 1 success, 0 no element exists with the given key, < 0 error
504  */
505 int iso_htable_remove_ptr(IsoHTable *table, void *key, hfree_data_t free_data);
506 
507 /**
508  * Destroy the given hash table.
509  *
510  * Note that you're responsible to actually destroy the elements by providing
511  * a valid free_data function. You can pass NULL if you only want to delete
512  * the hash structure.
513  */
515 
516 /**
517  * Hash function suitable for keys that are char strings.
518  */
519 unsigned int iso_str_hash(const void *key);
520 
521 /**
522  * Encode an integer as LEN,BYTES for being a component in certain AAIP
523  * attribute values.
524  */
525 int iso_util_encode_len_bytes(uint32_t data, char *buffer, int data_len,
526  int *result_len, int flag);
527 
528 /**
529  * Decode an integer as LEN,BYTES for being a component in certain AAIP
530  * attribute values.
531  * @param data returns the decoded value
532  * @param buffer contains the encoded value
533  * @param data_len returns the number of value bytes (without len byte)
534  * @param buffer_len tells the number of valid buffer bytes
535  */
536 int iso_util_decode_len_bytes(uint32_t *data, char *buffer, int *data_len,
537  int buffer_len, int flag);
538 
539 
540 /* Evaluate a data block whether it is a libisofs session checksum tag of
541  desired type and eventually use it to verify the MD5 checksum computed
542  so far.
543  @param block The data block to be evaluated
544  @param desired Bit map which tells what tag types are expected
545  (0 to 30)
546  @param lba The address from where block was read
547  @param ctx The checksum context computed so far
548  @param ctx_start_lba The block address where checksum computing started
549  @param tag_type Returns the tag type (0 means invalid tag type)
550  @param flag Bitfield for control purposes, unused yet, submit 0
551  @return 1= tag is desired and matches
552  0= not a recognizable tag or a undesired tag
553  <0 is error or mismatch
554 */
555 int iso_util_eval_md5_tag(char *block, int desired, uint32_t lba,
556  void *ctx, uint32_t ctx_start_lba,
557  int *tag_type, uint32_t *next_tag, int flag);
558 
559 
560 int iso_util_tag_magic(int tag_type, char **tag_magic, int *len, int flag);
561 
562 
563 int iso_util_bin_to_hex(char *target, uint8_t *bytes, int num_bytes, int flag);
564 
565 int iso_util_hex_to_bin(char *hex, char *bin, int bin_size, int *bin_count,
566  int flag);
567 
568 int iso_truncate_rr_name(int truncate_mode, int truncate_length,
569  char *name, int flag);
570 
571 /* ------------------------------------------------------------------------- */
572 
573 /* In md5.h these function prototypes would be neighbors of (Ecma119Image *)
574  which needs inclusion of ecma119.h and more. So, being generic, they ended
575  up here.
576 */
577 
578 /* Function to identify and manage md5sum indice of the old image.
579  * data is supposed to be a 4 byte integer, bit 31 shall be 0,
580  * value 0 of this integer means that it is not a valid index.
581  */
582 int checksum_cx_xinfo_func(void *data, int flag);
583 
584 /* The iso_node_xinfo_cloner function which gets associated to
585  * checksum_cx_xinfo_func by iso_init() resp. iso_init_with_flag() via
586  * iso_node_xinfo_make_clonable()
587  */
588 int checksum_cx_xinfo_cloner(void *old_data, void **new_data, int flag);
589 
590 
591 /* Function to identify and manage md5 sums of unspecified providence stored
592  * directly in this xinfo. This is supposed to override any other recorded
593  * MD5 of the node unless data get copied and checksummed during that copying.
594  */
595 int checksum_md5_xinfo_func(void *data, int flag);
596 
597 /* The iso_node_xinfo_cloner function which gets associated to
598  * checksum_md5_xinfo_func by iso_init() resp. iso_init_with_flag() via
599  * iso_node_xinfo_make_clonable()
600  */
601 int checksum_md5_xinfo_cloner(void *old_data, void **new_data, int flag);
602 
603 /* The iso_node_xinfo_cloner function which gets associated to
604  * iso_hfsplus_xinfo_func by iso_init() resp. iso_init_with_flag() via
605  * iso_node_xinfo_make_clonable()
606  */
607 int iso_hfsplus_xinfo_cloner(void *old_data, void **new_data, int flag);
608 
609 
610 /* ------------------------------------------------------------------------- */
611 
612 
613 void *iso_alloc_mem(size_t size, size_t count, int flag);
614 
615 #define LIBISO_ALLOC_MEM(pt, typ, count) { \
616  pt= (typ *) iso_alloc_mem(sizeof(typ), (size_t) (count), 0); \
617  if(pt == NULL) { \
618  ret= ISO_OUT_OF_MEM; goto ex; \
619  } }
620 
621 #define LIBISO_ALLOC_MEM_VOID(pt, typ, count) { \
622  pt= (typ *) iso_alloc_mem(sizeof(typ), (size_t) (count), 0); \
623  if(pt == NULL) { \
624  goto ex; \
625  } }
626 
627 #define LIBISO_FREE_MEM(pt) { \
628  if(pt != NULL) \
629  free((char *) pt); \
630  }
631 
632 
633 /*
634  @param in Valid memory or NULL
635  @param out Returns valid memory or NULL
636  @param size Number of bytes to copy. 0 means strlen(in)+1 if not NULL.
637  @return 1 or ISO_OUT_OF_MEM
638 */
639 int iso_clone_mem(char *in, char **out, size_t size);
640 
641 /* Like iso_clone_mem but first freeing *out if not NULL
642 */
643 int iso_clone_mgtd_mem(char *in, char **out, size_t size);
644 
645 /** Convert a text into a number of type double and multiply it by unit code
646  [kmgt] (2^10 to 2^40) or [s] (2048) or [d] (512).
647  (Also accepts capital letters.)
648  @param text Input like "42", "223062s", "3m" or "-1g"
649  @param flag Bitfield for control purposes:
650  bit0= return -1 rather than 0 on failure
651  bit1= if scaled then compute the last byte of the last unit
652  @return The derived value
653 */
654 off_t iso_scanf_io_size(char *text, int flag);
655 
656 /* ------------------------------------------------------------------------- */
657 
658 
659 /* To avoid the need to include more system header files */
660 uint16_t iso_ntohs(uint16_t v);
661 uint16_t iso_htons(uint16_t v);
662 
663 
664 #endif /*LIBISO_UTIL_H_*/
int iso_util_tag_magic(int tag_type, char **tag_magic, int *len, int flag)
Definition: util.c:2130
int iso_util_bin_to_hex(char *target, uint8_t *bytes, int num_bytes, int flag)
Definition: util.c:2096
uint32_t iso_read_msb(const uint8_t *buf, int bytes)
Definition: util.c:1531
size_t iso_rbtree_count_array(IsoRBTree *tree, size_t initial_count, int(*include_item)(void *))
Definition: util_rbtree.c:337
char * iso_r_dirid(const char *src, int size, int relaxed)
Definition: util.c:1026
int iso_htable_remove_ptr(IsoHTable *table, void *key, hfree_data_t free_data)
Definition: util_htable.c:236
int iso_util_eval_md5_tag(char *block, int desired, uint32_t lba, void *ctx, uint32_t ctx_start_lba, int *tag_type, uint32_t *next_tag, int flag)
Definition: util.c:2235
char * iso_1_dirid(const char *src, int relaxed)
Definition: util.c:882
int str2ucs(const char *icharset, const char *input, uint16_t **output)
Definition: util.c:558
int iso_lsb_to_buf(char **wpt, uint32_t value, int bytes, int flag)
Definition: util.c:1510
int strnconvl(const char *str, const char *icharset, const char *ocharset, size_t len, char **output, size_t *out_len)
Definition: util.c:244
int checksum_md5_xinfo_cloner(void *old_data, void **new_data, int flag)
Definition: md5.c:459
int iso_util_decode_len_bytes(uint32_t *data, char *buffer, int *data_len, int buffer_len, int flag)
Definition: util.c:2069
int str2d_char(const char *icharset, const char *input, char **output)
Definition: util.c:1410
void iso_datetime_17(uint8_t *buf, time_t t, int always_gmt)
int iso_htable_add(IsoHTable *table, void *key, void *data)
Definition: util_htable.c:70
int iso_clone_mgtd_mem(char *in, char **out, size_t size)
Definition: util.c:2352
int(* compare_function_t)(const void *a, const void *b)
Definition: util.h:343
int checksum_cx_xinfo_func(void *data, int flag)
Definition: md5.c:421
uint16_t * iso_j_dir_id(const uint16_t *src, int flag)
Definition: util.c:1298
int iso_util_hex_to_bin(char *hex, char *bin, int bin_size, int *bin_count, int flag)
Definition: util.c:2107
int iso_htable_create(size_t size, hash_funtion_t hash, compare_function_t compare, IsoHTable **table)
Definition: util_htable.c:321
int iso_htable_remove(IsoHTable *table, void *key, hfree_data_t free_data)
Definition: util_htable.c:182
void iso_bb(uint8_t *buf, uint32_t num, int bytes)
Definition: util.c:1502
size_t iso_rbtree_get_size(IsoRBTree *tree)
Definition: util_rbtree.c:250
char * iso_2_fileid(const char *src)
Definition: util.c:960
int iso_htable_put(IsoHTable *table, void *key, void *data)
Definition: util_htable.c:100
int checksum_cx_xinfo_cloner(void *old_data, void **new_data, int flag)
Definition: md5.c:431
int checksum_md5_xinfo_func(void *data, int flag)
Definition: md5.c:447
uint64_t iso_read_msb64(const uint8_t *buf)
Definition: util.c:1564
char * iso_r_fileid(const char *src, size_t len, int relaxed, int forcedot)
Definition: util.c:1090
void iso_msb(uint8_t *buf, uint32_t num, int bytes)
Definition: util.c:1494
int iso_util_encode_len_bytes(uint32_t data, char *buffer, int data_len, int *result_len, int flag)
Definition: util.c:2045
int ucscmp(const uint16_t *s1, const uint16_t *s2)
Definition: util.c:1371
char * iso_1_fileid(const char *src, int relaxed, int force_dots)
Definition: util.c:892
void(* hfree_data_t)(void *key, void *data)
Definition: util.h:344
char * iso_util_strcopy(const char *buf, size_t len)
Definition: util.c:1912
unsigned int(* hash_funtion_t)(const void *key)
Definition: util.h:342
void iso_rbtree_destroy(IsoRBTree *tree, void(*free_data)(void *))
Definition: util_rbtree.c:84
int str2utf16be(const char *icharset, const char *input, uint16_t **output)
Definition: util.c:687
void iso_datetime_7(uint8_t *buf, time_t t, int always_gmt)
char * iso_2_dirid(const char *src)
Definition: util.c:887
int iso_rbtree_new(int(*compare)(const void *, const void *), IsoRBTree **tree)
Definition: util_rbtree.c:50
uint16_t * ucsdup(const uint16_t *str)
Definition: util.c:1352
int str2ascii(const char *icharset, const char *input, char **output)
Definition: util.c:392
uint16_t * ucscpy(uint16_t *dest, const uint16_t *src)
Definition: util.c:1394
uint16_t iso_htons(uint16_t v)
Definition: util.c:2313
int iso_eaccess(const char *path)
Definition: util.c:1866
void iso_handle_split_utf16(uint16_t *utf_word)
Definition: util.c:2326
uint32_t iso_read_lsb(const uint8_t *buf, int bytes)
Definition: util.c:1520
off_t iso_scanf_io_size(char *text, int flag)
Definition: util.c:2369
void * iso_alloc_mem(size_t size, size_t count, int flag)
Definition: util.c:2297
void strncpy_pad(char *dest, const char *src, size_t max)
Definition: util.c:1947
int int_pow(int base, int power)
Definition: util.c:159
uint64_t iso_read_lsb64(const uint8_t *buf)
Definition: util.c:1554
char * iso_util_strcopy_untail(const char *buf, size_t len)
Definition: util.c:1925
uint16_t * ucsrchr(const uint16_t *str, char c)
Definition: util.c:1340
int iso_truncate_rr_name(int truncate_mode, int truncate_length, char *name, int flag)
Definition: util.c:2425
void iso_htable_destroy(IsoHTable *table, hfree_data_t free_data)
Definition: util_htable.c:290
time_t iso_datetime_read_17(const uint8_t *buf)
Definition: util.c:1841
size_t ucslen(const uint16_t *str)
Definition: util.c:1331
time_t iso_datetime_read_7(const uint8_t *buf)
Definition: util.c:1826
uint16_t * iso_j_file_id(const uint16_t *src, int flag)
Definition: util.c:1215
int iso_clone_mem(char *in, char **out, size_t size)
Definition: util.c:2336
void iso_lsb64(uint8_t *buf, uint64_t num)
Definition: util.c:1486
char * ucs2str(const char *buf, size_t len)
Definition: util.c:1963
unsigned int iso_str_hash(const void *key)
Definition: util_htable.c:270
void iso_lsb(uint8_t *buf, uint32_t num, int bytes)
Definition: util.c:1478
int iso_hfsplus_xinfo_cloner(void *old_data, void **new_data, int flag)
Definition: hfsplus.c:1864
int str2a_char(const char *icharset, const char *input, char **output)
Definition: util.c:1444
uint16_t * ucsncpy(uint16_t *dest, const uint16_t *src, size_t n)
Definition: util.c:1401
int iso_rbtree_insert(IsoRBTree *tree, void *data, void **item)
Definition: util_rbtree.c:149
uint32_t iso_read_bb(const uint8_t *buf, int bytes, int *error)
Definition: util.c:1542
int iso_htable_get(IsoHTable *table, void *key, void **data)
Definition: util_htable.c:144
uint16_t iso_ntohs(uint16_t v)
Definition: util.c:2308
int strconv(const char *input, const char *icharset, const char *ocharset, char **output)
Definition: util.c:192
void ** iso_rbtree_to_array(IsoRBTree *tree, int(*include_item)(void *), size_t *size)
Definition: util_rbtree.c:284
int strnconv(const char *str, const char *icharset, const char *ocharset, size_t len, char **output)
Definition: util.c:295
int iso_init_locale(int flag)
Definition: util.c:2038
struct iso_hnode ** table
Definition: util_htable.c:36
compare_function_t compare
Definition: util_htable.c:42
size_t size
Definition: util_htable.c:38
hash_funtion_t hash
Definition: util_htable.c:41