/*----------------------------------------------------------------------------*/ static long qfits_time_now(void) { struct timeval time_struct; gettimeofday (&time_struct, 0); return (timer_to_time (time_struct.tv_sec) + time_struct.tv_usec / 10000); }
SYMTAB * ini_dyn_load ( SYMTAB *load_symtab, const char *filename) { FILE *inifile; SYMTAB *symtab, /* Symbol table to populate */ *envtab; /* Environment, as symbol table */ char *section = NULL, /* Filled as we scan through */ *keyword = NULL, /* the ini file */ *value = NULL, *fromptr, *toptr, *section_end; /* Null byte at end of section */ ASSERT (filename); inifile = file_locate ("PATH", filename, NULL); if (load_symtab) /* Use specified symbol table */ symtab = load_symtab; /* or create a new one */ else { symtab = sym_create_table (); if (symtab == NULL) return (NULL); /* Quit if insufficient memory */ } /* Store control variables in symbol table */ if (inifile || load_symtab == NULL) { sym_assume_symbol (symtab, "filename", filename); snprintf (iniline, sizeof (iniline), "%ld", timer_to_date (get_file_time (filename))); sym_assume_symbol (symtab, "filedate", iniline); snprintf (iniline, sizeof (iniline), "%ld", timer_to_time (get_file_time (filename))); sym_assume_symbol (symtab, "filetime", iniline); } if (!inifile) return (symtab); /* File not found; empty table */ /* Now load the ini file, starting from the beginning */ envtab = env2symb (); fseek (inifile, 0, SEEK_SET); FOREVER { if (ini_scan_section (inifile, &keyword, &value)) { if (section) { section_end = strchr (section, '\0'); ASSERT (section_end); xstrcat (section, ":", keyword, NULL); value = tok_subst (value, envtab); /* Handle value in quotes */ if (*value == '"') { /* Unescape value if necessary */ if (strchr (value, '\\')) { toptr = value; for (fromptr = value; *fromptr; fromptr++) { if (*fromptr == '\\') { fromptr++; if (*fromptr == 'n') *toptr++ = '\n'; else *toptr++ = *fromptr; } else *toptr++ = *fromptr; } *toptr = '\0'; } strlast (value) = '\0'; sym_assume_symbol (symtab, section, value + 1); } else sym_assume_symbol (symtab, section, value); mem_strfree (&value); *section_end = '\0'; } } else if (keyword) /* Found new section */ { section = keyword; sym_assume_symbol (symtab, section, ""); } else break; } file_close (inifile); sym_delete_table (envtab); sym_sort_table (symtab, NULL); /* Sort table by symbol name */ return (symtab); }