version 1.1, 2016/07/19 21:31:55 |
version 1.4, 2016/08/05 21:38:11 |
|
|
* The interface is defined in "dba.h". |
* The interface is defined in "dba.h". |
*/ |
*/ |
#include <sys/types.h> |
#include <sys/types.h> |
|
#include <endian.h> |
#include <errno.h> |
#include <errno.h> |
#include <stdint.h> |
#include <stdint.h> |
#include <stdlib.h> |
#include <stdlib.h> |
|
|
static void *prepend(const char *, char); |
static void *prepend(const char *, char); |
static void dba_pages_write(struct dba_array *); |
static void dba_pages_write(struct dba_array *); |
static int compare_names(const void *, const void *); |
static int compare_names(const void *, const void *); |
|
static int compare_strings(const void *, const void *); |
static void dba_macros_write(struct dba_array *); |
static void dba_macros_write(struct dba_array *); |
static void dba_macro_write(struct dba_array *); |
static void dba_macro_write(struct dba_array *); |
|
|
Line 175 dba_page_add(struct dba_array *page, int32_t ie, const |
|
Line 177 dba_page_add(struct dba_array *page, int32_t ie, const |
|
} |
} |
if (*str == '\0') |
if (*str == '\0') |
return; |
return; |
dba_array_FOREACH(entries, entry) |
dba_array_FOREACH(entries, entry) { |
|
if (ie == DBP_FILE && *entry < ' ') |
|
entry++; |
if (strcmp(entry, str) == 0) |
if (strcmp(entry, str) == 0) |
return; |
return; |
|
} |
dba_array_add(entries, (void *)str); |
dba_array_add(entries, (void *)str); |
} |
} |
|
|
Line 240 prepend(const char *instr, char inbyte) |
|
Line 245 prepend(const char *instr, char inbyte) |
|
static void |
static void |
dba_pages_write(struct dba_array *pages) |
dba_pages_write(struct dba_array *pages) |
{ |
{ |
struct dba_array *page, *names; |
struct dba_array *page, *entry; |
void *entry; |
|
int32_t pos_pages, pos_end; |
int32_t pos_pages, pos_end; |
|
|
pos_pages = dba_array_writelen(pages, 5); |
pos_pages = dba_array_writelen(pages, 5); |
dba_array_FOREACH(pages, page) { |
dba_array_FOREACH(pages, page) { |
dba_array_setpos(page, DBP_NAME, dba_tell()); |
dba_array_setpos(page, DBP_NAME, dba_tell()); |
names = dba_array_get(page, DBP_NAME); |
entry = dba_array_get(page, DBP_NAME); |
dba_array_sort(names, compare_names); |
dba_array_sort(entry, compare_names); |
dba_array_writelst(names); |
dba_array_writelst(entry); |
} |
} |
dba_array_FOREACH(pages, page) { |
dba_array_FOREACH(pages, page) { |
dba_array_setpos(page, DBP_SECT, dba_tell()); |
dba_array_setpos(page, DBP_SECT, dba_tell()); |
dba_array_writelst(dba_array_get(page, DBP_SECT)); |
entry = dba_array_get(page, DBP_SECT); |
|
dba_array_sort(entry, compare_strings); |
|
dba_array_writelst(entry); |
} |
} |
dba_array_FOREACH(pages, page) { |
dba_array_FOREACH(pages, page) { |
if ((entry = dba_array_get(page, DBP_ARCH)) != NULL) { |
if ((entry = dba_array_get(page, DBP_ARCH)) != NULL) { |
dba_array_setpos(page, DBP_ARCH, dba_tell()); |
dba_array_setpos(page, DBP_ARCH, dba_tell()); |
|
dba_array_sort(entry, compare_strings); |
dba_array_writelst(entry); |
dba_array_writelst(entry); |
} else |
} else |
dba_array_setpos(page, DBP_ARCH, 0); |
dba_array_setpos(page, DBP_ARCH, 0); |
Line 289 compare_names(const void *vp1, const void *vp2) |
|
Line 296 compare_names(const void *vp1, const void *vp2) |
|
strcasecmp(cp1 + 1, cp2 + 1); |
strcasecmp(cp1 + 1, cp2 + 1); |
} |
} |
|
|
|
static int |
|
compare_strings(const void *vp1, const void *vp2) |
|
{ |
|
const char *cp1, *cp2; |
|
|
|
cp1 = *(char **)vp1; |
|
cp2 = *(char **)vp2; |
|
return strcmp(cp1, cp2); |
|
} |
|
|
/*** functions for handling macros ************************************/ |
/*** functions for handling macros ************************************/ |
|
|