--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Data Structures</h1>Here are the data structures with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="structcinfo.html">cinfo</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structfds.html">fds</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms.html">lms</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__audio__info.html">lms_audio_info</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__context.html">lms_context</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__db__cache.html">lms_db_cache</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__db__cache__entry.html">lms_db_cache_entry</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__file__info.html">lms_file_info</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__gps__info.html">lms_gps_info</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__image__info.html">lms_image_info</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__parser__info.html">lms_parser_info</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__playlist__info.html">lms_playlist_info</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__plugin.html">lms_plugin</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__plugin__info.html">lms_plugin_info</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__string__size.html">lms_string_size</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structlms__video__info.html">lms_video_info</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structparser.html">parser</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structpinfo.html">pinfo</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structsinfo.html">sinfo</a></td><td class="indexvalue"></td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Alphabetical List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Data Structure Index</h1><p><div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_P">P</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_V">V</a></div><p>
+<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td><a name="letter_A"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> A </div></td></tr></table>
+</td><td><a class="el" href="structlms__file__info.html">lms_file_info</a> </td><td><a class="el" href="structpinfo.html">pinfo</a> </td></tr><tr><td><a class="el" href="structlms__audio__info.html">lms_audio_info</a> </td><td><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> G </div></td></tr></table>
+</td><td><a class="el" href="structlms__playlist__info.html">lms_playlist_info</a> </td></tr><tr><td><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> C </div></td></tr></table>
+</td><td><a class="el" href="structlms__gps__info.html">lms_gps_info</a> </td><td><a class="el" href="structlms__plugin.html">lms_plugin</a> </td></tr><tr><td><a class="el" href="structcinfo.html">cinfo</a> </td><td><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> I </div></td></tr></table>
+</td><td><a class="el" href="structlms__plugin__info.html">lms_plugin_info</a> </td></tr><tr><td><a class="el" href="structlms__context.html">lms_context</a> </td><td><a class="el" href="structlms__image__info.html">lms_image_info</a> </td><td><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> S </div></td></tr></table>
+</td></tr><tr><td><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> D </div></td></tr></table>
+</td><td><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> L </div></td></tr></table>
+</td><td><a class="el" href="structsinfo.html">sinfo</a> </td></tr><tr><td><a class="el" href="structlms__db__cache.html">lms_db_cache</a> </td><td><a class="el" href="structlms.html">lms</a> </td><td><a class="el" href="structlms__string__size.html">lms_string_size</a> </td></tr><tr><td><a class="el" href="structlms__db__cache__entry.html">lms_db_cache_entry</a> </td><td><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> P </div></td></tr></table>
+</td><td><a name="letter_V"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> V </div></td></tr></table>
+</td></tr><tr><td><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> F </div></td></tr></table>
+</td><td><a class="el" href="structparser.html">parser</a> </td><td><a class="el" href="structlms__video__info.html">lms_video_info</a> </td></tr><tr><td><a class="el" href="structfds.html">fds</a> </td><td><a class="el" href="structlms__parser__info.html">lms_parser_info</a> </td></tr></table><p><div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_P">P</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_V">V</a></div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+body, table, div, p, dl {
+ font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
+ font-size: 12px;
+}
+
+/* @group Heading Levels */
+
+h1 {
+ text-align: center;
+ font-size: 150%;
+}
+
+h2 {
+ font-size: 120%;
+}
+
+h3 {
+ font-size: 100%;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+div.qindex, div.navtab{
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #153788;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #1b77c5;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code {
+}
+
+a.codeRef {
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+.fragment {
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+pre.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+
+td.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ border: 1px solid #CCCCCC;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+}
+
+td.indexvalue {
+ background-color: #e8eef2;
+ border: 1px solid #CCCCCC;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #f0f0f0;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+/* @end */
+
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+
+th.dirtab {
+ background: #e8eef2;
+ font-weight: bold;
+}
+
+hr {
+ height: 0;
+ border: none;
+ border-top: 1px solid #666;
+}
+
+/* @group Member Descriptions */
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #FAFAFA;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+ border-top: 1px solid #ccc;
+}
+
+.memTemplParams {
+ color: #606060;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #606060;
+ font-weight: normal;
+ margin-left: 3px;
+}
+
+.memnav {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.memitem {
+ padding: 0;
+}
+
+.memname {
+ white-space: nowrap;
+ font-weight: bold;
+}
+
+.memproto, .memdoc {
+ border: 1px solid #84b0c7;
+}
+
+.memproto {
+ padding: 0;
+ background-color: #d5e1e8;
+ font-weight: bold;
+ -webkit-border-top-left-radius: 8px;
+ -webkit-border-top-right-radius: 8px;
+ -moz-border-radius-topleft: 8px;
+ -moz-border-radius-topright: 8px;
+}
+
+.memdoc {
+ padding: 2px 5px;
+ background-color: #eef3f5;
+ border-top-width: 0;
+ -webkit-border-bottom-left-radius: 8px;
+ -webkit-border-bottom-right-radius: 8px;
+ -moz-border-radius-bottomleft: 8px;
+ -moz-border-radius-bottomright: 8px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+ font-family: sans-serif;
+ margin: 0.5em;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+ font-size: 9pt;
+ font-weight: bold;
+}
+
+.directory h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+/*
+The following two styles can be used to replace the root node title
+with an image of your choice. Simply uncomment the next two styles,
+specify the name of your image and be sure to set 'height' to the
+proper pixel height of your image.
+*/
+
+/*
+.directory h3.swap {
+ height: 61px;
+ background-repeat: no-repeat;
+ background-image: url("yourimage.gif");
+}
+.directory h3.swap span {
+ display: none;
+}
+*/
+
+.directory > h3 {
+ margin-top: 0;
+}
+
+.directory p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory div {
+ display: none;
+ margin: 0px;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+/* these are for tree view when not used as main index */
+
+.directory-alt {
+ font-size: 100%;
+ font-weight: bold;
+}
+
+.directory-alt h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+.directory-alt > h3 {
+ margin-top: 0;
+}
+
+.directory-alt p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory-alt div {
+ display: none;
+ margin: 0px;
+}
+
+.directory-alt img {
+ vertical-align: -30%;
+}
+
+/* @end */
+
+address {
+ font-style: normal;
+ color: #333;
+}
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: File Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>File List</h1>Here is a list of all files with brief descriptions:<table>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner_8c.html">lightmediascanner.c</a> <a href="lightmediascanner_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner_8h.html">lightmediascanner.h</a> <a href="lightmediascanner_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__charset__conv_8c.html">lightmediascanner_charset_conv.c</a> <a href="lightmediascanner__charset__conv_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__charset__conv_8h.html">lightmediascanner_charset_conv.h</a> <a href="lightmediascanner__charset__conv_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__check_8c.html">lightmediascanner_check.c</a> <a href="lightmediascanner__check_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a> <a href="lightmediascanner__db_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__db__audio_8c.html">lightmediascanner_db_audio.c</a> <a href="lightmediascanner__db__audio_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__db__common_8c.html">lightmediascanner_db_common.c</a> <a href="lightmediascanner__db__common_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__db__image_8c.html">lightmediascanner_db_image.c</a> <a href="lightmediascanner__db__image_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__db__playlist_8c.html">lightmediascanner_db_playlist.c</a> <a href="lightmediascanner__db__playlist_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a> <a href="lightmediascanner__db__private_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__db__video_8c.html">lightmediascanner_db_video.c</a> <a href="lightmediascanner__db__video_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__plugin_8h.html">lightmediascanner_plugin.h</a> <a href="lightmediascanner__plugin_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__private_8h.html">lightmediascanner_private.h</a> <a href="lightmediascanner__private_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__process_8c.html">lightmediascanner_process.c</a> <a href="lightmediascanner__process_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__utils_8c.html">lightmediascanner_utils.c</a> <a href="lightmediascanner__utils_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">src/lib/<a class="el" href="lightmediascanner__utils_8h.html">lightmediascanner_utils.h</a> <a href="lightmediascanner__utils_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_g"><span>g</span></a></li>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ <li><a href="#index_v"><span>v</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all struct and union fields with links to the structures/unions they belong to:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>album
+: <a class="el" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">lms_audio_info</a>
+<li>altitude
+: <a class="el" href="structlms__gps__info.html#9b56b5dbae3e5c5722f7331c2bcbd520">lms_gps_info</a>
+<li>artist
+: <a class="el" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">lms_audio_info</a>
+, <a class="el" href="structlms__video__info.html#c0bfe0cf4fe29e3c24a6df4248c7640e">lms_video_info</a>
+, <a class="el" href="structlms__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">lms_image_info</a>
+<li>authors
+: <a class="el" href="structlms__plugin__info.html#5dd799fc0e3dd7e798f053ecf773e59a">lms_plugin_info</a>
+, <a class="el" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">lms_parser_info</a>
+</ul>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>base
+: <a class="el" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">lms_file_info</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>categories
+: <a class="el" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">lms_parser_info</a>
+, <a class="el" href="structlms__plugin__info.html#d5fd907e4bcc553eb9474aa132435c9c">lms_plugin_info</a>
+<li>cb
+: <a class="el" href="structlms.html#94615d22fba40d580a8a0055d28221c4">lms</a>
+<li>child
+: <a class="el" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">pinfo</a>
+<li>close
+: <a class="el" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">lms_plugin</a>
+<li>commit_counter
+: <a class="el" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">sinfo</a>
+<li>commit_interval
+: <a class="el" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">lms</a>
+<li>common
+: <a class="el" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">sinfo</a>
+, <a class="el" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">pinfo</a>
+<li>cs_conv
+: <a class="el" href="structlms__context.html#a5ce50393bbe62f6357934a1d9ce5a61">lms_context</a>
+, <a class="el" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">lms</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>data
+: <a class="el" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">lms_db_cache_entry</a>
+, <a class="el" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">lms</a>
+<li>date
+: <a class="el" href="structlms__image__info.html#150973d3ac9f60f1b74f0a0d08c7f288">lms_image_info</a>
+<li>db
+: <a class="el" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">lms_db_cache_entry</a>
+, <a class="el" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">lms_context</a>
+, <a class="el" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">sinfo</a>
+<li>db_path
+: <a class="el" href="structlms.html#02e767169813808f193c23733ba89b4b">lms</a>
+<li>description
+: <a class="el" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">lms_plugin_info</a>
+, <a class="el" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">lms_parser_info</a>
+<li>dl_handle
+: <a class="el" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">parser</a>
+<li>dtime
+: <a class="el" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">lms_file_info</a>
+</ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>entries
+: <a class="el" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">lms_db_cache</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>finish
+: <a class="el" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">lms_plugin</a>
+<li>free_data
+: <a class="el" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">lms</a>
+</ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>genre
+: <a class="el" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">lms_audio_info</a>
+<li>gps
+: <a class="el" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">lms_image_info</a>
+</ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>height
+: <a class="el" href="structlms__image__info.html#f2ae81781dadf7ecaa307b3bc91e710e">lms_image_info</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>id
+: <a class="el" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">lms_image_info</a>
+, <a class="el" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">lms_audio_info</a>
+, <a class="el" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">lms_file_info</a>
+, <a class="el" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">lms_playlist_info</a>
+, <a class="el" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">lms_video_info</a>
+<li>is_processing
+: <a class="el" href="structlms.html#bb03533445b77299e964b2ec02bca039">lms</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>latitude
+: <a class="el" href="structlms__gps__info.html#70f152098accf3d46f18bc159e3b4359">lms_gps_info</a>
+<li>len
+: <a class="el" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">lms_string_size</a>
+<li>lms
+: <a class="el" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">cinfo</a>
+<li>longitude
+: <a class="el" href="structlms__gps__info.html#109202a83eb79b9a10df135600260e1b">lms_gps_info</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>master
+: <a class="el" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">pinfo</a>
+<li>match
+: <a class="el" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">lms_plugin</a>
+<li>mtime
+: <a class="el" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">lms_file_info</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>n_entries
+: <a class="el" href="structlms__playlist__info.html#81cc52f5b6ce04cd64cf3884cb774663">lms_playlist_info</a>
+<li>n_parsers
+: <a class="el" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">lms</a>
+<li>name
+: <a class="el" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">lms_plugin</a>
+, <a class="el" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">lms_parser_info</a>
+, <a class="el" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">lms_plugin_info</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>orientation
+: <a class="el" href="structlms__image__info.html#434330468b69d0f14b344c672d4778af">lms_image_info</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>parse
+: <a class="el" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">lms_plugin</a>
+<li>parser_match
+: <a class="el" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">sinfo</a>
+<li>parsers
+: <a class="el" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">lms</a>
+<li>path
+: <a class="el" href="structlms__parser__info.html#5ab9ec0ea57b30e14d5f6f671aac6590">lms_parser_info</a>
+, <a class="el" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">lms_file_info</a>
+<li>path_len
+: <a class="el" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">lms_file_info</a>
+<li>playcnt
+: <a class="el" href="structlms__audio__info.html#7197e471d313274c4e361b2ff9e60e8a">lms_audio_info</a>
+<li>plugin
+: <a class="el" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">parser</a>
+<li>poll
+: <a class="el" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">pinfo</a>
+<li>progress
+: <a class="el" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">lms</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>r
+: <a class="el" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">fds</a>
+<li>rating
+: <a class="el" href="structlms__audio__info.html#932e73ccd8ff946831930be65d1ba2d2">lms_audio_info</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>setup
+: <a class="el" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">lms_plugin</a>
+<li>size
+: <a class="el" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">lms_db_cache</a>
+, <a class="el" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">lms_file_info</a>
+<li>slave
+: <a class="el" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">pinfo</a>
+<li>slave_timeout
+: <a class="el" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">lms</a>
+<li>so_path
+: <a class="el" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">parser</a>
+<li>start
+: <a class="el" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">lms_plugin</a>
+<li>stop_processing
+: <a class="el" href="structlms.html#d028e3681568215f6facd7d477c74461">lms</a>
+<li>str
+: <a class="el" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">lms_string_size</a>
+</ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>title
+: <a class="el" href="structlms__image__info.html#6242d231ae1972fb25bdaeed614d7a63">lms_image_info</a>
+, <a class="el" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">lms_audio_info</a>
+, <a class="el" href="structlms__playlist__info.html#515e63ba413a60d21ee73687151387f0">lms_playlist_info</a>
+, <a class="el" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">lms_video_info</a>
+<li>trackno
+: <a class="el" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">lms_audio_info</a>
+</ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>uri
+: <a class="el" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">lms_parser_info</a>
+, <a class="el" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">lms_plugin_info</a>
+</ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>version
+: <a class="el" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">lms_parser_info</a>
+, <a class="el" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">lms_plugin_info</a>
+</ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>w
+: <a class="el" href="structfds.html#d13e19697072e306771103286a8316d0">fds</a>
+<li>width
+: <a class="el" href="structlms__image__info.html#fbd2df9f6f5f290ac02ce4d803677249">lms_image_info</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_g"><span>g</span></a></li>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ <li><a href="#index_v"><span>v</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>album
+: <a class="el" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">lms_audio_info</a>
+<li>altitude
+: <a class="el" href="structlms__gps__info.html#9b56b5dbae3e5c5722f7331c2bcbd520">lms_gps_info</a>
+<li>artist
+: <a class="el" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">lms_audio_info</a>
+, <a class="el" href="structlms__video__info.html#c0bfe0cf4fe29e3c24a6df4248c7640e">lms_video_info</a>
+, <a class="el" href="structlms__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">lms_image_info</a>
+<li>authors
+: <a class="el" href="structlms__plugin__info.html#5dd799fc0e3dd7e798f053ecf773e59a">lms_plugin_info</a>
+, <a class="el" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">lms_parser_info</a>
+</ul>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>base
+: <a class="el" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">lms_file_info</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>categories
+: <a class="el" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">lms_parser_info</a>
+, <a class="el" href="structlms__plugin__info.html#d5fd907e4bcc553eb9474aa132435c9c">lms_plugin_info</a>
+<li>cb
+: <a class="el" href="structlms.html#94615d22fba40d580a8a0055d28221c4">lms</a>
+<li>child
+: <a class="el" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">pinfo</a>
+<li>close
+: <a class="el" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">lms_plugin</a>
+<li>commit_counter
+: <a class="el" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">sinfo</a>
+<li>commit_interval
+: <a class="el" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">lms</a>
+<li>common
+: <a class="el" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">sinfo</a>
+, <a class="el" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">pinfo</a>
+<li>cs_conv
+: <a class="el" href="structlms__context.html#a5ce50393bbe62f6357934a1d9ce5a61">lms_context</a>
+, <a class="el" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">lms</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>data
+: <a class="el" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">lms_db_cache_entry</a>
+, <a class="el" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">lms</a>
+<li>date
+: <a class="el" href="structlms__image__info.html#150973d3ac9f60f1b74f0a0d08c7f288">lms_image_info</a>
+<li>db
+: <a class="el" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">lms_db_cache_entry</a>
+, <a class="el" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">lms_context</a>
+, <a class="el" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">sinfo</a>
+<li>db_path
+: <a class="el" href="structlms.html#02e767169813808f193c23733ba89b4b">lms</a>
+<li>description
+: <a class="el" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">lms_plugin_info</a>
+, <a class="el" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">lms_parser_info</a>
+<li>dl_handle
+: <a class="el" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">parser</a>
+<li>dtime
+: <a class="el" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">lms_file_info</a>
+</ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>entries
+: <a class="el" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">lms_db_cache</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>finish
+: <a class="el" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">lms_plugin</a>
+<li>free_data
+: <a class="el" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">lms</a>
+</ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>genre
+: <a class="el" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">lms_audio_info</a>
+<li>gps
+: <a class="el" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">lms_image_info</a>
+</ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>height
+: <a class="el" href="structlms__image__info.html#f2ae81781dadf7ecaa307b3bc91e710e">lms_image_info</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>id
+: <a class="el" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">lms_image_info</a>
+, <a class="el" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">lms_audio_info</a>
+, <a class="el" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">lms_file_info</a>
+, <a class="el" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">lms_playlist_info</a>
+, <a class="el" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">lms_video_info</a>
+<li>is_processing
+: <a class="el" href="structlms.html#bb03533445b77299e964b2ec02bca039">lms</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>latitude
+: <a class="el" href="structlms__gps__info.html#70f152098accf3d46f18bc159e3b4359">lms_gps_info</a>
+<li>len
+: <a class="el" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">lms_string_size</a>
+<li>lms
+: <a class="el" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">cinfo</a>
+<li>longitude
+: <a class="el" href="structlms__gps__info.html#109202a83eb79b9a10df135600260e1b">lms_gps_info</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>master
+: <a class="el" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">pinfo</a>
+<li>match
+: <a class="el" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">lms_plugin</a>
+<li>mtime
+: <a class="el" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">lms_file_info</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>n_entries
+: <a class="el" href="structlms__playlist__info.html#81cc52f5b6ce04cd64cf3884cb774663">lms_playlist_info</a>
+<li>n_parsers
+: <a class="el" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">lms</a>
+<li>name
+: <a class="el" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">lms_plugin</a>
+, <a class="el" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">lms_parser_info</a>
+, <a class="el" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">lms_plugin_info</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>orientation
+: <a class="el" href="structlms__image__info.html#434330468b69d0f14b344c672d4778af">lms_image_info</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>parse
+: <a class="el" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">lms_plugin</a>
+<li>parser_match
+: <a class="el" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">sinfo</a>
+<li>parsers
+: <a class="el" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">lms</a>
+<li>path
+: <a class="el" href="structlms__parser__info.html#5ab9ec0ea57b30e14d5f6f671aac6590">lms_parser_info</a>
+, <a class="el" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">lms_file_info</a>
+<li>path_len
+: <a class="el" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">lms_file_info</a>
+<li>playcnt
+: <a class="el" href="structlms__audio__info.html#7197e471d313274c4e361b2ff9e60e8a">lms_audio_info</a>
+<li>plugin
+: <a class="el" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">parser</a>
+<li>poll
+: <a class="el" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">pinfo</a>
+<li>progress
+: <a class="el" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">lms</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>r
+: <a class="el" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">fds</a>
+<li>rating
+: <a class="el" href="structlms__audio__info.html#932e73ccd8ff946831930be65d1ba2d2">lms_audio_info</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>setup
+: <a class="el" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">lms_plugin</a>
+<li>size
+: <a class="el" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">lms_db_cache</a>
+, <a class="el" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">lms_file_info</a>
+<li>slave
+: <a class="el" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">pinfo</a>
+<li>slave_timeout
+: <a class="el" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">lms</a>
+<li>so_path
+: <a class="el" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">parser</a>
+<li>start
+: <a class="el" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">lms_plugin</a>
+<li>stop_processing
+: <a class="el" href="structlms.html#d028e3681568215f6facd7d477c74461">lms</a>
+<li>str
+: <a class="el" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">lms_string_size</a>
+</ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>title
+: <a class="el" href="structlms__image__info.html#6242d231ae1972fb25bdaeed614d7a63">lms_image_info</a>
+, <a class="el" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">lms_audio_info</a>
+, <a class="el" href="structlms__playlist__info.html#515e63ba413a60d21ee73687151387f0">lms_playlist_info</a>
+, <a class="el" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">lms_video_info</a>
+<li>trackno
+: <a class="el" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">lms_audio_info</a>
+</ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>uri
+: <a class="el" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">lms_parser_info</a>
+, <a class="el" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">lms_plugin_info</a>
+</ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>version
+: <a class="el" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">lms_parser_info</a>
+, <a class="el" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">lms_plugin_info</a>
+</ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>w
+: <a class="el" href="structfds.html#d13e19697072e306771103286a8316d0">fds</a>
+<li>width
+: <a class="el" href="structlms__image__info.html#fbd2df9f6f5f290ac02ce4d803677249">lms_image_info</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
+<li>_DB_T_UPDATE
+: <a class="el" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">lightmediascanner_db_audio.c</a>
+<li>_GNU_SOURCE
+: <a class="el" href="lightmediascanner__check_8c.html#369266c24eacffb87046522897a570d5">lightmediascanner_check.c</a>
+, <a class="el" href="lightmediascanner__process_8c.html#369266c24eacffb87046522897a570d5">lightmediascanner_process.c</a>
+<li>_LIGHTMEDIASCANNER_CHARSET_CONV_H_
+: <a class="el" href="lightmediascanner__charset__conv_8h.html#79f872f99949ecde4c1661e4b78b4c2b">lightmediascanner_charset_conv.h</a>
+<li>_LIGHTMEDIASCANNER_DB_H_
+: <a class="el" href="lightmediascanner__db_8h.html#5360af19a6df2e8b0d326344bb27e151">lightmediascanner_db.h</a>
+<li>_LIGHTMEDIASCANNER_DB_PRIVATE_H_
+: <a class="el" href="lightmediascanner__db__private_8h.html#97d5ed207ef5b72f4fba0cab38594bb7">lightmediascanner_db_private.h</a>
+<li>_LIGHTMEDIASCANNER_H_
+: <a class="el" href="lightmediascanner_8h.html#e97a674be7c85b0914a6acbafe994998">lightmediascanner.h</a>
+<li>_LIGHTMEDIASCANNER_PLUGIN_H_
+: <a class="el" href="lightmediascanner__plugin_8h.html#25abdf2375defcfc83bf95ef930fc739">lightmediascanner_plugin.h</a>
+<li>_LIGHTMEDIASCANNER_PRIVATE_H_
+: <a class="el" href="lightmediascanner__private_8h.html#c9783e2105f145aa71f541e0825707ed">lightmediascanner_private.h</a>
+<li>_LIGHTMEDIASCANNER_UTILS_H_
+: <a class="el" href="lightmediascanner__utils_8h.html#8ad3460b8bb014878af2cdfd42fcf5c6">lightmediascanner_utils.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li class="current"><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>API
+: <a class="el" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#d8ce4efaa307683d3d763b37b4711c53">lightmediascanner_utils.h</a>
+, <a class="el" href="lightmediascanner__db_8h.html#d8ce4efaa307683d3d763b37b4711c53">lightmediascanner_db.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8h.html#d8ce4efaa307683d3d763b37b4711c53">lightmediascanner_charset_conv.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li class="current"><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>check_row_callback_t
+: <a class="el" href="lightmediascanner__private_8h.html#818aa1ae6bb03151823bbd9b56bd0801">lightmediascanner_private.h</a>
+<li>COMM_FINFO_FLAG_OUTDATED
+: <a class="el" href="lightmediascanner__check_8c.html#f8084f435d209d810eb33deaa35fab5e">lightmediascanner_check.c</a>
+<li>lms_charset_add()
+: <a class="el" href="lightmediascanner_8h.html#03afcd1e04665bdaebe73d9f6cc20553">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g4fd56e209d415b27466274726cc7d59f">lightmediascanner.c</a>
+<li>lms_charset_conv()
+: <a class="el" href="group__LMS__CHARSET.html#gd843f59abac208048f13437534d589fc">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lightmediascanner_charset_conv.c</a>
+<li>lms_charset_conv_add()
+: <a class="el" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#gfc1aad4c212b5fa1ce7280d2b7df3ef7">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_check()
+: <a class="el" href="group__LMS__CHARSET.html#gbc8903e67c3c7eefa902cbb2bd5e3338">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8c.html#f069b89e828896690fdd919e5b042c7d">lightmediascanner_charset_conv.c</a>
+<li>lms_charset_conv_del()
+: <a class="el" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#gc364c502a4a4a64ea9f092a61074a90a">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_force()
+: <a class="el" href="lightmediascanner__charset__conv_8c.html#8ea844f16120ba4000b7b142192e91e4">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#g9a610040a6380c745277effc5c4c9112">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_free()
+: <a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_new()
+: <a class="el" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lightmediascanner_charset_conv.c</a>
+<li>lms_charset_conv_new_full()
+: <a class="el" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_t
+: <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_del()
+: <a class="el" href="group__LMS__API.html#g0b427b8b60957e29a0e504c10c5356b0">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#35fc2de4828878b9dec07e8edda8a5e2">lightmediascanner.h</a>
+<li>lms_check()
+: <a class="el" href="lightmediascanner_8h.html#5b70063cf19648de70bb145404aa3d0b">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__check_8c.html#859492d896e816498edb471315efced1">lightmediascanner_check.c</a>
+<li>lms_check_single_process()
+: <a class="el" href="lightmediascanner__check_8c.html#a56ce530328493e110054aa1eabf66c2">lightmediascanner_check.c</a>
+, <a class="el" href="lightmediascanner_8h.html#bfd6888e606654c585e41aa946637432">lightmediascanner.h</a>
+<li>lms_close_pipes()
+: <a class="el" href="lightmediascanner__process_8c.html#6b68b00b80a98a178c7d69b962267a11">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lightmediascanner_private.h</a>
+<li>lms_create_pipes()
+: <a class="el" href="lightmediascanner__process_8c.html#c2e1320b9770e0f522451b13f82efc2b">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lightmediascanner_private.h</a>
+<li>lms_create_slave()
+: <a class="el" href="lightmediascanner__process_8c.html#e92fe8fe90d93d5ad9a42387a4b2fc6e">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lightmediascanner_private.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DEFAULT_COMMIT_INTERVAL
+: <a class="el" href="lightmediascanner_8c.html#6d0480dc76aba4a2291d79ac2466fc59">lightmediascanner.c</a>
+<li>DEFAULT_SLAVE_TIMEOUT
+: <a class="el" href="lightmediascanner_8c.html#c2843894cca63ec0089c381e69d1d81a">lightmediascanner.c</a>
+<li>lms_db_audio_add()
+: <a class="el" href="lightmediascanner__db__audio_8c.html#334b8c49f8dbf76024ee6b1d69f56c8c">lightmediascanner_db_audio.c</a>
+, <a class="el" href="group__LMS__DB.html#g9b83f734ec4905778dec5494f39b7397">lightmediascanner_db.h</a>
+<li>lms_db_audio_free()
+: <a class="el" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lightmediascanner_db_audio.c</a>
+, <a class="el" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lightmediascanner_db.h</a>
+<li>lms_db_audio_new()
+: <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lightmediascanner_db_audio.c</a>
+<li>lms_db_audio_start()
+: <a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lightmediascanner_db_audio.c</a>
+, <a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lightmediascanner_db.h</a>
+<li>lms_db_audio_t
+: <a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lightmediascanner_db.h</a>
+<li>lms_db_begin_transaction()
+: <a class="el" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#3a7256cb653542bbf563feeb2aa2d0ea">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_blob()
+: <a class="el" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#7fd514b582578c18a25cdbf6c561243c">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_double()
+: <a class="el" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#9e78297037179998924354e73ca69349">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_int()
+: <a class="el" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#37815f859116b46089bea4ba84bb23d2">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_int64()
+: <a class="el" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#bbb18d7cc44f7e363c0f240849d72c31">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_int64_or_null()
+: <a class="el" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#cd7006f0271b9a47937dc2d2ae5480fe">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_text()
+: <a class="el" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#14d56e02624ad6130bc59ae9bb950ac3">lightmediascanner_db_private.h</a>
+<li>lms_db_cache_add()
+: <a class="el" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#f2c9e9154fff8b335c4fd5693fe45aa6">lightmediascanner_db_private.h</a>
+<li>lms_db_cache_del()
+: <a class="el" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#e3e18958c74ba988c2bfdf77a3793ceb">lightmediascanner_db_private.h</a>
+<li>lms_db_cache_get()
+: <a class="el" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#ec1ff2c5b629374611336d56871a8c0b">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt()
+: <a class="el" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#6301bd096100f8adf24d2caff3aa0b75">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_begin_transaction()
+: <a class="el" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#073c254ca7b4d3f42e1be1854bcc42a3">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_delete_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#76941bdbbdb711fff821343e91c2cd97">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_end_transaction()
+: <a class="el" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#09feca4fbfde33d5647cdd5cc2de6500">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_get_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#327d54a6dac083e356fd609298a0cbd5">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_get_files()
+: <a class="el" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#1cc8a80961a0febdd099a028f3da9c30">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_insert_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#bf21f88ddbe28a8290d0df32af0f079c">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_set_file_dtime()
+: <a class="el" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#08c34b5b1b6e927a696ff0ce66562f54">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_update_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#69eb9d9058d9432f7658f9adffb79ed6">lightmediascanner_db_private.h</a>
+<li>lms_db_create_core_tables_if_required()
+: <a class="el" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#13ca09c885535a2968e707120e935268">lightmediascanner_db_private.h</a>
+<li>lms_db_create_trigger_if_not_exists()
+: <a class="el" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#f47d604dd4e11f81be1ad045ee723789">lightmediascanner_db_private.h</a>
+<li>lms_db_delete_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#ec17baec1e001f67334b0265d465fb50">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lightmediascanner_db_common.c</a>
+<li>lms_db_end_transaction()
+: <a class="el" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#8ee7bfba83958b80f717a6ccbad2a84c">lightmediascanner_db_private.h</a>
+<li>lms_db_finalize_stmt()
+: <a class="el" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#2660f629fbdf3d4144a6143fee837a27">lightmediascanner_db_private.h</a>
+<li>lms_db_get_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#e1df123e8d894a49f740ec6429af8159">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#c0b7cf0b2eb0f55fbf8a4103bc9569d1">lightmediascanner_db_common.c</a>
+<li>lms_db_get_files()
+: <a class="el" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#617b14b976ba1cde9fe639800f2eae71">lightmediascanner_db_private.h</a>
+<li>lms_db_image_add()
+: <a class="el" href="lightmediascanner__db__image_8c.html#f23fcc3d62a0f6592e14eaf1dc9b5833">lightmediascanner_db_image.c</a>
+, <a class="el" href="group__LMS__DB.html#gbf78dd3b90caa31e8901369211501200">lightmediascanner_db.h</a>
+<li>lms_db_image_free()
+: <a class="el" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lightmediascanner_db_image.c</a>
+<li>lms_db_image_new()
+: <a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lightmediascanner_db_image.c</a>
+<li>lms_db_image_start()
+: <a class="el" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lightmediascanner_db_image.c</a>
+<li>lms_db_image_t
+: <a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lightmediascanner_db.h</a>
+<li>lms_db_insert_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#9353bf3cfbe2c0045023658597b0cf1d">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">lightmediascanner_db_common.c</a>
+<li>lms_db_playlist_add()
+: <a class="el" href="lightmediascanner__db__playlist_8c.html#4fe309efb9c2c24b6e2f77fffca81ee4">lightmediascanner_db_playlist.c</a>
+, <a class="el" href="group__LMS__DB.html#g8864e532609191f07737c1d23c1bc65f">lightmediascanner_db.h</a>
+<li>lms_db_playlist_free()
+: <a class="el" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lightmediascanner_db_playlist.c</a>
+<li>lms_db_playlist_new()
+: <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lightmediascanner_db_playlist.c</a>
+, <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lightmediascanner_db.h</a>
+<li>lms_db_playlist_start()
+: <a class="el" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lightmediascanner_db_playlist.c</a>
+, <a class="el" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lightmediascanner_db.h</a>
+<li>lms_db_playlist_t
+: <a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lightmediascanner_db.h</a>
+<li>lms_db_reset_stmt()
+: <a class="el" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#ee78f418f0f3c9ead3023b1453c63556">lightmediascanner_db_private.h</a>
+<li>lms_db_set_file_dtime()
+: <a class="el" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#0fa3bfe1fa3a01a4dd231b6f818122cb">lightmediascanner_db_private.h</a>
+<li>lms_db_table_update()
+: <a class="el" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#3dcf825514196befd0a4575e4afd0b58">lightmediascanner_db_private.h</a>
+<li>lms_db_table_update_if_required()
+: <a class="el" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#455c0e5d62094b01fc935c5db8f07352">lightmediascanner_db_private.h</a>
+<li>lms_db_table_updater_t
+: <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lightmediascanner_db_private.h</a>
+<li>lms_db_table_version_get()
+: <a class="el" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#23cf7fff49641b39c017bdd076b112a7">lightmediascanner_db_private.h</a>
+<li>lms_db_table_version_set()
+: <a class="el" href="lightmediascanner__db__private_8h.html#1c57f68c64069575a36252816929e335">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">lightmediascanner_db_common.c</a>
+<li>lms_db_update_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#9cce62321be32274de720ec946473eeb">lightmediascanner_db_private.h</a>
+<li>lms_db_video_add()
+: <a class="el" href="lightmediascanner__db__video_8c.html#700adc9c25a70e5cd1d77812324b748e">lightmediascanner_db_video.c</a>
+, <a class="el" href="group__LMS__DB.html#gb07d1e7fe962486b6e9d00581e8aac19">lightmediascanner_db.h</a>
+<li>lms_db_video_free()
+: <a class="el" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lightmediascanner_db_video.c</a>
+, <a class="el" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lightmediascanner_db.h</a>
+<li>lms_db_video_new()
+: <a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lightmediascanner_db_video.c</a>
+, <a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lightmediascanner_db.h</a>
+<li>lms_db_video_start()
+: <a class="el" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lightmediascanner_db_video.c</a>
+<li>lms_db_video_t
+: <a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lightmediascanner_db.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li class="current"><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>lms_finish_slave()
+: <a class="el" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#9f980636d608c6af99477ba37e196050">lightmediascanner_process.c</a>
+<li>lms_free()
+: <a class="el" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lightmediascanner.c</a>
+<li>lms_free_callback_t
+: <a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lightmediascanner.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li class="current"><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>GNUC_CONST
+: <a class="el" href="lightmediascanner_8h.html#ccce66c7f9844ae805b83bee1b9c32b5">lightmediascanner.h</a>
+<li>GNUC_MALLOC
+: <a class="el" href="lightmediascanner_8h.html#2213ea4dca0e242f957f63988caab768">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8h.html#2213ea4dca0e242f957f63988caab768">lightmediascanner_charset_conv.h</a>
+<li>GNUC_NON_NULL
+: <a class="el" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="lightmediascanner__db_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_db.h</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_utils.h</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_private.h</a>
+<li>GNUC_NULL_TERMINATED
+: <a class="el" href="lightmediascanner_8h.html#3c631eb7d32b61d70bfc615ae54e5552">lightmediascanner.h</a>
+<li>GNUC_PURE
+: <a class="el" href="lightmediascanner_8h.html#7a9a21d60c8e567c8110c8e3069f8201">lightmediascanner.h</a>
+<li>GNUC_UNUSED
+: <a class="el" href="lightmediascanner_8h.html#80a4050221a914ea58d5799f13109ebb">lightmediascanner.h</a>
+<li>GNUC_WARN_UNUSED_RESULT
+: <a class="el" href="lightmediascanner_8h.html#34c563f40a0f86e597c51f1556669521">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8h.html#34c563f40a0f86e597c51f1556669521">lightmediascanner_charset_conv.h</a>
+<li>lms_get_commit_interval()
+: <a class="el" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lightmediascanner.c</a>
+<li>lms_get_db_path()
+: <a class="el" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lightmediascanner.h</a>
+<li>lms_get_slave_timeout()
+: <a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lightmediascanner.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li class="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>lms_is_processing()
+: <a class="el" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lightmediascanner.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li class="current"><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LMS_ARRAY_SIZE
+: <a class="el" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">lightmediascanner_utils.h</a>
+<li>LMS_PROGRESS_STATUS_DELETED
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_ERROR_COMM
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_ERROR_PARSE
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_KILLED
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_PROCESSED
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_SKIPPED
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_UP_TO_DATE
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370204315e58ce4b7dfa6421b4d1556655d">lightmediascanner.h</a>
+<li>LMS_STATIC_STRING_SIZE
+: <a class="el" href="lightmediascanner__utils_8h.html#786c453d995be000d52360f327a6816b">lightmediascanner_utils.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>lms_new()
+: <a class="el" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lightmediascanner.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>lms_parser_add()
+: <a class="el" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#ce55a5c9cc767b96fa6f24b77bebc7c3">lightmediascanner.h</a>
+<li>lms_parser_del()
+: <a class="el" href="lightmediascanner_8h.html#5ba173b12c355bbdf7913bfff0ff6415">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">lightmediascanner.c</a>
+<li>lms_parser_del_int()
+: <a class="el" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#239fc535d2f20f09eeec9df86aa6ef9b">lightmediascanner_private.h</a>
+<li>lms_parser_find_and_add()
+: <a class="el" href="lightmediascanner_8h.html#e48d0483903bbb9604d14b44f7c569d9">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lightmediascanner.c</a>
+<li>lms_parser_info()
+: <a class="el" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#bda4586257139ef13260e3fe3bfd1b77">lightmediascanner.h</a>
+<li>lms_parser_info_find()
+: <a class="el" href="lightmediascanner_8c.html#66457cf4ec2ef4a50bd899f99e914650">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#85b153a95dafb48c419dc1419e323567">lightmediascanner.h</a>
+<li>lms_parser_info_free()
+: <a class="el" href="lightmediascanner_8c.html#508ef3c49f7f4729b9e5a5711b66bda1">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#f071ee2184c0d4d69c85cccd09e08b26">lightmediascanner.h</a>
+<li>lms_parsers_check_using()
+: <a class="el" href="lightmediascanner__process_8c.html#f2e95cea50ce24774d2f5ed7d8c8f41c">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lightmediascanner_private.h</a>
+<li>lms_parsers_finish()
+: <a class="el" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#d002464442b08826a1da920bdf4957b7">lightmediascanner_process.c</a>
+<li>lms_parsers_list()
+: <a class="el" href="lightmediascanner_8c.html#7e27ccbd0abfd5d112586a00fd424db9">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#ebe19263efa873f4629a18e77924bfaf">lightmediascanner.h</a>
+<li>lms_parsers_list_by_category()
+: <a class="el" href="lightmediascanner_8c.html#24f4c44982b286dc3ca451ca1acb6123">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#f6dfb5e9ed76e132ee7f45e7fe26415e">lightmediascanner.h</a>
+<li>lms_parsers_run()
+: <a class="el" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#4ab78dfbf29822d91472d18dd7424e77">lightmediascanner_process.c</a>
+<li>lms_parsers_setup()
+: <a class="el" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#c321bebfc5c24cbbac30031202c460e9">lightmediascanner_process.c</a>
+<li>lms_parsers_start()
+: <a class="el" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#6e02f78f026b2ad282184476dca13e45">lightmediascanner_process.c</a>
+<li>lms_plugin_close_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lightmediascanner_plugin.h</a>
+<li>lms_plugin_finish_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lightmediascanner_plugin.h</a>
+<li>lms_plugin_match_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">lightmediascanner_plugin.h</a>
+<li>lms_plugin_parse_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lightmediascanner_plugin.h</a>
+<li>lms_plugin_setup_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lightmediascanner_plugin.h</a>
+<li>lms_plugin_start_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lightmediascanner_plugin.h</a>
+<li>lms_plugin_t
+: <a class="el" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">lightmediascanner.h</a>
+<li>lms_process()
+: <a class="el" href="lightmediascanner_8h.html#7d2b81cfe07a8cce4c2bef705e7529f4">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#c2f07fb73717514237862c98dbf023b2">lightmediascanner_process.c</a>
+<li>lms_process_single_process()
+: <a class="el" href="lightmediascanner__process_8c.html#5db83cefb7a50bbecea9de26a6ef1c2c">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner_8h.html#c5eda23c23b2ea76f001ac994c2ba9e2">lightmediascanner.h</a>
+<li>lms_progress_callback_t
+: <a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lightmediascanner.h</a>
+<li>lms_progress_status_t
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lightmediascanner.h</a>
+<li>PATH_SIZE
+: <a class="el" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">lightmediascanner_private.h</a>
+<li>process_file_callback_t
+: <a class="el" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">lightmediascanner_private.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>lms_restart_slave()
+: <a class="el" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#9bf510645947b478dab39f633bbd35f3">lightmediascanner_process.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li class="current"><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>lms_set_commit_interval()
+: <a class="el" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lightmediascanner.h</a>
+<li>lms_set_progress_callback()
+: <a class="el" href="lightmediascanner_8h.html#d2da241599f7f576670d64184f972c43">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner_8c.html#668e706f6d5eae3ba5e36ff4db2ae514">lightmediascanner.c</a>
+<li>lms_set_slave_timeout()
+: <a class="el" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lightmediascanner.h</a>
+<li>lms_stop_processing()
+: <a class="el" href="lightmediascanner_8h.html#30aa1e83907fc1049d2adccb28eef489">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#36d624baae0531c20e716c88a82e0aaf">lightmediascanner_process.c</a>
+<li>lms_string_size_strip_and_free()
+: <a class="el" href="lightmediascanner__utils_8c.html#9ed157dee5c16f4c62c5ae6e281580cf">lightmediascanner_utils.c</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#5a7e5da69500a12f447a77177dbb6e0d">lightmediascanner_utils.h</a>
+<li>lms_strstrip()
+: <a class="el" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">lightmediascanner_utils.c</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#281568969e526a7bdf687da4d1cc75ab">lightmediascanner_utils.h</a>
+<li>lms_strstrip_and_free()
+: <a class="el" href="lightmediascanner__utils_8c.html#45d15c8bfeddaef0d5b1d0bd9ecc0c79">lightmediascanner_utils.c</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#01cee33e2410ae7081905a4e06d890cc">lightmediascanner_utils.h</a>
+<li>sqlite3_clear_bindings()
+: <a class="el" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">lightmediascanner_db_common.c</a>
+<li>sqlite3_prepare_v2()
+: <a class="el" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405">lightmediascanner_db_common.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>lms_t
+: <a class="el" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lightmediascanner.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li class="current"><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+<p>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>lms_which_extension()
+: <a class="el" href="lightmediascanner__utils_8c.html#71ee8b57cf7c5eba8ec0593e756d2529">lightmediascanner_utils.c</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#7dfc23066442e00fff5cbe77e6f1426e">lightmediascanner_utils.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index__"><span>_</span></a></li>
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_g"><span>g</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+
+<p>
+<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
+<li>_DB_T_UPDATE
+: <a class="el" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">lightmediascanner_db_audio.c</a>
+<li>_GNU_SOURCE
+: <a class="el" href="lightmediascanner__check_8c.html#369266c24eacffb87046522897a570d5">lightmediascanner_check.c</a>
+, <a class="el" href="lightmediascanner__process_8c.html#369266c24eacffb87046522897a570d5">lightmediascanner_process.c</a>
+<li>_LIGHTMEDIASCANNER_CHARSET_CONV_H_
+: <a class="el" href="lightmediascanner__charset__conv_8h.html#79f872f99949ecde4c1661e4b78b4c2b">lightmediascanner_charset_conv.h</a>
+<li>_LIGHTMEDIASCANNER_DB_H_
+: <a class="el" href="lightmediascanner__db_8h.html#5360af19a6df2e8b0d326344bb27e151">lightmediascanner_db.h</a>
+<li>_LIGHTMEDIASCANNER_DB_PRIVATE_H_
+: <a class="el" href="lightmediascanner__db__private_8h.html#97d5ed207ef5b72f4fba0cab38594bb7">lightmediascanner_db_private.h</a>
+<li>_LIGHTMEDIASCANNER_H_
+: <a class="el" href="lightmediascanner_8h.html#e97a674be7c85b0914a6acbafe994998">lightmediascanner.h</a>
+<li>_LIGHTMEDIASCANNER_PLUGIN_H_
+: <a class="el" href="lightmediascanner__plugin_8h.html#25abdf2375defcfc83bf95ef930fc739">lightmediascanner_plugin.h</a>
+<li>_LIGHTMEDIASCANNER_PRIVATE_H_
+: <a class="el" href="lightmediascanner__private_8h.html#c9783e2105f145aa71f541e0825707ed">lightmediascanner_private.h</a>
+<li>_LIGHTMEDIASCANNER_UTILS_H_
+: <a class="el" href="lightmediascanner__utils_8h.html#8ad3460b8bb014878af2cdfd42fcf5c6">lightmediascanner_utils.h</a>
+</ul>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>API
+: <a class="el" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#d8ce4efaa307683d3d763b37b4711c53">lightmediascanner_utils.h</a>
+, <a class="el" href="lightmediascanner__db_8h.html#d8ce4efaa307683d3d763b37b4711c53">lightmediascanner_db.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8h.html#d8ce4efaa307683d3d763b37b4711c53">lightmediascanner_charset_conv.h</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>COMM_FINFO_FLAG_OUTDATED
+: <a class="el" href="lightmediascanner__check_8c.html#f8084f435d209d810eb33deaa35fab5e">lightmediascanner_check.c</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DEFAULT_COMMIT_INTERVAL
+: <a class="el" href="lightmediascanner_8c.html#6d0480dc76aba4a2291d79ac2466fc59">lightmediascanner.c</a>
+<li>DEFAULT_SLAVE_TIMEOUT
+: <a class="el" href="lightmediascanner_8c.html#c2843894cca63ec0089c381e69d1d81a">lightmediascanner.c</a>
+</ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>GNUC_CONST
+: <a class="el" href="lightmediascanner_8h.html#ccce66c7f9844ae805b83bee1b9c32b5">lightmediascanner.h</a>
+<li>GNUC_MALLOC
+: <a class="el" href="lightmediascanner_8h.html#2213ea4dca0e242f957f63988caab768">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8h.html#2213ea4dca0e242f957f63988caab768">lightmediascanner_charset_conv.h</a>
+<li>GNUC_NON_NULL
+: <a class="el" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_utils.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="lightmediascanner__db_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_db.h</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_db_private.h</a>
+<li>GNUC_NULL_TERMINATED
+: <a class="el" href="lightmediascanner_8h.html#3c631eb7d32b61d70bfc615ae54e5552">lightmediascanner.h</a>
+<li>GNUC_PURE
+: <a class="el" href="lightmediascanner_8h.html#7a9a21d60c8e567c8110c8e3069f8201">lightmediascanner.h</a>
+<li>GNUC_UNUSED
+: <a class="el" href="lightmediascanner_8h.html#80a4050221a914ea58d5799f13109ebb">lightmediascanner.h</a>
+<li>GNUC_WARN_UNUSED_RESULT
+: <a class="el" href="lightmediascanner__charset__conv_8h.html#34c563f40a0f86e597c51f1556669521">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="lightmediascanner_8h.html#34c563f40a0f86e597c51f1556669521">lightmediascanner.h</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LMS_ARRAY_SIZE
+: <a class="el" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">lightmediascanner_utils.h</a>
+<li>LMS_STATIC_STRING_SIZE
+: <a class="el" href="lightmediascanner__utils_8h.html#786c453d995be000d52360f327a6816b">lightmediascanner_utils.h</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PATH_SIZE
+: <a class="el" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">lightmediascanner_private.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+
+<p>
+<ul>
+<li>lms_progress_status_t
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lightmediascanner.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+
+<p>
+<ul>
+<li>LMS_PROGRESS_STATUS_DELETED
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_ERROR_COMM
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_ERROR_PARSE
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_KILLED
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_PROCESSED
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_SKIPPED
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c">lightmediascanner.h</a>
+<li>LMS_PROGRESS_STATUS_UP_TO_DATE
+: <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370204315e58ce4b7dfa6421b4d1556655d">lightmediascanner.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_g"><span>g</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>lms_charset_add()
+: <a class="el" href="group__LMS__API.html#g4fd56e209d415b27466274726cc7d59f">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#03afcd1e04665bdaebe73d9f6cc20553">lightmediascanner.h</a>
+<li>lms_charset_conv()
+: <a class="el" href="group__LMS__CHARSET.html#gd843f59abac208048f13437534d589fc">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lightmediascanner_charset_conv.c</a>
+<li>lms_charset_conv_add()
+: <a class="el" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#gfc1aad4c212b5fa1ce7280d2b7df3ef7">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_check()
+: <a class="el" href="group__LMS__CHARSET.html#gbc8903e67c3c7eefa902cbb2bd5e3338">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8c.html#f069b89e828896690fdd919e5b042c7d">lightmediascanner_charset_conv.c</a>
+<li>lms_charset_conv_del()
+: <a class="el" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#gc364c502a4a4a64ea9f092a61074a90a">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_force()
+: <a class="el" href="lightmediascanner__charset__conv_8c.html#8ea844f16120ba4000b7b142192e91e4">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#g9a610040a6380c745277effc5c4c9112">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_free()
+: <a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_conv_new()
+: <a class="el" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lightmediascanner_charset_conv.c</a>
+<li>lms_charset_conv_new_full()
+: <a class="el" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lightmediascanner_charset_conv.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lightmediascanner_charset_conv.h</a>
+<li>lms_charset_del()
+: <a class="el" href="lightmediascanner_8h.html#35fc2de4828878b9dec07e8edda8a5e2">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g0b427b8b60957e29a0e504c10c5356b0">lightmediascanner.c</a>
+<li>lms_check()
+: <a class="el" href="lightmediascanner_8h.html#5b70063cf19648de70bb145404aa3d0b">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__check_8c.html#859492d896e816498edb471315efced1">lightmediascanner_check.c</a>
+<li>lms_check_single_process()
+: <a class="el" href="lightmediascanner_8h.html#bfd6888e606654c585e41aa946637432">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__check_8c.html#a56ce530328493e110054aa1eabf66c2">lightmediascanner_check.c</a>
+<li>lms_close_pipes()
+: <a class="el" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#6b68b00b80a98a178c7d69b962267a11">lightmediascanner_process.c</a>
+<li>lms_create_pipes()
+: <a class="el" href="lightmediascanner__process_8c.html#c2e1320b9770e0f522451b13f82efc2b">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lightmediascanner_private.h</a>
+<li>lms_create_slave()
+: <a class="el" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#e92fe8fe90d93d5ad9a42387a4b2fc6e">lightmediascanner_process.c</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>lms_db_audio_add()
+: <a class="el" href="group__LMS__DB.html#g9b83f734ec4905778dec5494f39b7397">lightmediascanner_db.h</a>
+, <a class="el" href="lightmediascanner__db__audio_8c.html#334b8c49f8dbf76024ee6b1d69f56c8c">lightmediascanner_db_audio.c</a>
+<li>lms_db_audio_free()
+: <a class="el" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lightmediascanner_db_audio.c</a>
+, <a class="el" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lightmediascanner_db.h</a>
+<li>lms_db_audio_new()
+: <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lightmediascanner_db_audio.c</a>
+<li>lms_db_audio_start()
+: <a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lightmediascanner_db_audio.c</a>
+, <a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lightmediascanner_db.h</a>
+<li>lms_db_begin_transaction()
+: <a class="el" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#3a7256cb653542bbf563feeb2aa2d0ea">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_blob()
+: <a class="el" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#7fd514b582578c18a25cdbf6c561243c">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_double()
+: <a class="el" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#9e78297037179998924354e73ca69349">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_int()
+: <a class="el" href="lightmediascanner__db__private_8h.html#37815f859116b46089bea4ba84bb23d2">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lightmediascanner_db_common.c</a>
+<li>lms_db_bind_int64()
+: <a class="el" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#bbb18d7cc44f7e363c0f240849d72c31">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_int64_or_null()
+: <a class="el" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#cd7006f0271b9a47937dc2d2ae5480fe">lightmediascanner_db_private.h</a>
+<li>lms_db_bind_text()
+: <a class="el" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#14d56e02624ad6130bc59ae9bb950ac3">lightmediascanner_db_private.h</a>
+<li>lms_db_cache_add()
+: <a class="el" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#f2c9e9154fff8b335c4fd5693fe45aa6">lightmediascanner_db_private.h</a>
+<li>lms_db_cache_del()
+: <a class="el" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#e3e18958c74ba988c2bfdf77a3793ceb">lightmediascanner_db_private.h</a>
+<li>lms_db_cache_get()
+: <a class="el" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#ec1ff2c5b629374611336d56871a8c0b">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt()
+: <a class="el" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#6301bd096100f8adf24d2caff3aa0b75">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_begin_transaction()
+: <a class="el" href="lightmediascanner__db__private_8h.html#073c254ca7b4d3f42e1be1854bcc42a3">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_delete_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#76941bdbbdb711fff821343e91c2cd97">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_end_transaction()
+: <a class="el" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#09feca4fbfde33d5647cdd5cc2de6500">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_get_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#327d54a6dac083e356fd609298a0cbd5">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_get_files()
+: <a class="el" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#1cc8a80961a0febdd099a028f3da9c30">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_insert_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#bf21f88ddbe28a8290d0df32af0f079c">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_set_file_dtime()
+: <a class="el" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#08c34b5b1b6e927a696ff0ce66562f54">lightmediascanner_db_private.h</a>
+<li>lms_db_compile_stmt_update_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#69eb9d9058d9432f7658f9adffb79ed6">lightmediascanner_db_private.h</a>
+<li>lms_db_create_core_tables_if_required()
+: <a class="el" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#13ca09c885535a2968e707120e935268">lightmediascanner_db_private.h</a>
+<li>lms_db_create_trigger_if_not_exists()
+: <a class="el" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#f47d604dd4e11f81be1ad045ee723789">lightmediascanner_db_private.h</a>
+<li>lms_db_delete_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#ec17baec1e001f67334b0265d465fb50">lightmediascanner_db_private.h</a>
+<li>lms_db_end_transaction()
+: <a class="el" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#8ee7bfba83958b80f717a6ccbad2a84c">lightmediascanner_db_private.h</a>
+<li>lms_db_finalize_stmt()
+: <a class="el" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#2660f629fbdf3d4144a6143fee837a27">lightmediascanner_db_private.h</a>
+<li>lms_db_get_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#c0b7cf0b2eb0f55fbf8a4103bc9569d1">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#e1df123e8d894a49f740ec6429af8159">lightmediascanner_db_private.h</a>
+<li>lms_db_get_files()
+: <a class="el" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#617b14b976ba1cde9fe639800f2eae71">lightmediascanner_db_private.h</a>
+<li>lms_db_image_add()
+: <a class="el" href="group__LMS__DB.html#gbf78dd3b90caa31e8901369211501200">lightmediascanner_db.h</a>
+, <a class="el" href="lightmediascanner__db__image_8c.html#f23fcc3d62a0f6592e14eaf1dc9b5833">lightmediascanner_db_image.c</a>
+<li>lms_db_image_free()
+: <a class="el" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lightmediascanner_db_image.c</a>
+, <a class="el" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lightmediascanner_db.h</a>
+<li>lms_db_image_new()
+: <a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lightmediascanner_db_image.c</a>
+<li>lms_db_image_start()
+: <a class="el" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lightmediascanner_db_image.c</a>
+, <a class="el" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lightmediascanner_db.h</a>
+<li>lms_db_insert_file_info()
+: <a class="el" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#9353bf3cfbe2c0045023658597b0cf1d">lightmediascanner_db_private.h</a>
+<li>lms_db_playlist_add()
+: <a class="el" href="group__LMS__DB.html#g8864e532609191f07737c1d23c1bc65f">lightmediascanner_db.h</a>
+, <a class="el" href="lightmediascanner__db__playlist_8c.html#4fe309efb9c2c24b6e2f77fffca81ee4">lightmediascanner_db_playlist.c</a>
+<li>lms_db_playlist_free()
+: <a class="el" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lightmediascanner_db_playlist.c</a>
+, <a class="el" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lightmediascanner_db.h</a>
+<li>lms_db_playlist_new()
+: <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lightmediascanner_db_playlist.c</a>
+, <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lightmediascanner_db.h</a>
+<li>lms_db_playlist_start()
+: <a class="el" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lightmediascanner_db_playlist.c</a>
+<li>lms_db_reset_stmt()
+: <a class="el" href="lightmediascanner__db__private_8h.html#ee78f418f0f3c9ead3023b1453c63556">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lightmediascanner_db_common.c</a>
+<li>lms_db_set_file_dtime()
+: <a class="el" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#0fa3bfe1fa3a01a4dd231b6f818122cb">lightmediascanner_db_private.h</a>
+<li>lms_db_table_update()
+: <a class="el" href="lightmediascanner__db__private_8h.html#3dcf825514196befd0a4575e4afd0b58">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558">lightmediascanner_db_common.c</a>
+<li>lms_db_table_update_if_required()
+: <a class="el" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#455c0e5d62094b01fc935c5db8f07352">lightmediascanner_db_private.h</a>
+<li>lms_db_table_version_get()
+: <a class="el" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#23cf7fff49641b39c017bdd076b112a7">lightmediascanner_db_private.h</a>
+<li>lms_db_table_version_set()
+: <a class="el" href="lightmediascanner__db__private_8h.html#1c57f68c64069575a36252816929e335">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">lightmediascanner_db_common.c</a>
+<li>lms_db_update_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#9cce62321be32274de720ec946473eeb">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lightmediascanner_db_common.c</a>
+<li>lms_db_video_add()
+: <a class="el" href="group__LMS__DB.html#gb07d1e7fe962486b6e9d00581e8aac19">lightmediascanner_db.h</a>
+, <a class="el" href="lightmediascanner__db__video_8c.html#700adc9c25a70e5cd1d77812324b748e">lightmediascanner_db_video.c</a>
+<li>lms_db_video_free()
+: <a class="el" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lightmediascanner_db_video.c</a>
+<li>lms_db_video_new()
+: <a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lightmediascanner_db_video.c</a>
+<li>lms_db_video_start()
+: <a class="el" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lightmediascanner_db_video.c</a>
+, <a class="el" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lightmediascanner_db.h</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>lms_finish_slave()
+: <a class="el" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#9f980636d608c6af99477ba37e196050">lightmediascanner_process.c</a>
+<li>lms_free()
+: <a class="el" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lightmediascanner.h</a>
+</ul>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>lms_get_commit_interval()
+: <a class="el" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lightmediascanner.h</a>
+<li>lms_get_db_path()
+: <a class="el" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lightmediascanner.c</a>
+<li>lms_get_slave_timeout()
+: <a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lightmediascanner.c</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>lms_is_processing()
+: <a class="el" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lightmediascanner.h</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>lms_new()
+: <a class="el" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lightmediascanner.h</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>lms_parser_add()
+: <a class="el" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#ce55a5c9cc767b96fa6f24b77bebc7c3">lightmediascanner.h</a>
+<li>lms_parser_del()
+: <a class="el" href="lightmediascanner_8h.html#5ba173b12c355bbdf7913bfff0ff6415">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">lightmediascanner.c</a>
+<li>lms_parser_del_int()
+: <a class="el" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#239fc535d2f20f09eeec9df86aa6ef9b">lightmediascanner_private.h</a>
+<li>lms_parser_find_and_add()
+: <a class="el" href="lightmediascanner_8h.html#e48d0483903bbb9604d14b44f7c569d9">lightmediascanner.h</a>
+, <a class="el" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lightmediascanner.c</a>
+<li>lms_parser_info()
+: <a class="el" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#bda4586257139ef13260e3fe3bfd1b77">lightmediascanner.h</a>
+<li>lms_parser_info_find()
+: <a class="el" href="lightmediascanner_8c.html#66457cf4ec2ef4a50bd899f99e914650">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#85b153a95dafb48c419dc1419e323567">lightmediascanner.h</a>
+<li>lms_parser_info_free()
+: <a class="el" href="lightmediascanner_8c.html#508ef3c49f7f4729b9e5a5711b66bda1">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#f071ee2184c0d4d69c85cccd09e08b26">lightmediascanner.h</a>
+<li>lms_parsers_check_using()
+: <a class="el" href="lightmediascanner__process_8c.html#f2e95cea50ce24774d2f5ed7d8c8f41c">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lightmediascanner_private.h</a>
+<li>lms_parsers_finish()
+: <a class="el" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#d002464442b08826a1da920bdf4957b7">lightmediascanner_process.c</a>
+<li>lms_parsers_list()
+: <a class="el" href="lightmediascanner_8c.html#7e27ccbd0abfd5d112586a00fd424db9">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#ebe19263efa873f4629a18e77924bfaf">lightmediascanner.h</a>
+<li>lms_parsers_list_by_category()
+: <a class="el" href="lightmediascanner_8c.html#24f4c44982b286dc3ca451ca1acb6123">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#f6dfb5e9ed76e132ee7f45e7fe26415e">lightmediascanner.h</a>
+<li>lms_parsers_run()
+: <a class="el" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#4ab78dfbf29822d91472d18dd7424e77">lightmediascanner_process.c</a>
+<li>lms_parsers_setup()
+: <a class="el" href="lightmediascanner__process_8c.html#c321bebfc5c24cbbac30031202c460e9">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lightmediascanner_private.h</a>
+<li>lms_parsers_start()
+: <a class="el" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#6e02f78f026b2ad282184476dca13e45">lightmediascanner_process.c</a>
+<li>lms_process()
+: <a class="el" href="lightmediascanner__process_8c.html#c2f07fb73717514237862c98dbf023b2">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner_8h.html#7d2b81cfe07a8cce4c2bef705e7529f4">lightmediascanner.h</a>
+<li>lms_process_single_process()
+: <a class="el" href="lightmediascanner_8h.html#c5eda23c23b2ea76f001ac994c2ba9e2">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#5db83cefb7a50bbecea9de26a6ef1c2c">lightmediascanner_process.c</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>lms_restart_slave()
+: <a class="el" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#9bf510645947b478dab39f633bbd35f3">lightmediascanner_process.c</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>lms_set_commit_interval()
+: <a class="el" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lightmediascanner.h</a>
+<li>lms_set_progress_callback()
+: <a class="el" href="lightmediascanner_8h.html#d2da241599f7f576670d64184f972c43">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner_8c.html#668e706f6d5eae3ba5e36ff4db2ae514">lightmediascanner.c</a>
+<li>lms_set_slave_timeout()
+: <a class="el" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lightmediascanner.c</a>
+, <a class="el" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lightmediascanner.h</a>
+<li>lms_stop_processing()
+: <a class="el" href="lightmediascanner_8h.html#30aa1e83907fc1049d2adccb28eef489">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#36d624baae0531c20e716c88a82e0aaf">lightmediascanner_process.c</a>
+<li>lms_string_size_strip_and_free()
+: <a class="el" href="lightmediascanner__utils_8c.html#9ed157dee5c16f4c62c5ae6e281580cf">lightmediascanner_utils.c</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#5a7e5da69500a12f447a77177dbb6e0d">lightmediascanner_utils.h</a>
+<li>lms_strstrip()
+: <a class="el" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">lightmediascanner_utils.c</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#281568969e526a7bdf687da4d1cc75ab">lightmediascanner_utils.h</a>
+<li>lms_strstrip_and_free()
+: <a class="el" href="lightmediascanner__utils_8c.html#45d15c8bfeddaef0d5b1d0bd9ecc0c79">lightmediascanner_utils.c</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#01cee33e2410ae7081905a4e06d890cc">lightmediascanner_utils.h</a>
+<li>sqlite3_clear_bindings()
+: <a class="el" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">lightmediascanner_db_common.c</a>
+<li>sqlite3_prepare_v2()
+: <a class="el" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405">lightmediascanner_db_common.c</a>
+</ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>lms_which_extension()
+: <a class="el" href="lightmediascanner__utils_8c.html#71ee8b57cf7c5eba8ec0593e756d2529">lightmediascanner_utils.c</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#7dfc23066442e00fff5cbe77e6f1426e">lightmediascanner_utils.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+
+<p>
+<ul>
+<li>check_row_callback_t
+: <a class="el" href="lightmediascanner__private_8h.html#818aa1ae6bb03151823bbd9b56bd0801">lightmediascanner_private.h</a>
+<li>lms_charset_conv_t
+: <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lightmediascanner_charset_conv.h</a>
+<li>lms_db_audio_t
+: <a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lightmediascanner_db.h</a>
+<li>lms_db_image_t
+: <a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lightmediascanner_db.h</a>
+<li>lms_db_playlist_t
+: <a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lightmediascanner_db.h</a>
+<li>lms_db_video_t
+: <a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lightmediascanner_db.h</a>
+<li>lms_free_callback_t
+: <a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lightmediascanner.h</a>
+<li>lms_plugin_close_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lightmediascanner_plugin.h</a>
+<li>lms_plugin_finish_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lightmediascanner_plugin.h</a>
+<li>lms_plugin_match_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">lightmediascanner_plugin.h</a>
+<li>lms_plugin_parse_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lightmediascanner_plugin.h</a>
+<li>lms_plugin_setup_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lightmediascanner_plugin.h</a>
+<li>lms_plugin_start_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lightmediascanner_plugin.h</a>
+<li>lms_plugin_t
+: <a class="el" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">lightmediascanner.h</a>
+<li>lms_progress_callback_t
+: <a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lightmediascanner.h</a>
+<li>process_file_callback_t
+: <a class="el" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">lightmediascanner_private.h</a>
+<li>lms_t
+: <a class="el" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lightmediascanner.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+
+<p>
+<ul>
+<li>lms_db_table_updater_t
+: <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lightmediascanner_db_private.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node9 [shape="box",label="Inherited",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",fillcolor="grey75",style="filled" fontcolor="black"];
+ Node10 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [shape="box",label="PublicBase",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classPublicBase.html"];
+ Node11 -> Node10 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [shape="box",label="Truncated",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="red",URL="$classTruncated.html"];
+ Node13 -> Node9 [dir=back,color="darkgreen",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [shape="box",label="ProtectedBase",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classProtectedBase.html"];
+ Node14 -> Node9 [dir=back,color="firebrick4",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [shape="box",label="PrivateBase",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classPrivateBase.html"];
+ Node15 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [shape="box",label="Undocumented",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="grey75"];
+ Node16 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [shape="box",label="Templ< int >",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classTempl.html"];
+ Node17 -> Node16 [dir=back,color="orange",fontsize="10",style="dashed",label="< int >",fontname="FreeSans"];
+ Node17 [shape="box",label="Templ< T >",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classTempl.html"];
+ Node18 -> Node9 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="m_usedClass",fontname="FreeSans"];
+ Node18 [shape="box",label="Used",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classUsed.html"];
+}
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Graph Legend</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Graph Legend</h1>This page explains how to interpret the graphs that are generated by doxygen.<p>
+Consider the following example: <div class="fragment"><pre class="fragment"><span class="comment">/*! Invisible class because of truncation */</span>
+<span class="keyword">class </span>Invisible { };
+<span class="comment"></span>
+<span class="comment">/*! Truncated class, inheritance relation is hidden */</span>
+<span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };
+
+<span class="comment">/* Class not documented with doxygen comments */</span>
+<span class="keyword">class </span>Undocumented { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using public inheritance */</span>
+<span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };
+<span class="comment"></span>
+<span class="comment">/*! A template class */</span>
+<span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">class </span>Templ { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using protected inheritance */</span>
+<span class="keyword">class </span>ProtectedBase { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using private inheritance */</span>
+<span class="keyword">class </span>PrivateBase { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is used by the Inherited class */</span>
+<span class="keyword">class </span>Used { };
+<span class="comment"></span>
+<span class="comment">/*! Super class that inherits a number of other classes */</span>
+<span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,
+ <span class="keyword">protected</span> ProtectedBase,
+ <span class="keyword">private</span> PrivateBase,
+ <span class="keyword">public</span> Undocumented,
+ <span class="keyword">public</span> Templ<int>
+{
+ <span class="keyword">private</span>:
+ Used *m_usedClass;
+};
+</pre></div> This will result in the following graph:<p>
+<center><div align="center">
+<img src="graph_legend.png" alt="graph_legend.png">
+</div>
+</center> <p>
+The boxes in the above graph have the following meaning: <ul>
+<li>
+A filled gray box represents the struct or class for which the graph is generated. </li>
+<li>
+A box with a black border denotes a documented struct or class. </li>
+<li>
+A box with a grey border denotes an undocumented struct or class. </li>
+<li>
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
+</ul>
+The arrows have the following meaning: <ul>
+<li>
+A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
+<li>
+A dark green arrow is used for protected inheritance. </li>
+<li>
+A dark red arrow is used for private inheritance. </li>
+<li>
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>
+<li>
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: User-API</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>User-API</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structlms.html">lms_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lms_new</a> (const char *db_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lms_free</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lms_parser_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *so_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lms_parser_find_and_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">lms_parser_del</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, <a class="el" href="structlms__plugin.html">lms_plugin_t</a> *handle)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lms_is_processing</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lms_get_db_path</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lms_get_slave_timeout</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lms_set_slave_timeout</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, int ms)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lms_get_commit_interval</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lms_set_commit_interval</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, unsigned int transactions)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g4fd56e209d415b27466274726cc7d59f">lms_charset_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *charset)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g0b427b8b60957e29a0e504c10c5356b0">lms_charset_del</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *charset)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for library users. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g4fd56e209d415b27466274726cc7d59f"></a><!-- doxytag: member="lightmediascanner.c::lms_charset_add" ref="g4fd56e209d415b27466274726cc7d59f" args="(lms_t *lms, const char *charset)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_charset_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>charset</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Register a new charset encoding to be used.<p>
+All database text strings are in UTF-8, so one needs to register new encodings in order to convert to it.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>charset</em> </td><td>charset name as understood by iconv_open(3).</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00496">496</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00079">lms::cs_conv</a>, and <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00145">lms_charset_conv_add()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g0b427b8b60957e29a0e504c10c5356b0"></a><!-- doxytag: member="lightmediascanner.c::lms_charset_del" ref="g0b427b8b60957e29a0e504c10c5356b0" args="(lms_t *lms, const char *charset)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_charset_del </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>charset</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Forget about registered charset encoding.<p>
+All database text strings are in UTF-8, so one needs to register new encodings in order to convert to it.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>charset</em> </td><td>charset name as understood by iconv_open(3).</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00519">519</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00079">lms::cs_conv</a>, and <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00211">lms_charset_conv_del()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="gf15f3b0f7de2113155a360df989b7687"></a><!-- doxytag: member="lightmediascanner.c::lms_free" ref="gf15f3b0f7de2113155a360df989b7687" args="(lms_t *lms)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_free </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Free existing Light Media Scanner instance.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00159">159</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00079">lms::cs_conv</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00084">lms::data</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00080">lms::db_path</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00085">lms::free_data</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00088">lms::is_processing</a>, <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00112">lms_charset_conv_free()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>, and <a class="el" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">lms::progress</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00634">lms_create_slave()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g227ebe8cad9776908c1977c43ef62d9c"></a><!-- doxytag: member="lightmediascanner.c::lms_get_commit_interval" ref="g227ebe8cad9776908c1977c43ef62d9c" args="(const lms_t *lms)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int lms_get_commit_interval </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the number of files served between database transactions.<p>
+This is used as an optimization to database access: doing database commits take some time and can slow things down too much, so you can choose to just commit after some number of files are processed, this is the commit_interval.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>(unsigned int)-1 on error, value otherwise. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00449">449</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00087">lms::commit_interval</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g4098d31de667a895095fc8d4d9bc10c0"></a><!-- doxytag: member="lightmediascanner.c::lms_get_db_path" ref="g4098d31de667a895095fc8d4d9bc10c0" args="(const lms_t *lms)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* lms_get_db_path </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the database path given at creation time.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>path to database. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00385">385</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00080">lms::db_path</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g973c6c7b66f4fdd6f4f776a36e742d33"></a><!-- doxytag: member="lightmediascanner.c::lms_get_slave_timeout" ref="g973c6c7b66f4fdd6f4f776a36e742d33" args="(const lms_t *lms)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_get_slave_timeout </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the maximum amount of milliseconds the slave can take to serve one file.<p>
+If a slave takes more than this amount of milliseconds, it will be killed and the scanner will continue with the next file.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>-1 on error or time in milliseconds otherwise. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00407">407</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00081">lms::slave_timeout</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g8c594bed751d504965b5cc0c7e93fb71"></a><!-- doxytag: member="lightmediascanner.c::lms_is_processing" ref="g8c594bed751d504965b5cc0c7e93fb71" args="(const lms_t *lms)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_is_processing </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Checks if Light Media Scanner is being used in a processing operation lile <a class="el" href="lightmediascanner_8h.html#7d2b81cfe07a8cce4c2bef705e7529f4">lms_process()</a> or <a class="el" href="lightmediascanner_8h.html#5b70063cf19648de70bb145404aa3d0b">lms_check()</a>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if it is processing, 0 if it's not, -1 on error. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00366">366</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00088">lms::is_processing</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g982939bdd2aeb664b5cf7a50b67c1030"></a><!-- doxytag: member="lightmediascanner.c::lms_new" ref="g982939bdd2aeb664b5cf7a50b67c1030" args="(const char *db_path)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structlms.html">lms_t</a>* lms_new </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>db_path</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create new Light Media Scanner instance.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>db_path</em> </td><td>path to database file. </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>allocated data on success or NULL on failure. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00121">121</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00087">lms::commit_interval</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00079">lms::cs_conv</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00080">lms::db_path</a>, <a class="el" href="lightmediascanner_8c-source.html#l00037">DEFAULT_COMMIT_INTERVAL</a>, <a class="el" href="lightmediascanner_8c-source.html#l00036">DEFAULT_SLAVE_TIMEOUT</a>, <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00112">lms_charset_conv_free()</a>, <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00101">lms_charset_conv_new()</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00081">lms::slave_timeout</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g7b93a24e73af8b5d46b2507dd70ac588"></a><!-- doxytag: member="lightmediascanner.c::lms_parser_add" ref="g7b93a24e73af8b5d46b2507dd70ac588" args="(lms_t *lms, const char *so_path)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structlms__plugin.html">lms_plugin_t</a>* lms_parser_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>so_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add <a class="el" href="structparser.html">parser</a> plugin given it's shared object path.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>so_path</em> </td><td>path to shared object (usable by dlopen(3)).</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success the LMS handle to plugin is returned, NULL on error. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00221">221</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00088">lms::is_processing</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00071">parser::plugin</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00279">lms_parser_find_and_add()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g1da5e5f834e0289ea49a0fbc2280feda"></a><!-- doxytag: member="lightmediascanner.c::lms_parser_del" ref="g1da5e5f834e0289ea49a0fbc2280feda" args="(lms_t *lms, lms_plugin_t *handle)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_parser_del </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td>
+ <td class="paramname"> <em>handle</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Delete previously added <a class="el" href="structparser.html">parser</a>, making it unavailable for future operations.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00334">334</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00088">lms::is_processing</a>, <a class="el" href="lightmediascanner_8c-source.html#l00294">lms_parser_del_int()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00071">parser::plugin</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g74b81422ff46a46b4b0fc44e8709ecee"></a><!-- doxytag: member="lightmediascanner.c::lms_parser_find_and_add" ref="g74b81422ff46a46b4b0fc44e8709ecee" args="(lms_t *lms, const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structlms__plugin.html">lms_plugin_t</a>* lms_parser_find_and_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>name</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add <a class="el" href="structparser.html">parser</a> plugin given it's name.<p>
+This will look at default plugin path by the file named <code>name</code> (plus the required shared object extension).<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>plugin name.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success the LMS handle to plugin is returned, NULL on error. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00279">279</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner_8c-source.html#l00221">lms_parser_add()</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00073">parser::so_path</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="ge81a028f08139e64e97ac191bd899b32"></a><!-- doxytag: member="lightmediascanner.c::lms_set_commit_interval" ref="ge81a028f08139e64e97ac191bd899b32" args="(lms_t *lms, unsigned int transactions)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_set_commit_interval </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>transactions</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set the number of files served between database transactions.<p>
+This is used as an optimization to database access: doing database commits take some time and can slow things down too much, so you can choose to just commit after <code>transactions</code> files are processed.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>transactions</em> </td><td>number of files (transactions) to process between commits. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00472">472</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00087">lms::commit_interval</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g68ac6273965bdeb25795dd4c50777b4e"></a><!-- doxytag: member="lightmediascanner.c::lms_set_slave_timeout" ref="g68ac6273965bdeb25795dd4c50777b4e" args="(lms_t *lms, int ms)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_set_slave_timeout </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>ms</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set the maximum amount of milliseconds the slave can take to serve one file.<p>
+If a slave takes more than this amount of milliseconds, it will be killed and the scanner will continue with the next file.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>ms</em> </td><td>time in milliseconds. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00427">427</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00081">lms::slave_timeout</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_charset_del",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_charset_conv_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4"];
+}
--- /dev/null
+c1465f4100d586a92059ee1751b73a38
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_parser_del",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_parser_del_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf"];
+}
--- /dev/null
+d49bba44f04377201db3233e34967efb
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_charset_add",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_charset_conv_add",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000"];
+}
--- /dev/null
+6af54acd6fbd829ab48fcc7e7bc2509f
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_parser_find_and_add",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_parser_add",height=0.2,width=0.4,color="black",URL="$group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588"];
+}
--- /dev/null
+53a4009f3dbd67da95e7f946557a359d
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_new",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_charset_conv_free",height=0.2,width=0.4,color="black",URL="$group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_charset_conv_new",height=0.2,width=0.4,color="black",URL="$group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_charset_conv_new_full",height=0.2,width=0.4,color="black",URL="$group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15"];
+}
--- /dev/null
+fc857f49d3593baad7e87ec77fe52d8f
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_free",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_charset_conv_free",height=0.2,width=0.4,color="black",URL="$group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091"];
+}
--- /dev/null
+f5f810d9e9a7f974992ac9e9d9a05153
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Charset Conversion</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Charset Conversion</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_charset_conv </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lms_charset_conv_new_full</a> (int use_check, int use_fallback) GNUC_MALLOC GNUC_WARN_UNUSED_RESULT</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lms_charset_conv_new</a> (void) GNUC_MALLOC GNUC_WARN_UNUSED_RESULT</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lms_charset_conv_free</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#gfc1aad4c212b5fa1ce7280d2b7df3ef7">lms_charset_conv_add</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *charset) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#gc364c502a4a4a64ea9f092a61074a90a">lms_charset_conv_del</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *charset) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#gd843f59abac208048f13437534d589fc">lms_charset_conv</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, char **p_str, unsigned int *p_len) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g9a610040a6380c745277effc5c4c9112">lms_charset_conv_force</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, char **p_str, unsigned int *p_len) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int API <br class="typebreak">
+int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#gbc8903e67c3c7eefa902cbb2bd5e3338">lms_charset_conv_check</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *str, unsigned int len) GNUC_NON_NULL(1</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Utilities to convert strings to UTF-8, the charset used in database. <hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="g50e57a19bb3d062fe7eea437a8b8e949"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_t" ref="g50e57a19bb3d062fe7eea437a8b8e949" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct lms_charset_conv <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8h-source.html#l00072">72</a> of file <a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="gd843f59abac208048f13437534d589fc"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv" ref="gd843f59abac208048f13437534d589fc" args="(lms_charset_conv_t *lcc, char **p_str, unsigned int *p_len) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int API int API int lms_charset_conv </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"> <em>p_str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int * </td>
+ <td class="paramname"> <em>p_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="gfc1aad4c212b5fa1ce7280d2b7df3ef7"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_add" ref="gfc1aad4c212b5fa1ce7280d2b7df3ef7" args="(lms_charset_conv_t *lcc, const char *charset) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_charset_conv_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>charset</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="gbc8903e67c3c7eefa902cbb2bd5e3338"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_check" ref="gbc8903e67c3c7eefa902cbb2bd5e3338" args="(lms_charset_conv_t *lcc, const char *str, unsigned int len) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int API int API int API int API int lms_charset_conv_check </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="gc364c502a4a4a64ea9f092a61074a90a"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_del" ref="gc364c502a4a4a64ea9f092a61074a90a" args="(lms_charset_conv_t *lcc, const char *charset) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int API int lms_charset_conv_del </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>charset</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g9a610040a6380c745277effc5c4c9112"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_force" ref="g9a610040a6380c745277effc5c4c9112" args="(lms_charset_conv_t *lcc, char **p_str, unsigned int *p_len) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int API int API int API int lms_charset_conv_force </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"> <em>p_str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int * </td>
+ <td class="paramname"> <em>p_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g960ce31bca428212abdd60c12b878091"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_free" ref="g960ce31bca428212abdd60c12b878091" args="(lms_charset_conv_t *lcc) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API void lms_charset_conv_free </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Free existing charset conversion tool.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lcc</em> </td><td>existing Light Media Scanner charset conversion. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00112">112</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00121">lms_new()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g0120c222a55e6d7d9bb24300300561ab"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_new" ref="g0120c222a55e6d7d9bb24300300561ab" args="(void) GNUC_MALLOC GNUC_WARN_UNUSED_RESULT" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a>* lms_charset_conv_new </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a new charset conversion tool.<p>
+Conversion tool will try to convert provided strings to UTF-8, just need to register known charsets with <a class="el" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">lms_charset_conv_add()</a> and then call <a class="el" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lms_charset_conv()</a>.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>newly allocated conversion tool or NULL on error. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00101">101</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00047">lms_charset_conv_new_full()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00121">lms_new()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g893421821eacaa0fd2020c872361af15"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_new_full" ref="g893421821eacaa0fd2020c872361af15" args="(int use_check, int use_fallback) GNUC_MALLOC GNUC_WARN_UNUSED_RESULT" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a>* lms_charset_conv_new_full </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>use_check</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>use_fallback</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a new charset conversion tool controlling its behavior.<p>
+Conversion tool will try to convert provided strings to UTF-8, just need to register known charsets with <a class="el" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">lms_charset_conv_add()</a> and then call <a class="el" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lms_charset_conv()</a>.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>newly allocated conversion tool or NULL on error. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00047">47</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00101">lms_charset_conv_new()</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_charset_conv_new",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_charset_conv_new_full",height=0.2,width=0.4,color="black",URL="$group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15"];
+}
--- /dev/null
+d41cafd4886e092014a73b3b2d2588a1
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: DataBase-API</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>DataBase-API</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__gps__info.html">lms_gps_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html">lms_image_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html">lms_audio_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__video__info.html">lms_video_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__playlist__info.html">lms_playlist_info</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_db_image </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_db_audio </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_db_video </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_db_playlist </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lms_db_image_start</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lms_db_image_free</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#gbf78dd3b90caa31e8901369211501200">lms_db_image_add</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi, struct <a class="el" href="structlms__image__info.html">lms_image_info</a> *info) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lms_db_audio_start</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lms_db_audio_free</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g9b83f734ec4905778dec5494f39b7397">lms_db_audio_add</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, struct <a class="el" href="structlms__audio__info.html">lms_audio_info</a> *info) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lms_db_video_start</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lms_db_video_free</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#gb07d1e7fe962486b6e9d00581e8aac19">lms_db_video_add</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv, struct <a class="el" href="structlms__video__info.html">lms_video_info</a> *info) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lms_db_playlist_start</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lms_db_playlist_free</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g8864e532609191f07737c1d23c1bc65f">lms_db_playlist_add</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp, struct <a class="el" href="structlms__playlist__info.html">lms_playlist_info</a> *info) GNUC_NON_NULL(1</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Although Light Media Scanner uses SQLite3 and doesn't try to hide it from plugins/parsers, it does provide some utilities to make development easier and less error prone. <hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="ge13e30aaedfabd6f1eec256649d9bc98"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_audio_t" ref="ge13e30aaedfabd6f1eec256649d9bc98" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct lms_db_audio <a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00097">97</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="gf09fb00e8cf6c7d5f76f257ecdea11a6"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_image_t" ref="gf09fb00e8cf6c7d5f76f257ecdea11a6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct lms_db_image <a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00078">78</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="g9901260afad69e602336a4e567e386c3"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_playlist_t" ref="g9901260afad69e602336a4e567e386c3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct lms_db_playlist <a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00125">125</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="gc2e0d2164f90e1ad3c78e05a4d341ec8"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_video_t" ref="gc2e0d2164f90e1ad3c78e05a4d341ec8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct lms_db_video <a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00111">111</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g9b83f734ec4905778dec5494f39b7397"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_audio_add" ref="g9b83f734ec4905778dec5494f39b7397" args="(lms_db_audio_t *lda, struct lms_audio_info *info) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_audio_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> * </td>
+ <td class="paramname"> <em>lda</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__audio__info.html">lms_audio_info</a> * </td>
+ <td class="paramname"> <em>info</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g7560f9dab2ecd309290d200ea809375d"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_audio_free" ref="g7560f9dab2ecd309290d200ea809375d" args="(lms_db_audio_t *lda) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_audio_free </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> * </td>
+ <td class="paramname"> <em>lda</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Free audio DB access tool.<p>
+Unreference and possible free resources allocated to access tool.<p>
+This is usually called from plugin's <b>finish()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lda</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00402">402</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00437">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00113">lms_db_finalize_stmt()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00297">lms_db_audio_new()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g09c4349148be1bdf02f069f8acb191ee"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_audio_new" ref="g09c4349148be1bdf02f069f8acb191ee" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a>* lms_db_audio_new </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create audio DB access tool.<p>
+Creates or get a reference to tools to access 'audios' table in an optimized and easy way.<p>
+This is usually called from plugin's <b>setup()</b> callback with the <code>db</code> got from <code>ctxt</code>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>db</em> </td><td>database connection.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>DB access tool handle. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00297">297</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00402">lms_db_audio_free()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">lms_db_cache_add()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00462">lms_db_cache_get()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g39731623b0bc5436858820a94487fdc1"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_audio_start" ref="g39731623b0bc5436858820a94487fdc1" args="(lms_db_audio_t *lda) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_audio_start </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> * </td>
+ <td class="paramname"> <em>lda</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Start audio DB access tool.<p>
+Compile SQL statements and other initialization functions.<p>
+This is usually called from plugin's <b>start()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lda</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00341">341</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="gbf78dd3b90caa31e8901369211501200"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_image_add" ref="gbf78dd3b90caa31e8901369211501200" args="(lms_db_image_t *ldi, struct lms_image_info *info) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_image_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> * </td>
+ <td class="paramname"> <em>ldi</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__image__info.html">lms_image_info</a> * </td>
+ <td class="paramname"> <em>info</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g5160a3f620f1ebd562b6ec0add0f65a6"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_image_free" ref="g5160a3f620f1ebd562b6ec0add0f65a6" args="(lms_db_image_t *ldi) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_image_free </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> * </td>
+ <td class="paramname"> <em>ldi</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Free image DB access tool.<p>
+Unreference and possible free resources allocated to access tool.<p>
+This is usually called from plugin's <b>finish()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldi</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__image_8c-source.html#l00193">193</a> of file <a class="el" href="lightmediascanner__db__image_8c-source.html">lightmediascanner_db_image.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00437">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00113">lms_db_finalize_stmt()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__image_8c-source.html#l00117">lms_db_image_new()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g3eac8dbebc0a847b63702e531872e2e7"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_image_new" ref="g3eac8dbebc0a847b63702e531872e2e7" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a>* lms_db_image_new </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create image DB access tool.<p>
+Creates or get a reference to tools to access 'images' table in an optimized and easy way.<p>
+This is usually called from plugin's <b>setup()</b> callback with the <code>db</code> got from <code>ctxt</code>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>db</em> </td><td>database connection.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>DB access tool handle. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__image_8c-source.html#l00117">117</a> of file <a class="el" href="lightmediascanner__db__image_8c-source.html">lightmediascanner_db_image.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00462">lms_db_cache_get()</a>, and <a class="el" href="lightmediascanner__db__image_8c-source.html#l00193">lms_db_image_free()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g66dc91038d76fa96d9feaaa119e2ae56"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_image_start" ref="g66dc91038d76fa96d9feaaa119e2ae56" args="(lms_db_image_t *ldi) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_image_start </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> * </td>
+ <td class="paramname"> <em>ldi</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Start image DB access tool.<p>
+Compile SQL statements and other initialization functions.<p>
+This is usually called from plugin's <b>start()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldi</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__image_8c-source.html#l00161">161</a> of file <a class="el" href="lightmediascanner__db__image_8c-source.html">lightmediascanner_db_image.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g8864e532609191f07737c1d23c1bc65f"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_playlist_add" ref="g8864e532609191f07737c1d23c1bc65f" args="(lms_db_playlist_t *ldp, struct lms_playlist_info *info) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_playlist_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> * </td>
+ <td class="paramname"> <em>ldp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__playlist__info.html">lms_playlist_info</a> * </td>
+ <td class="paramname"> <em>info</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ge0e003fb6c8deccf8c15a7cedb88c789"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_playlist_free" ref="ge0e003fb6c8deccf8c15a7cedb88c789" args="(lms_db_playlist_t *ldp) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_playlist_free </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> * </td>
+ <td class="paramname"> <em>ldp</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Free playlist DB access tool.<p>
+Unreference and possible free resources allocated to access tool.<p>
+This is usually called from plugin's <b>finish()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldp</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00185">185</a> of file <a class="el" href="lightmediascanner__db__playlist_8c-source.html">lightmediascanner_db_playlist.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00437">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00113">lms_db_finalize_stmt()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00111">lms_db_playlist_new()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g379e3bbb3f4a87b1d389df587dec0875"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_playlist_new" ref="g379e3bbb3f4a87b1d389df587dec0875" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a>* lms_db_playlist_new </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create playlist DB access tool.<p>
+Creates or get a reference to tools to access 'playlists' table in an optimized and easy way.<p>
+This is usually called from plugin's <b>setup()</b> callback with the <code>db</code> got from <code>ctxt</code>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>db</em> </td><td>database connection.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>DB access tool handle. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00111">111</a> of file <a class="el" href="lightmediascanner__db__playlist_8c-source.html">lightmediascanner_db_playlist.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00462">lms_db_cache_get()</a>, and <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00185">lms_db_playlist_free()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g9a0ba775eacd1abdc6bfd08c26bbd437"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_playlist_start" ref="g9a0ba775eacd1abdc6bfd08c26bbd437" args="(lms_db_playlist_t *ldp) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_playlist_start </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> * </td>
+ <td class="paramname"> <em>ldp</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Start playlist DB access tool.<p>
+Compile SQL statements and other initialization functions.<p>
+This is usually called from plugin's <b>start()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldp</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00155">155</a> of file <a class="el" href="lightmediascanner__db__playlist_8c-source.html">lightmediascanner_db_playlist.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="gb07d1e7fe962486b6e9d00581e8aac19"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_video_add" ref="gb07d1e7fe962486b6e9d00581e8aac19" args="(lms_db_video_t *ldv, struct lms_video_info *info) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_video_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> * </td>
+ <td class="paramname"> <em>ldv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__video__info.html">lms_video_info</a> * </td>
+ <td class="paramname"> <em>info</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g6be7c0922e76acc29542643424cfeac0"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_video_free" ref="g6be7c0922e76acc29542643424cfeac0" args="(lms_db_video_t *ldv) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_video_free </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> * </td>
+ <td class="paramname"> <em>ldv</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Free video DB access tool.<p>
+Unreference and possible free resources allocated to access tool.<p>
+This is usually called from plugin's <b>finish()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldv</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__video_8c-source.html#l00197">197</a> of file <a class="el" href="lightmediascanner__db__video_8c-source.html">lightmediascanner_db_video.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00437">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00113">lms_db_finalize_stmt()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__video_8c-source.html#l00124">lms_db_video_new()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="ga206178e1f883c1bf7a3281f982109b2"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_video_new" ref="ga206178e1f883c1bf7a3281f982109b2" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a>* lms_db_video_new </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create video DB access tool.<p>
+Creates or get a reference to tools to access 'videos' table in an optimized and easy way.<p>
+This is usually called from plugin's <b>setup()</b> callback with the <code>db</code> got from <code>ctxt</code>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>db</em> </td><td>database connection.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>DB access tool handle. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__video_8c-source.html#l00124">124</a> of file <a class="el" href="lightmediascanner__db__video_8c-source.html">lightmediascanner_db_video.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00462">lms_db_cache_get()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00197">lms_db_video_free()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="g0ebc0dd37b1c9bcaf7741231a411ade2"></a><!-- doxytag: member="lightmediascanner_db.h::lms_db_video_start" ref="g0ebc0dd37b1c9bcaf7741231a411ade2" args="(lms_db_video_t *ldv) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_db_video_start </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> * </td>
+ <td class="paramname"> <em>ldv</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Start video DB access tool.<p>
+Compile SQL statements and other initialization functions.<p>
+This is usually called from plugin's <b>start()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldv</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__video_8c-source.html#l00168">168</a> of file <a class="el" href="lightmediascanner__db__video_8c-source.html">lightmediascanner_db_video.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_audio_new",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_audio_free",height=0.2,width=0.4,color="black",URL="$group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_cache_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0"];
+ Node2 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lms_db_cache_add",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04"];
+ Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lms_db_cache_get",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3"];
+}
--- /dev/null
+715dce3d4043b5df4f55c61584d34fe7
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_video_start",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+e99557883889bb3219c753f7d39b9ae4
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_playlist_new",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_cache_add",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_cache_get",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_playlist_free",height=0.2,width=0.4,color="black",URL="$group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789"];
+ Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lms_db_cache_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0"];
+ Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+}
--- /dev/null
+1ddd68957b34f9aa58441ba7b05d067c
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_audio_start",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+b752c53558785d91f62cb6f45921ae44
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_image_new",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_cache_add",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_cache_get",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_image_free",height=0.2,width=0.4,color="black",URL="$group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6"];
+ Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lms_db_cache_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0"];
+ Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+}
--- /dev/null
+ce7412eb280b1d449e9612b4fcf71726
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_image_free",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_cache_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+}
--- /dev/null
+96732aef82064dcb9942de2d0d86f632
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_image_start",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+93723aa5812aaf52c1d8f179eb23d3f1
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_video_free",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_cache_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+}
--- /dev/null
+e60e5af762901b1939a963e0b229c6ce
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_audio_free",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_cache_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+}
--- /dev/null
+976f2cbc002d8eb854a9ea13afae4d20
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_playlist_start",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+63c4a37d581fb662f57ac25962d65f5b
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_video_new",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_cache_add",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_cache_get",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_video_free",height=0.2,width=0.4,color="black",URL="$group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0"];
+ Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lms_db_cache_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0"];
+ Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+}
--- /dev/null
+9aa83f1a22652fba49ec7d366c8cc14f
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_playlist_free",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_cache_del",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+}
--- /dev/null
+9d951140514630d96a26196cbeffe7bd
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Plugins-API</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Plugins-API</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+Copyright (C) 2008 by ProFUSION 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:barbieri@profusion.mobi">barbieri@profusion.mobi</a>></dd></dl>
+Plugins should implement the following call that provides required callbacks (see <a class="el" href="lightmediascanner__plugin_8h.html">lightmediascanner_plugin.h</a>):<p>
+<div class="fragment"><pre class="fragment"> <span class="keyword">struct </span><a class="code" href="structlms__plugin.html">lms_plugin</a> *lms_plugin_open(<span class="keywordtype">void</span>)
+ const struct <a class="code" href="structlms__plugin__info.html">lms_plugin_info</a> *<a class="code" href="structlms__plugin__info.html">lms_plugin_info</a>(<span class="keywordtype">void</span>)
+</pre></div><p>
+where:<p>
+<div class="fragment"><pre class="fragment"> <span class="keyword">struct </span><a class="code" href="structlms__plugin.html">lms_plugin</a> {
+ <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">name</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">lms_plugin_match_fn_t</a> <a class="code" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">match</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lms_plugin_parse_fn_t</a> <a class="code" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">parse</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lms_plugin_close_fn_t</a> <a class="code" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">close</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lms_plugin_setup_fn_t</a> <a class="code" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">setup</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lms_plugin_start_fn_t</a> <a class="code" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">start</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lms_plugin_finish_fn_t</a> <a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">finish</a>;
+ };
+
+
+ <span class="keyword">struct </span><a class="code" href="structlms__plugin__info.html">lms_plugin_info</a> {
+ <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">name</a>;
+ <span class="keyword">const</span> <span class="keywordtype">char</span> *category;
+ <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">description</a>;
+ <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">version</a>;
+ <span class="keyword">const</span> <span class="keywordtype">char</span> *author;
+ <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">uri</a>;
+ };
+</pre></div><p>
+Users can add their own data to the end of this data structure. Callbacks and their meanings are:<p>
+<div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> *match(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p,
+ <span class="keyword">const</span> <span class="keywordtype">char</span> *path,
+ <span class="keywordtype">int</span> len,
+ <span class="keywordtype">int</span> base)
+</pre></div><p>
+Given the file 'path' of 'len' bytes, with base name starting at 'base' bytes offset inside 'path', return a match. Non-NULL values means it matched, and this return will be given to parse() function so any match-time analysis can be reused. This function will be used in the slave process.<p>
+<div class="fragment"><pre class="fragment"> <span class="keywordtype">int</span> parse(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p,
+ <span class="keyword">struct</span> <a class="code" href="structlms__context.html">lms_context</a> *ctxt,
+ <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo,
+ <span class="keywordtype">void</span> *match)
+</pre></div><p>
+Given the parsing context 'ctxt' (contains DB connection, charset conversion pointers and possible more), parse the file information 'finfo' using the previously matched data 'match'. This should return 0 on success or other value for errors. This will be used in the slave process.<p>
+<div class="fragment"><pre class="fragment"> <span class="keywordtype">int</span> close(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p)
+</pre></div><p>
+Closes the plugin returned by lms_plugin_open(), this will run on the master process.<p>
+<div class="fragment"><pre class="fragment"> <span class="keywordtype">int</span> setup(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p, <span class="keyword">struct</span> <a class="code" href="structlms__context.html">lms_context</a> *ctxt)
+</pre></div><p>
+Prepare <a class="el" href="structparser.html">parser</a> to be executed. This is the first phase of plugin initialization on the slave process, it should create database tables and like, after this function is called, no database schema changes are allowed!<p>
+<div class="fragment"><pre class="fragment"> <span class="keywordtype">int</span> start(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p, <span class="keyword">struct</span> <a class="code" href="structlms__context.html">lms_context</a> *ctxt)
+</pre></div><p>
+This is the second phase of plugin initialization on the slave process. At this point, all database tables should exist and database schema will not be changed anymore, so one can use this phase to compile SQL statements for future use.<p>
+<div class="fragment"><pre class="fragment"> <span class="keywordtype">int</span> finish(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p, <span class="keyword">struct</span> <a class="code" href="structlms__context.html">lms_context</a> *ctxt)
+</pre></div><p>
+Finishes the plugin on slave process.<p>
+Although LMS doesn't place any restrictions on what plugins can do and how they store information, it's good to have standard tables and easy way to store data on them. For this task we provide <a class="el" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a> with functions to add audios, images, videos, playlists and possible more. Use should be pretty straightforward, see existing plugins to see usage examples. </div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Light Media Scanner Documentation</h1>
+<p>
+<h3 align="center">0.1 </h3>Copyright (C) 2008 by ProFUSION embedded systems Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:barbieri@profusion.mobi">barbieri@profusion.mobi</a>> <p>
+Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>></dd></dl>
+The architecture is based on 2 processes that cooperate, the first is the driver, that controls the behavior of the worker/slave process, that does the hard work. This slave process is meant to make the software more robust since some <a class="el" href="structparser.html">parser</a> libraries and even user-provided media is not reliable, so if for some reason the worker process freezes, it's killed and then restarted with the next item.<p>
+User API is quite simple, with means to add new charsets to be tried and new parsers to handle media. The most important functions are (see <a class="el" href="lightmediascanner_8h.html">lightmediascanner.h</a>):<p>
+<ul>
+<li>int <a class="el" href="lightmediascanner__process_8c.html#c2f07fb73717514237862c98dbf023b2">lms_process(lms_t *lms, const char *top_path)</a></li><li>int <a class="el" href="lightmediascanner__check_8c.html#859492d896e816498edb471315efced1">lms_check(lms_t *lms, const char *top_path)</a></li></ul>
+<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>The whole library follows libC standard of "0 (zero) means success", unless explicitly stated (usually boolean queries where no error is possible/interesting).</dd></dl>
+The first will walk all the files and children directories of top_path, check if files are handled by some <a class="el" href="structparser.html">parser</a> and if they're, they'll be parsed and registered in the data base.<p>
+The second will get all already registered media in data base that is located at top_path and see if they're still up to date, deleted or changed. If they were deleted, a flag is set on data base with current time, so it can be expired at some point. If they were marked as deleted, but are not present again, check if the state is still valid (mtime, size), so we can avoid re-parse of removable media. If the file was present and is still present, just check if its properties (mtime, size) are still the same, if not trigger re-parse.<p>
+Parsers are handled as shared object plugins, they can be added without modification to the core, see the plugins API later in this document. Since the core have no control over plugins, they can register data as they want, but since some utilities are provided, we expect that the given data base tables are used:<p>
+<ul>
+<li><b>files:</b> known files.<ul>
+<li>id: identification inside LMS/DB.</li><li>path: file path.</li><li>mtime: modification time, in seconds from UNIX epoch.</li><li>dtime: modification time, in seconds from UNIX epoch.</li><li>size: in bytes.</li></ul>
+</li><li><b>audios:</b> audio files.<ul>
+<li>id: same as files.id</li><li>title: audio title.</li><li>album_id: same as audio_albums.id.</li><li>artist_id: same as audio_artists.id.</li><li>genre_id: same as audio_genres.id.</li><li>trackno: track number.</li><li>rating: rating.</li><li>playcnt: play count.</li></ul>
+</li><li><b>audio_artists:</b> audio artists.<ul>
+<li>id: identification inside LMS/DB.</li><li>name: artist name.</li></ul>
+</li><li><b>audio_albums:</b> audio albums.<ul>
+<li>id: identification inside LMS/DB.</li><li>artist_id: same as audio_artists.id.</li><li>name: album name.</li></ul>
+</li><li><b>audio_genres:</b> audio genres.<ul>
+<li>id: identification inside LMS/DB.</li><li>name: genre name.</li></ul>
+</li><li><b>playlists:</b> playlists.<ul>
+<li>id: identification inside LMS/DB.</li><li>title: playlists title.</li><li>n_entries: number of entries in this playlist.</li></ul>
+</li><li><b>images:</b> image files.<ul>
+<li>id: identification inside LMS/DB.</li><li>title: image title.</li><li>artist: image creator or artirst or photographer or ...</li><li>date: image taken date or creation date or ...</li><li>width: image width.</li><li>height: image height.</li><li>orientation: image orientation.</li><li>gps_lat: GPS latitude.</li><li>gps_long: GPS longitude.</li><li>gps_alt: GPS altitude.</li></ul>
+</li><li><b>videos:</b> video files.<ul>
+<li>id: identification inside LMS/DB.</li><li>title: video title.</li><li>artist: video artist or creator or producer or ... </li></ul>
+</li></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner.c</h1><a href="lightmediascanner_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include "config.h"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#endif</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include <dlfcn.h></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include <string.h></span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include <dirent.h></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include <errno.h></span>
+<a name="l00031"></a>00031
+<a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="lightmediascanner_8h.html">lightmediascanner.h</a>"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__private_8h.html">lightmediascanner_private.h</a>"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__plugin_8h.html">lightmediascanner_plugin.h</a>"</span>
+<a name="l00035"></a>00035
+<a name="l00036"></a><a class="code" href="lightmediascanner_8c.html#c2843894cca63ec0089c381e69d1d81a">00036</a> <span class="preprocessor">#define DEFAULT_SLAVE_TIMEOUT 1000</span>
+<a name="l00037"></a><a class="code" href="lightmediascanner_8c.html#6d0480dc76aba4a2291d79ac2466fc59">00037</a> <span class="preprocessor"></span><span class="preprocessor">#define DEFAULT_COMMIT_INTERVAL 100</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+<a name="l00039"></a>00039 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00040"></a>00040 _parser_load(<span class="keyword">struct</span> <a class="code" href="structparser.html">parser</a> *p, <span class="keyword">const</span> <span class="keywordtype">char</span> *so_path)
+<a name="l00041"></a>00041 {
+<a name="l00042"></a>00042 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *(*plugin_open)(void);
+<a name="l00043"></a>00043 <span class="keywordtype">char</span> *errmsg;
+<a name="l00044"></a>00044
+<a name="l00045"></a>00045 memset(p, 0, <span class="keyword">sizeof</span>(*p));
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047 p-><a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a> = dlopen(so_path, RTLD_NOW | RTLD_LOCAL);
+<a name="l00048"></a>00048 errmsg = dlerror();
+<a name="l00049"></a>00049 <span class="keywordflow">if</span> (errmsg) {
+<a name="l00050"></a>00050 fprintf(stderr, <span class="stringliteral">"ERROR: could not dlopen() %s\n"</span>, errmsg);
+<a name="l00051"></a>00051 <span class="keywordflow">return</span> -1;
+<a name="l00052"></a>00052 }
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 plugin_open = dlsym(p-><a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a>, <span class="stringliteral">"lms_plugin_open"</span>);
+<a name="l00055"></a>00055 errmsg = dlerror();
+<a name="l00056"></a>00056 <span class="keywordflow">if</span> (errmsg) {
+<a name="l00057"></a>00057 fprintf(stderr, <span class="stringliteral">"ERROR: could not find plugin entry point %s\n"</span>,
+<a name="l00058"></a>00058 errmsg);
+<a name="l00059"></a>00059 <span class="keywordflow">return</span> -2;
+<a name="l00060"></a>00060 }
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a> = strdup(so_path);
+<a name="l00063"></a>00063 <span class="keywordflow">if</span> (!p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>) {
+<a name="l00064"></a>00064 perror(<span class="stringliteral">"strdup"</span>);
+<a name="l00065"></a>00065 <span class="keywordflow">return</span> -3;
+<a name="l00066"></a>00066 }
+<a name="l00067"></a>00067
+<a name="l00068"></a>00068 p-><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a> = plugin_open();
+<a name="l00069"></a>00069 <span class="keywordflow">if</span> (!p-><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>) {
+<a name="l00070"></a>00070 fprintf(stderr, <span class="stringliteral">"ERROR: plugin \"%s\" failed to init.\n"</span>, so_path);
+<a name="l00071"></a>00071 <span class="keywordflow">return</span> -4;
+<a name="l00072"></a>00072 }
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <span class="keywordflow">return</span> 0;
+<a name="l00075"></a>00075 }
+<a name="l00076"></a>00076
+<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00078"></a>00078 _parser_unload(<span class="keyword">struct</span> <a class="code" href="structparser.html">parser</a> *p)
+<a name="l00079"></a>00079 {
+<a name="l00080"></a>00080 <span class="keywordtype">int</span> r;
+<a name="l00081"></a>00081
+<a name="l00082"></a>00082 r = 0;
+<a name="l00083"></a>00083 <span class="keywordflow">if</span> (p-><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>) {
+<a name="l00084"></a>00084 <span class="keywordflow">if</span> (p-><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>-><a class="code" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">close</a>(p-><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>) != 0) {
+<a name="l00085"></a>00085 fprintf(stderr, <span class="stringliteral">"ERROR: plugin \"%s\" failed to deinit.\n"</span>,
+<a name="l00086"></a>00086 p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>);
+<a name="l00087"></a>00087 r -= 1;
+<a name="l00088"></a>00088 }
+<a name="l00089"></a>00089 }
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091 <span class="keywordflow">if</span> (p-><a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a>) {
+<a name="l00092"></a>00092 <span class="keywordtype">char</span> *errmsg;
+<a name="l00093"></a>00093
+<a name="l00094"></a>00094 dlclose(p-><a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a>);
+<a name="l00095"></a>00095 errmsg = dlerror();
+<a name="l00096"></a>00096 <span class="keywordflow">if</span> (errmsg) {
+<a name="l00097"></a>00097 fprintf(stderr, <span class="stringliteral">"ERROR: could not dlclose() plugin \"%s\": %s\n"</span>,
+<a name="l00098"></a>00098 errmsg, p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>);
+<a name="l00099"></a>00099 r -= 1;
+<a name="l00100"></a>00100 }
+<a name="l00101"></a>00101 }
+<a name="l00102"></a>00102
+<a name="l00103"></a>00103 <span class="keywordflow">if</span> (p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>)
+<a name="l00104"></a>00104 free(p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>);
+<a name="l00105"></a>00105
+<a name="l00106"></a>00106 <span class="keywordflow">return</span> r;
+<a name="l00107"></a>00107 }
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 <span class="comment">/***********************************************************************</span>
+<a name="l00111"></a>00111 <span class="comment"> * Public API.</span>
+<a name="l00112"></a>00112 <span class="comment"> ***********************************************************************/</span>
+<a name="l00120"></a>00120 <a class="code" href="structlms.html">lms_t</a> *
+<a name="l00121"></a><a class="code" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">00121</a> <a class="code" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lms_new</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *db_path)
+<a name="l00122"></a>00122 {
+<a name="l00123"></a>00123 <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>;
+<a name="l00124"></a>00124
+<a name="l00125"></a>00125 lms = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structlms.html">lms_t</a>));
+<a name="l00126"></a>00126 <span class="keywordflow">if</span> (!lms) {
+<a name="l00127"></a>00127 perror(<span class="stringliteral">"calloc"</span>);
+<a name="l00128"></a>00128 <span class="keywordflow">return</span> NULL;
+<a name="l00129"></a>00129 }
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 lms-><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a> = <a class="code" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lms_charset_conv_new</a>();
+<a name="l00132"></a>00132 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a>) {
+<a name="l00133"></a>00133 free(lms);
+<a name="l00134"></a>00134 <span class="keywordflow">return</span> NULL;
+<a name="l00135"></a>00135 }
+<a name="l00136"></a>00136
+<a name="l00137"></a>00137 lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a> = <a class="code" href="lightmediascanner_8c.html#6d0480dc76aba4a2291d79ac2466fc59">DEFAULT_COMMIT_INTERVAL</a>;
+<a name="l00138"></a>00138 lms-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a> = <a class="code" href="lightmediascanner_8c.html#c2843894cca63ec0089c381e69d1d81a">DEFAULT_SLAVE_TIMEOUT</a>;
+<a name="l00139"></a>00139 lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a> = strdup(db_path);
+<a name="l00140"></a>00140 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>) {
+<a name="l00141"></a>00141 perror(<span class="stringliteral">"strdup"</span>);
+<a name="l00142"></a>00142 <a class="code" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lms_charset_conv_free</a>(lms-><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a>);
+<a name="l00143"></a>00143 free(lms);
+<a name="l00144"></a>00144 <span class="keywordflow">return</span> NULL;
+<a name="l00145"></a>00145 }
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 <span class="keywordflow">return</span> lms;
+<a name="l00148"></a>00148 }
+<a name="l00149"></a>00149
+<a name="l00158"></a>00158 <span class="keywordtype">int</span>
+<a name="l00159"></a><a class="code" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">00159</a> <a class="code" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lms_free</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>)
+<a name="l00160"></a>00160 {
+<a name="l00161"></a>00161 <span class="keywordtype">int</span> i;
+<a name="l00162"></a>00162
+<a name="l00163"></a>00163 <span class="keywordflow">if</span> (!lms)
+<a name="l00164"></a>00164 <span class="keywordflow">return</span> 0;
+<a name="l00165"></a>00165
+<a name="l00166"></a>00166 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>)
+<a name="l00167"></a>00167 <span class="keywordflow">return</span> -1;
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00170"></a>00170 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++)
+<a name="l00171"></a>00171 _parser_unload(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> + i);
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 free(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>);
+<a name="l00174"></a>00174 }
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a> && lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">free_data</a>)
+<a name="l00177"></a>00177 lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">free_data</a>(lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a>);
+<a name="l00178"></a>00178
+<a name="l00179"></a>00179 free(lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00180"></a>00180 <a class="code" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lms_charset_conv_free</a>(lms-><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a>);
+<a name="l00181"></a>00181 free(lms);
+<a name="l00182"></a>00182 <span class="keywordflow">return</span> 0;
+<a name="l00183"></a>00183 }
+<a name="l00184"></a>00184
+<a name="l00194"></a>00194 <span class="keywordtype">void</span>
+<a name="l00195"></a><a class="code" href="lightmediascanner_8h.html#d2da241599f7f576670d64184f972c43">00195</a> <a class="code" href="lightmediascanner_8c.html#668e706f6d5eae3ba5e36ff4db2ae514">lms_set_progress_callback</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <a class="code" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> cb, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, <a class="code" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> free_data)
+<a name="l00196"></a>00196 {
+<a name="l00197"></a>00197 <span class="keywordflow">if</span> (!lms) {
+<a name="l00198"></a>00198 <span class="keywordflow">if</span> (data && free_data)
+<a name="l00199"></a>00199 free_data((<span class="keywordtype">void</span> *)data);
+<a name="l00200"></a>00200 <span class="keywordflow">return</span>;
+<a name="l00201"></a>00201 }
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a> && lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">free_data</a>)
+<a name="l00204"></a>00204 lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">free_data</a>(lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a>);
+<a name="l00205"></a>00205
+<a name="l00206"></a>00206 lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#94615d22fba40d580a8a0055d28221c4">cb</a> = cb;
+<a name="l00207"></a>00207 lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a> = (<span class="keywordtype">void</span> *)data;
+<a name="l00208"></a>00208 lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">free_data</a> = free_data;
+<a name="l00209"></a>00209 }
+<a name="l00210"></a>00210
+<a name="l00220"></a>00220 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *
+<a name="l00221"></a><a class="code" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">00221</a> <a class="code" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lms_parser_add</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *so_path)
+<a name="l00222"></a>00222 {
+<a name="l00223"></a>00223 <span class="keyword">struct </span><a class="code" href="structparser.html">parser</a> *<a class="code" href="structparser.html">parser</a>;
+<a name="l00224"></a>00224
+<a name="l00225"></a>00225 <span class="keywordflow">if</span> (!lms)
+<a name="l00226"></a>00226 <span class="keywordflow">return</span> NULL;
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 <span class="keywordflow">if</span> (!so_path)
+<a name="l00229"></a>00229 <span class="keywordflow">return</span> NULL;
+<a name="l00230"></a>00230
+<a name="l00231"></a>00231 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>) {
+<a name="l00232"></a>00232 fprintf(stderr, <span class="stringliteral">"ERROR: do not add parsers while it's processing.\n"</span>);
+<a name="l00233"></a>00233 <span class="keywordflow">return</span> NULL;
+<a name="l00234"></a>00234 }
+<a name="l00235"></a>00235
+<a name="l00236"></a>00236 lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> = realloc(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>,
+<a name="l00237"></a>00237 (lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> + 1) * <span class="keyword">sizeof</span>(<span class="keyword">struct</span> parser));
+<a name="l00238"></a>00238 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00239"></a>00239 perror(<span class="stringliteral">"realloc"</span>);
+<a name="l00240"></a>00240 <span class="keywordflow">return</span> NULL;
+<a name="l00241"></a>00241 }
+<a name="l00242"></a>00242
+<a name="l00243"></a>00243 parser = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> + lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>;
+<a name="l00244"></a>00244 <span class="keywordflow">if</span> (_parser_load(parser, so_path) != 0) {
+<a name="l00245"></a>00245 _parser_unload(parser);
+<a name="l00246"></a>00246 <span class="keywordflow">return</span> NULL;
+<a name="l00247"></a>00247 }
+<a name="l00248"></a>00248
+<a name="l00249"></a>00249 lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>++;
+<a name="l00250"></a>00250 <span class="keywordflow">return</span> parser-><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>;
+<a name="l00251"></a>00251 }
+<a name="l00252"></a>00252
+<a name="l00253"></a>00253 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00254"></a>00254 lms_parser_find(<span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> buf_size, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
+<a name="l00255"></a>00255 {
+<a name="l00256"></a>00256 <span class="keywordtype">int</span> r;
+<a name="l00257"></a>00257
+<a name="l00258"></a>00258 r = snprintf(buf, buf_size, <span class="stringliteral">"%s/%s.so"</span>, PLUGINSDIR, name);
+<a name="l00259"></a>00259 <span class="keywordflow">if</span> (r >= buf_size)
+<a name="l00260"></a>00260 <span class="keywordflow">return</span> 0;
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 <span class="keywordflow">return</span> 1;
+<a name="l00263"></a>00263 }
+<a name="l00264"></a>00264
+<a name="l00265"></a>00265
+<a name="l00278"></a>00278 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *
+<a name="l00279"></a><a class="code" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">00279</a> <a class="code" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lms_parser_find_and_add</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
+<a name="l00280"></a>00280 {
+<a name="l00281"></a>00281 <span class="keywordtype">char</span> <a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>[PATH_MAX];
+<a name="l00282"></a>00282
+<a name="l00283"></a>00283 <span class="keywordflow">if</span> (!lms)
+<a name="l00284"></a>00284 <span class="keywordflow">return</span> NULL;
+<a name="l00285"></a>00285 <span class="keywordflow">if</span> (!name)
+<a name="l00286"></a>00286 <span class="keywordflow">return</span> NULL;
+<a name="l00287"></a>00287
+<a name="l00288"></a>00288 <span class="keywordflow">if</span> (!lms_parser_find(so_path, <span class="keyword">sizeof</span>(so_path), name))
+<a name="l00289"></a>00289 <span class="keywordflow">return</span> NULL;
+<a name="l00290"></a>00290 <span class="keywordflow">return</span> <a class="code" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lms_parser_add</a>(lms, so_path);
+<a name="l00291"></a>00291 }
+<a name="l00292"></a>00292
+<a name="l00293"></a>00293 <span class="keywordtype">int</span>
+<a name="l00294"></a><a class="code" href="lightmediascanner__private_8h.html#239fc535d2f20f09eeec9df86aa6ef9b">00294</a> <a class="code" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lms_parser_del_int</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keywordtype">int</span> i)
+<a name="l00295"></a>00295 {
+<a name="l00296"></a>00296 <span class="keyword">struct </span><a class="code" href="structparser.html">parser</a> *<a class="code" href="structparser.html">parser</a>;
+<a name="l00297"></a>00297
+<a name="l00298"></a>00298 parser = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> + i;
+<a name="l00299"></a>00299 _parser_unload(parser);
+<a name="l00300"></a>00300 lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>--;
+<a name="l00301"></a>00301
+<a name="l00302"></a>00302 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> == 0) {
+<a name="l00303"></a>00303 free(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>);
+<a name="l00304"></a>00304 lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> = NULL;
+<a name="l00305"></a>00305 <span class="keywordflow">return</span> 0;
+<a name="l00306"></a>00306 } <span class="keywordflow">else</span> {
+<a name="l00307"></a>00307 <span class="keywordtype">int</span> dif;
+<a name="l00308"></a>00308
+<a name="l00309"></a>00309 dif = lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> - i;
+<a name="l00310"></a>00310 <span class="keywordflow">if</span> (dif)
+<a name="l00311"></a>00311 lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> = memmove(parser, parser + 1,
+<a name="l00312"></a>00312 dif * <span class="keyword">sizeof</span>(<span class="keyword">struct</span> parser));
+<a name="l00313"></a>00313
+<a name="l00314"></a>00314 lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> = realloc(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>,
+<a name="l00315"></a>00315 lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> * <span class="keyword">sizeof</span>(<span class="keyword">struct</span> parser));
+<a name="l00316"></a>00316 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00317"></a>00317 lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> = 0;
+<a name="l00318"></a>00318 <span class="keywordflow">return</span> -1;
+<a name="l00319"></a>00319 }
+<a name="l00320"></a>00320
+<a name="l00321"></a>00321 <span class="keywordflow">return</span> 0;
+<a name="l00322"></a>00322 }
+<a name="l00323"></a>00323 }
+<a name="l00324"></a>00324
+<a name="l00333"></a>00333 <span class="keywordtype">int</span>
+<a name="l00334"></a><a class="code" href="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">00334</a> <a class="code" href="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">lms_parser_del</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *handle)
+<a name="l00335"></a>00335 {
+<a name="l00336"></a>00336 <span class="keywordtype">int</span> i;
+<a name="l00337"></a>00337
+<a name="l00338"></a>00338 <span class="keywordflow">if</span> (!lms)
+<a name="l00339"></a>00339 <span class="keywordflow">return</span> -1;
+<a name="l00340"></a>00340 <span class="keywordflow">if</span> (!handle)
+<a name="l00341"></a>00341 <span class="keywordflow">return</span> -2;
+<a name="l00342"></a>00342 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>)
+<a name="l00343"></a>00343 <span class="keywordflow">return</span> -3;
+<a name="l00344"></a>00344 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>) {
+<a name="l00345"></a>00345 fprintf(stderr, <span class="stringliteral">"ERROR: do not del parsers while it's processing.\n"</span>);
+<a name="l00346"></a>00346 <span class="keywordflow">return</span> -4;
+<a name="l00347"></a>00347 }
+<a name="l00348"></a>00348
+<a name="l00349"></a>00349 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++)
+<a name="l00350"></a>00350 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>[i].<a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a> == handle)
+<a name="l00351"></a>00351 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lms_parser_del_int</a>(lms, i);
+<a name="l00352"></a>00352
+<a name="l00353"></a>00353 <span class="keywordflow">return</span> -3;
+<a name="l00354"></a>00354 }
+<a name="l00355"></a>00355
+<a name="l00365"></a>00365 <span class="keywordtype">int</span>
+<a name="l00366"></a><a class="code" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">00366</a> <a class="code" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lms_is_processing</a>(<span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>)
+<a name="l00367"></a>00367 {
+<a name="l00368"></a>00368 <span class="keywordflow">if</span> (!lms) {
+<a name="l00369"></a>00369 fprintf(stderr, <span class="stringliteral">"ERROR: lms_is_processing(NULL)\n"</span>);
+<a name="l00370"></a>00370 <span class="keywordflow">return</span> -1;
+<a name="l00371"></a>00371 }
+<a name="l00372"></a>00372
+<a name="l00373"></a>00373 <span class="keywordflow">return</span> lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>;
+<a name="l00374"></a>00374 }
+<a name="l00375"></a>00375
+<a name="l00384"></a>00384 <span class="keyword">const</span> <span class="keywordtype">char</span> *
+<a name="l00385"></a><a class="code" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">00385</a> <a class="code" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lms_get_db_path</a>(<span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>)
+<a name="l00386"></a>00386 {
+<a name="l00387"></a>00387 <span class="keywordflow">if</span> (!lms) {
+<a name="l00388"></a>00388 fprintf(stderr, <span class="stringliteral">"ERROR: lms_get_db_path(NULL)\n"</span>);
+<a name="l00389"></a>00389 <span class="keywordflow">return</span> NULL;
+<a name="l00390"></a>00390 }
+<a name="l00391"></a>00391
+<a name="l00392"></a>00392 <span class="keywordflow">return</span> lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>;
+<a name="l00393"></a>00393 }
+<a name="l00394"></a>00394
+<a name="l00406"></a>00406 <span class="keywordtype">int</span>
+<a name="l00407"></a><a class="code" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">00407</a> <a class="code" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lms_get_slave_timeout</a>(<span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>)
+<a name="l00408"></a>00408 {
+<a name="l00409"></a>00409 <span class="keywordflow">if</span> (!lms) {
+<a name="l00410"></a>00410 fprintf(stderr, <span class="stringliteral">"ERROR: lms_get_slave_timeout(NULL)\n"</span>);
+<a name="l00411"></a>00411 <span class="keywordflow">return</span> -1;
+<a name="l00412"></a>00412 }
+<a name="l00413"></a>00413
+<a name="l00414"></a>00414 <span class="keywordflow">return</span> lms-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>;
+<a name="l00415"></a>00415 }
+<a name="l00416"></a>00416
+<a name="l00427"></a><a class="code" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">00427</a> <span class="keywordtype">void</span> <a class="code" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lms_set_slave_timeout</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keywordtype">int</span> ms)
+<a name="l00428"></a>00428 {
+<a name="l00429"></a>00429 <span class="keywordflow">if</span> (!lms) {
+<a name="l00430"></a>00430 fprintf(stderr, <span class="stringliteral">"ERROR: lms_set_slave_timeout(NULL, %d)\n"</span>, ms);
+<a name="l00431"></a>00431 <span class="keywordflow">return</span>;
+<a name="l00432"></a>00432 }
+<a name="l00433"></a>00433
+<a name="l00434"></a>00434 lms-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a> = ms;
+<a name="l00435"></a>00435 }
+<a name="l00436"></a>00436
+<a name="l00448"></a>00448 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00449"></a><a class="code" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">00449</a> <a class="code" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lms_get_commit_interval</a>(<span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>)
+<a name="l00450"></a>00450 {
+<a name="l00451"></a>00451 <span class="keywordflow">if</span> (!lms) {
+<a name="l00452"></a>00452 fprintf(stderr, <span class="stringliteral">"ERROR: lms_get_commit_interval(NULL)\n"</span>);
+<a name="l00453"></a>00453 <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)-1;
+<a name="l00454"></a>00454 }
+<a name="l00455"></a>00455
+<a name="l00456"></a>00456 <span class="keywordflow">return</span> lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>;
+<a name="l00457"></a>00457 }
+<a name="l00458"></a>00458
+<a name="l00471"></a>00471 <span class="keywordtype">void</span>
+<a name="l00472"></a><a class="code" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">00472</a> <a class="code" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lms_set_commit_interval</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> transactions)
+<a name="l00473"></a>00473 {
+<a name="l00474"></a>00474 <span class="keywordflow">if</span> (!lms) {
+<a name="l00475"></a>00475 fprintf(stderr, <span class="stringliteral">"ERROR: lms_set_commit_interval(NULL, %u)\n"</span>,
+<a name="l00476"></a>00476 transactions);
+<a name="l00477"></a>00477 <span class="keywordflow">return</span>;
+<a name="l00478"></a>00478 }
+<a name="l00479"></a>00479
+<a name="l00480"></a>00480 lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a> = transactions;
+<a name="l00481"></a>00481 }
+<a name="l00482"></a>00482
+<a name="l00495"></a>00495 <span class="keywordtype">int</span>
+<a name="l00496"></a><a class="code" href="group__LMS__API.html#g4fd56e209d415b27466274726cc7d59f">00496</a> <a class="code" href="group__LMS__API.html#g4fd56e209d415b27466274726cc7d59f">lms_charset_add</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset)
+<a name="l00497"></a>00497 {
+<a name="l00498"></a>00498 <span class="keywordflow">if</span> (!lms) {
+<a name="l00499"></a>00499 fprintf(stderr, <span class="stringliteral">"ERROR: lms_charset_add(NULL)\n"</span>);
+<a name="l00500"></a>00500 <span class="keywordflow">return</span> -1;
+<a name="l00501"></a>00501 }
+<a name="l00502"></a>00502
+<a name="l00503"></a>00503 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">lms_charset_conv_add</a>(lms-><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a>, charset);
+<a name="l00504"></a>00504 }
+<a name="l00505"></a>00505
+<a name="l00518"></a>00518 <span class="keywordtype">int</span>
+<a name="l00519"></a><a class="code" href="group__LMS__API.html#g0b427b8b60957e29a0e504c10c5356b0">00519</a> <a class="code" href="group__LMS__API.html#g0b427b8b60957e29a0e504c10c5356b0">lms_charset_del</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset)
+<a name="l00520"></a>00520 {
+<a name="l00521"></a>00521 <span class="keywordflow">if</span> (!lms) {
+<a name="l00522"></a>00522 fprintf(stderr, <span class="stringliteral">"ERROR: lms_charset_del(NULL)\n"</span>);
+<a name="l00523"></a>00523 <span class="keywordflow">return</span> -1;
+<a name="l00524"></a>00524 }
+<a name="l00525"></a>00525
+<a name="l00526"></a>00526 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">lms_charset_conv_del</a>(lms-><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a>, charset);
+<a name="l00527"></a>00527 }
+<a name="l00528"></a>00528
+<a name="l00539"></a>00539 <span class="keywordtype">void</span>
+<a name="l00540"></a><a class="code" href="lightmediascanner_8h.html#ebe19263efa873f4629a18e77924bfaf">00540</a> <a class="code" href="lightmediascanner_8c.html#7e27ccbd0abfd5d112586a00fd424db9">lms_parsers_list</a>(<span class="keywordtype">int</span> (*cb)(<span class="keywordtype">void</span> *data, <span class="keyword">const</span> <span class="keywordtype">char</span> *path), <span class="keyword">const</span> <span class="keywordtype">void</span> *data)
+<a name="l00541"></a>00541 {
+<a name="l00542"></a>00542 <span class="keywordtype">void</span> *datap = (<span class="keywordtype">void</span> *)data;
+<a name="l00543"></a>00543 <span class="keywordtype">char</span> path[PATH_MAX] = PLUGINSDIR;
+<a name="l00544"></a>00544 <span class="keywordtype">int</span> base;
+<a name="l00545"></a>00545 DIR *d;
+<a name="l00546"></a>00546 <span class="keyword">struct </span>dirent *de;
+<a name="l00547"></a>00547
+<a name="l00548"></a>00548 <span class="keywordflow">if</span> (!cb)
+<a name="l00549"></a>00549 <span class="keywordflow">return</span>;
+<a name="l00550"></a>00550
+<a name="l00551"></a>00551 base = <span class="keyword">sizeof</span>(PLUGINSDIR) - 1;
+<a name="l00552"></a>00552 <span class="keywordflow">if</span> (base + <span class="keyword">sizeof</span>(<span class="stringliteral">"/.so"</span>) >= PATH_MAX) {
+<a name="l00553"></a>00553 fprintf(stderr, <span class="stringliteral">"ERROR: path is too long '%s'\n"</span>, path);
+<a name="l00554"></a>00554 <span class="keywordflow">return</span>;
+<a name="l00555"></a>00555 }
+<a name="l00556"></a>00556
+<a name="l00557"></a>00557 d = opendir(path);
+<a name="l00558"></a>00558 <span class="keywordflow">if</span> (!d) {
+<a name="l00559"></a>00559 fprintf(stderr, <span class="stringliteral">"ERROR: could not open directory %s: %s\n"</span>,
+<a name="l00560"></a>00560 path, strerror(errno));
+<a name="l00561"></a>00561 <span class="keywordflow">return</span>;
+<a name="l00562"></a>00562 }
+<a name="l00563"></a>00563
+<a name="l00564"></a>00564 path[base] = <span class="charliteral">'/'</span>;
+<a name="l00565"></a>00565 base++;
+<a name="l00566"></a>00566
+<a name="l00567"></a>00567 <span class="keywordflow">while</span> ((de = readdir(d)) != NULL) {
+<a name="l00568"></a>00568 <span class="keywordtype">int</span> len;
+<a name="l00569"></a>00569
+<a name="l00570"></a>00570 <span class="keywordflow">if</span> (de->d_name[0] == <span class="charliteral">'.'</span>)
+<a name="l00571"></a>00571 <span class="keywordflow">continue</span>;
+<a name="l00572"></a>00572
+<a name="l00573"></a>00573 len = strlen(de->d_name);
+<a name="l00574"></a>00574 <span class="keywordflow">if</span> (len < 3 || memcmp(de->d_name + len - 3, <span class="stringliteral">".so"</span>, 3) != 0)
+<a name="l00575"></a>00575 <span class="keywordflow">continue</span>;
+<a name="l00576"></a>00576
+<a name="l00577"></a>00577 memcpy(path + base, de->d_name, len + 1); <span class="comment">/* copy \0 */</span>
+<a name="l00578"></a>00578 <span class="keywordflow">if</span> (!cb(datap, path))
+<a name="l00579"></a>00579 <span class="keywordflow">break</span>;
+<a name="l00580"></a>00580 }
+<a name="l00581"></a>00581 closedir(d);
+<a name="l00582"></a>00582 }
+<a name="l00583"></a>00583
+<a name="l00584"></a>00584 <span class="keyword">struct </span>lms_parsers_list_by_category_data {
+<a name="l00585"></a>00585 <span class="keyword">const</span> <span class="keywordtype">char</span> *category;
+<a name="l00586"></a>00586 int (*cb)(<span class="keywordtype">void</span> *data, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlms__parser__info.html">lms_parser_info</a> *info);
+<a name="l00587"></a>00587 <span class="keywordtype">void</span> *data;
+<a name="l00588"></a>00588 };
+<a name="l00589"></a>00589
+<a name="l00590"></a>00590 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00591"></a>00591 _lms_parsers_list_by_category(<span class="keywordtype">void</span> *data, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__parser__info.html#5ab9ec0ea57b30e14d5f6f671aac6590">path</a>)
+<a name="l00592"></a>00592 {
+<a name="l00593"></a>00593 <span class="keyword">struct </span>lms_parsers_list_by_category_data *d = data;
+<a name="l00594"></a>00594 <span class="keyword">struct </span><a class="code" href="structlms__parser__info.html">lms_parser_info</a> *info;
+<a name="l00595"></a>00595 <span class="keywordtype">int</span> r;
+<a name="l00596"></a>00596
+<a name="l00597"></a>00597 info = <a class="code" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info</a>(path);
+<a name="l00598"></a>00598 <span class="keywordflow">if</span> (!info)
+<a name="l00599"></a>00599 <span class="keywordflow">return</span> 1;
+<a name="l00600"></a>00600
+<a name="l00601"></a>00601 r = 1;
+<a name="l00602"></a>00602 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">categories</a>) {
+<a name="l00603"></a>00603 <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *itr;
+<a name="l00604"></a>00604 <span class="keywordflow">for</span> (itr = info-><a class="code" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">categories</a>; *itr != NULL; itr++)
+<a name="l00605"></a>00605 <span class="keywordflow">if</span> (strcmp(d->category, *itr) == 0) {
+<a name="l00606"></a>00606 r = d->cb(d->data, path, info);
+<a name="l00607"></a>00607 <span class="keywordflow">break</span>;
+<a name="l00608"></a>00608 }
+<a name="l00609"></a>00609 }
+<a name="l00610"></a>00610
+<a name="l00611"></a>00611 <a class="code" href="lightmediascanner_8c.html#508ef3c49f7f4729b9e5a5711b66bda1">lms_parser_info_free</a>(info);
+<a name="l00612"></a>00612
+<a name="l00613"></a>00613 <span class="keywordflow">return</span> r;
+<a name="l00614"></a>00614 }
+<a name="l00615"></a>00615
+<a name="l00628"></a>00628 <span class="keywordtype">void</span>
+<a name="l00629"></a><a class="code" href="lightmediascanner_8h.html#f6dfb5e9ed76e132ee7f45e7fe26415e">00629</a> <a class="code" href="lightmediascanner_8c.html#24f4c44982b286dc3ca451ca1acb6123">lms_parsers_list_by_category</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *category, <span class="keywordtype">int</span> (*cb)(<span class="keywordtype">void</span> *data, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__parser__info.html">lms_parser_info</a> *info), <span class="keyword">const</span> <span class="keywordtype">void</span> *data)
+<a name="l00630"></a>00630 {
+<a name="l00631"></a>00631 <span class="keyword">struct </span>lms_parsers_list_by_category_data d;
+<a name="l00632"></a>00632
+<a name="l00633"></a>00633 <span class="keywordflow">if</span> (!category || !cb)
+<a name="l00634"></a>00634 <span class="keywordflow">return</span>;
+<a name="l00635"></a>00635
+<a name="l00636"></a>00636 d.category = category;
+<a name="l00637"></a>00637 d.cb = cb;
+<a name="l00638"></a>00638 d.data = (<span class="keywordtype">void</span> *)data;
+<a name="l00639"></a>00639
+<a name="l00640"></a>00640 <a class="code" href="lightmediascanner_8c.html#7e27ccbd0abfd5d112586a00fd424db9">lms_parsers_list</a>(_lms_parsers_list_by_category, &d);
+<a name="l00641"></a>00641 }
+<a name="l00642"></a>00642
+<a name="l00643"></a>00643 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00644"></a>00644 _lms_string_array_count(<span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *array, <span class="keywordtype">int</span> *size)
+<a name="l00645"></a>00645 {
+<a name="l00646"></a>00646 <span class="keywordtype">int</span> count, align_overflow;
+<a name="l00647"></a>00647
+<a name="l00648"></a>00648 *size = 0;
+<a name="l00649"></a>00649 <span class="keywordflow">if</span> (!array)
+<a name="l00650"></a>00650 <span class="keywordflow">return</span> 0;
+<a name="l00651"></a>00651
+<a name="l00652"></a>00652 count = 0;
+<a name="l00653"></a>00653 <span class="keywordflow">for</span> (; *array != NULL; array++) {
+<a name="l00654"></a>00654 *size += <span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *) + strlen(*array) + 1;
+<a name="l00655"></a>00655 count++;
+<a name="l00656"></a>00656 }
+<a name="l00657"></a>00657 <span class="keywordflow">if</span> (count) {
+<a name="l00658"></a>00658 <span class="comment">/* count NULL terminator */</span>
+<a name="l00659"></a>00659 count++;
+<a name="l00660"></a>00660 *size += <span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *);
+<a name="l00661"></a>00661 }
+<a name="l00662"></a>00662
+<a name="l00663"></a>00663 align_overflow = *size % <span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *);
+<a name="l00664"></a>00664 <span class="keywordflow">if</span> (align_overflow)
+<a name="l00665"></a>00665 *size += <span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *) - align_overflow;
+<a name="l00666"></a>00666
+<a name="l00667"></a>00667 <span class="keywordflow">return</span> count;
+<a name="l00668"></a>00668 }
+<a name="l00669"></a>00669
+<a name="l00670"></a>00670 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00671"></a>00671 _lms_string_array_copy(<span class="keywordtype">char</span> **dst, <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *src, <span class="keywordtype">int</span> count)
+<a name="l00672"></a>00672 {
+<a name="l00673"></a>00673 <span class="keywordtype">char</span> *d;
+<a name="l00674"></a>00674
+<a name="l00675"></a>00675 d = (<span class="keywordtype">char</span> *)(dst + count);
+<a name="l00676"></a>00676
+<a name="l00677"></a>00677 <span class="keywordflow">for</span> (; count > 1; count--, dst++, src++) {
+<a name="l00678"></a>00678 <span class="keywordtype">int</span> len;
+<a name="l00679"></a>00679
+<a name="l00680"></a>00680 len = strlen(*src) + 1;
+<a name="l00681"></a>00681 *dst = d;
+<a name="l00682"></a>00682 memcpy(*dst, *src, len);
+<a name="l00683"></a>00683 d += len;
+<a name="l00684"></a>00684 }
+<a name="l00685"></a>00685
+<a name="l00686"></a>00686 *dst = NULL;
+<a name="l00687"></a>00687 }
+<a name="l00688"></a>00688
+<a name="l00698"></a>00698 <span class="keyword">struct </span><a class="code" href="structlms__parser__info.html">lms_parser_info</a> *
+<a name="l00699"></a><a class="code" href="lightmediascanner_8h.html#bda4586257139ef13260e3fe3bfd1b77">00699</a> <a class="code" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *so_path)
+<a name="l00700"></a>00700 {
+<a name="l00701"></a>00701 <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlms__plugin__info.html">lms_plugin_info</a> *(*plugin_info)(void);
+<a name="l00702"></a>00702 <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlms__plugin__info.html">lms_plugin_info</a> *<a class="code" href="structpinfo.html">pinfo</a>;
+<a name="l00703"></a>00703 <span class="keyword">struct </span><a class="code" href="structlms__parser__info.html">lms_parser_info</a> *ret;
+<a name="l00704"></a>00704 <span class="keyword">const</span> <span class="keywordtype">char</span> *errmsg;
+<a name="l00705"></a>00705 <span class="keywordtype">void</span> *dl_handle;
+<a name="l00706"></a>00706 <span class="keywordtype">int</span> len, path_len, name_len, desc_len, ver_len, uri_len;
+<a name="l00707"></a>00707 <span class="keywordtype">int</span> cats_count, cats_size, authors_count, authors_size;
+<a name="l00708"></a>00708
+<a name="l00709"></a>00709 <span class="keywordflow">if</span> (!so_path)
+<a name="l00710"></a>00710 <span class="keywordflow">return</span> NULL;
+<a name="l00711"></a>00711
+<a name="l00712"></a>00712 dl_handle = dlopen(so_path, RTLD_NOW | RTLD_LOCAL);
+<a name="l00713"></a>00713 errmsg = dlerror();
+<a name="l00714"></a>00714 <span class="keywordflow">if</span> (errmsg) {
+<a name="l00715"></a>00715 fprintf(stderr, <span class="stringliteral">"ERROR: could not dlopen() %s\n"</span>, errmsg);
+<a name="l00716"></a>00716 <span class="keywordflow">return</span> NULL;
+<a name="l00717"></a>00717 }
+<a name="l00718"></a>00718
+<a name="l00719"></a>00719 ret = NULL;
+<a name="l00720"></a>00720 plugin_info = dlsym(dl_handle, <span class="stringliteral">"lms_plugin_info"</span>);
+<a name="l00721"></a>00721 errmsg = dlerror();
+<a name="l00722"></a>00722 <span class="keywordflow">if</span> (errmsg) {
+<a name="l00723"></a>00723 fprintf(stderr, <span class="stringliteral">"ERROR: could not find plugin info function %s\n"</span>,
+<a name="l00724"></a>00724 errmsg);
+<a name="l00725"></a>00725 <span class="keywordflow">goto</span> close_and_exit;
+<a name="l00726"></a>00726 }
+<a name="l00727"></a>00727
+<a name="l00728"></a>00728 <span class="keywordflow">if</span> (!plugin_info) {
+<a name="l00729"></a>00729 fprintf(stderr, <span class="stringliteral">"ERROR: lms_plugin_info is NULL\n"</span>);
+<a name="l00730"></a>00730 <span class="keywordflow">goto</span> close_and_exit;
+<a name="l00731"></a>00731 }
+<a name="l00732"></a>00732
+<a name="l00733"></a>00733 pinfo = plugin_info();
+<a name="l00734"></a>00734 <span class="keywordflow">if</span> (!pinfo) {
+<a name="l00735"></a>00735 fprintf(stderr, <span class="stringliteral">"ERROR: lms_plugin_info() returned NULL\n"</span>);
+<a name="l00736"></a>00736 <span class="keywordflow">goto</span> close_and_exit;
+<a name="l00737"></a>00737 }
+<a name="l00738"></a>00738
+<a name="l00739"></a>00739 path_len = strlen(so_path) + 1;
+<a name="l00740"></a>00740 name_len = pinfo-><a class="code" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">name</a> ? strlen(pinfo-><a class="code" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">name</a>) + 1 : 0;
+<a name="l00741"></a>00741 desc_len = pinfo-><a class="code" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">description</a> ? strlen(pinfo-><a class="code" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">description</a>) + 1 : 0;
+<a name="l00742"></a>00742 ver_len = pinfo-><a class="code" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">version</a> ? strlen(pinfo-><a class="code" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">version</a>) + 1 : 0;
+<a name="l00743"></a>00743 uri_len = pinfo-><a class="code" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">uri</a> ? strlen(pinfo-><a class="code" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">uri</a>) + 1 : 0;
+<a name="l00744"></a>00744
+<a name="l00745"></a>00745 cats_count = _lms_string_array_count(pinfo-><a class="code" href="structlms__plugin__info.html#d5fd907e4bcc553eb9474aa132435c9c">categories</a>, &cats_size);
+<a name="l00746"></a>00746 authors_count = _lms_string_array_count(pinfo-><a class="code" href="structlms__plugin__info.html#5dd799fc0e3dd7e798f053ecf773e59a">authors</a>, &authors_size);
+<a name="l00747"></a>00747
+<a name="l00748"></a>00748 len = path_len + name_len + desc_len + ver_len + uri_len + cats_size +
+<a name="l00749"></a>00749 authors_size;
+<a name="l00750"></a>00750 ret = malloc(<span class="keyword">sizeof</span>(*ret) + len);
+<a name="l00751"></a>00751 <span class="keywordflow">if</span> (!ret) {
+<a name="l00752"></a>00752 fprintf(stderr, <span class="stringliteral">"ERROR: could not alloc %d bytes: %s"</span>,
+<a name="l00753"></a>00753 <span class="keyword">sizeof</span>(*ret) + len, strerror(errno));
+<a name="l00754"></a>00754 <span class="keywordflow">goto</span> close_and_exit;
+<a name="l00755"></a>00755 }
+<a name="l00756"></a>00756
+<a name="l00757"></a>00757 len = 0;
+<a name="l00758"></a>00758
+<a name="l00759"></a>00759 <span class="keywordflow">if</span> (cats_count) {
+<a name="l00760"></a>00760 ret-><a class="code" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">categories</a> = (<span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *)
+<a name="l00761"></a>00761 ((<span class="keywordtype">char</span> *)ret + <span class="keyword">sizeof</span>(*ret) + len);
+<a name="l00762"></a>00762 _lms_string_array_copy(
+<a name="l00763"></a>00763 (<span class="keywordtype">char</span> **)ret-><a class="code" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">categories</a>, pinfo-><a class="code" href="structlms__plugin__info.html#d5fd907e4bcc553eb9474aa132435c9c">categories</a>, cats_count);
+<a name="l00764"></a>00764 len += cats_size;
+<a name="l00765"></a>00765 } <span class="keywordflow">else</span>
+<a name="l00766"></a>00766 ret-><a class="code" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">categories</a> = NULL;
+<a name="l00767"></a>00767
+<a name="l00768"></a>00768 <span class="keywordflow">if</span> (authors_count) {
+<a name="l00769"></a>00769 ret-><a class="code" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">authors</a> = (<span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *)
+<a name="l00770"></a>00770 ((<span class="keywordtype">char</span> *)ret + <span class="keyword">sizeof</span>(*ret) + len);
+<a name="l00771"></a>00771 _lms_string_array_copy(
+<a name="l00772"></a>00772 (<span class="keywordtype">char</span> **)ret-><a class="code" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">authors</a>, pinfo-><a class="code" href="structlms__plugin__info.html#5dd799fc0e3dd7e798f053ecf773e59a">authors</a>, authors_count);
+<a name="l00773"></a>00773 len += authors_size;
+<a name="l00774"></a>00774 } <span class="keywordflow">else</span>
+<a name="l00775"></a>00775 ret-><a class="code" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">authors</a> = NULL;
+<a name="l00776"></a>00776
+<a name="l00777"></a>00777 ret-><a class="code" href="structlms__parser__info.html#5ab9ec0ea57b30e14d5f6f671aac6590">path</a> = (<span class="keywordtype">char</span> *)ret + <span class="keyword">sizeof</span>(*ret) + len;
+<a name="l00778"></a>00778 memcpy((<span class="keywordtype">char</span> *)ret-><a class="code" href="structlms__parser__info.html#5ab9ec0ea57b30e14d5f6f671aac6590">path</a>, so_path, path_len);
+<a name="l00779"></a>00779 len += path_len;
+<a name="l00780"></a>00780
+<a name="l00781"></a>00781 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">name</a>) {
+<a name="l00782"></a>00782 ret-><a class="code" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">name</a> = (<span class="keywordtype">char</span> *)ret + <span class="keyword">sizeof</span>(*ret) + len;
+<a name="l00783"></a>00783 memcpy((<span class="keywordtype">char</span> *)ret-><a class="code" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">name</a>, pinfo-><a class="code" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">name</a>, name_len);
+<a name="l00784"></a>00784 len += name_len;
+<a name="l00785"></a>00785 } <span class="keywordflow">else</span>
+<a name="l00786"></a>00786 ret-><a class="code" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">name</a> = NULL;
+<a name="l00787"></a>00787
+<a name="l00788"></a>00788 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">description</a>) {
+<a name="l00789"></a>00789 ret-><a class="code" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">description</a> = (<span class="keywordtype">char</span> *)ret + <span class="keyword">sizeof</span>(*ret) + len;
+<a name="l00790"></a>00790 memcpy((<span class="keywordtype">char</span> *)ret-><a class="code" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">description</a>, pinfo-><a class="code" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">description</a>, desc_len);
+<a name="l00791"></a>00791 len += desc_len;
+<a name="l00792"></a>00792 } <span class="keywordflow">else</span>
+<a name="l00793"></a>00793 ret-><a class="code" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">description</a> = NULL;
+<a name="l00794"></a>00794
+<a name="l00795"></a>00795 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">version</a>) {
+<a name="l00796"></a>00796 ret-><a class="code" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">version</a> = (<span class="keywordtype">char</span> *)ret + <span class="keyword">sizeof</span>(*ret) + len;
+<a name="l00797"></a>00797 memcpy((<span class="keywordtype">char</span> *)ret-><a class="code" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">version</a>, pinfo-><a class="code" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">version</a>, ver_len);
+<a name="l00798"></a>00798 len += ver_len;
+<a name="l00799"></a>00799 } <span class="keywordflow">else</span>
+<a name="l00800"></a>00800 ret-><a class="code" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">version</a> = NULL;
+<a name="l00801"></a>00801
+<a name="l00802"></a>00802 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">uri</a>) {
+<a name="l00803"></a>00803 ret-><a class="code" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">uri</a> = (<span class="keywordtype">char</span> *)ret + <span class="keyword">sizeof</span>(*ret) + len;
+<a name="l00804"></a>00804 memcpy((<span class="keywordtype">char</span> *)ret-><a class="code" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">uri</a>, pinfo-><a class="code" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">uri</a>, uri_len);
+<a name="l00805"></a>00805 len += uri_len;
+<a name="l00806"></a>00806 } <span class="keywordflow">else</span>
+<a name="l00807"></a>00807 ret-><a class="code" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">uri</a> = NULL;
+<a name="l00808"></a>00808
+<a name="l00809"></a>00809 close_and_exit:
+<a name="l00810"></a>00810 dlclose(dl_handle);
+<a name="l00811"></a>00811 <span class="keywordflow">return</span> ret;
+<a name="l00812"></a>00812 }
+<a name="l00813"></a>00813
+<a name="l00823"></a>00823 <span class="keyword">struct </span><a class="code" href="structlms__parser__info.html">lms_parser_info</a> *
+<a name="l00824"></a><a class="code" href="lightmediascanner_8h.html#85b153a95dafb48c419dc1419e323567">00824</a> <a class="code" href="lightmediascanner_8c.html#66457cf4ec2ef4a50bd899f99e914650">lms_parser_info_find</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name)
+<a name="l00825"></a>00825 {
+<a name="l00826"></a>00826 <span class="keywordtype">char</span> so_path[PATH_MAX];
+<a name="l00827"></a>00827
+<a name="l00828"></a>00828 <span class="keywordflow">if</span> (!name)
+<a name="l00829"></a>00829 <span class="keywordflow">return</span> NULL;
+<a name="l00830"></a>00830
+<a name="l00831"></a>00831 <span class="keywordflow">if</span> (!lms_parser_find(so_path, <span class="keyword">sizeof</span>(so_path), name))
+<a name="l00832"></a>00832 <span class="keywordflow">return</span> NULL;
+<a name="l00833"></a>00833
+<a name="l00834"></a>00834 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info</a>(so_path);
+<a name="l00835"></a>00835 }
+<a name="l00836"></a>00836
+<a name="l00842"></a>00842 <span class="keywordtype">void</span>
+<a name="l00843"></a><a class="code" href="lightmediascanner_8h.html#f071ee2184c0d4d69c85cccd09e08b26">00843</a> <a class="code" href="lightmediascanner_8c.html#508ef3c49f7f4729b9e5a5711b66bda1">lms_parser_info_free</a>(<span class="keyword">struct</span> <a class="code" href="structlms__parser__info.html">lms_parser_info</a> *info)
+<a name="l00844"></a>00844 {
+<a name="l00845"></a>00845 free(info);
+<a name="l00846"></a>00846 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner.c File Reference</h1><code>#include <dlfcn.h></code><br>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <string.h></code><br>
+<code>#include <dirent.h></code><br>
+<code>#include <errno.h></code><br>
+<code>#include "<a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>"</code><br>
+<code>#include "<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>"</code><br>
+<code>#include "<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>"</code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#c2843894cca63ec0089c381e69d1d81a">DEFAULT_SLAVE_TIMEOUT</a> 1000</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#6d0480dc76aba4a2291d79ac2466fc59">DEFAULT_COMMIT_INTERVAL</a> 100</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structlms.html">lms_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lms_new</a> (const char *db_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lms_free</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#668e706f6d5eae3ba5e36ff4db2ae514">lms_set_progress_callback</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, <a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> cb, const void *data, <a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> free_data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lms_parser_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *so_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lms_parser_find_and_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lms_parser_del_int</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, int i)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">lms_parser_del</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, <a class="el" href="structlms__plugin.html">lms_plugin_t</a> *handle)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lms_is_processing</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lms_get_db_path</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lms_get_slave_timeout</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lms_set_slave_timeout</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, int ms)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lms_get_commit_interval</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lms_set_commit_interval</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, unsigned int transactions)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g4fd56e209d415b27466274726cc7d59f">lms_charset_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *charset)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g0b427b8b60957e29a0e504c10c5356b0">lms_charset_del</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *charset)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#7e27ccbd0abfd5d112586a00fd424db9">lms_parsers_list</a> (int(*cb)(void *data, const char *path), const void *data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#24f4c44982b286dc3ca451ca1acb6123">lms_parsers_list_by_category</a> (const char *category, int(*cb)(void *data, const char *path, const struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> *info), const void *data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info</a> (const char *so_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#66457cf4ec2ef4a50bd899f99e914650">lms_parser_info_find</a> (const char *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8c.html#508ef3c49f7f4729b9e5a5711b66bda1">lms_parser_info_free</a> (struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> *info)</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="6d0480dc76aba4a2291d79ac2466fc59"></a><!-- doxytag: member="lightmediascanner.c::DEFAULT_COMMIT_INTERVAL" ref="6d0480dc76aba4a2291d79ac2466fc59" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEFAULT_COMMIT_INTERVAL 100 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00037">37</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00121">lms_new()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="c2843894cca63ec0089c381e69d1d81a"></a><!-- doxytag: member="lightmediascanner.c::DEFAULT_SLAVE_TIMEOUT" ref="c2843894cca63ec0089c381e69d1d81a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DEFAULT_SLAVE_TIMEOUT 1000 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00036">36</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00121">lms_new()</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="e6ccb942742cf65cc1cf866aceb4bddf"></a><!-- doxytag: member="lightmediascanner.c::lms_parser_del_int" ref="e6ccb942742cf65cc1cf866aceb4bddf" args="(lms_t *lms, int i)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_parser_del_int </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>i</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00294">294</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00334">lms_parser_del()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="0b95c1ed1a71c241bb887ee672f740d8"></a><!-- doxytag: member="lightmediascanner.c::lms_parser_info" ref="0b95c1ed1a71c241bb887ee672f740d8" args="(const char *so_path)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a>* <a class="el" href="structlms__parser__info.html">lms_parser_info</a> </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>so_path</em> </td>
+ <td> ) </td>
+ <td><code> [read]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get <a class="el" href="structparser.html">parser</a> information.<p>
+Information can be used to let user choose parsers on Graphical User Interfaces.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>so_path</em> </td><td>full path to module. </td></tr>
+ </table>
+</dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="lightmediascanner_8c.html#66457cf4ec2ef4a50bd899f99e914650">lms_parser_info_find()</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00699">699</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner_8h-source.html#l00204">lms_parser_info::authors</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00182">lms_plugin_info::authors</a>, <a class="el" href="lightmediascanner_8h-source.html#l00201">lms_parser_info::categories</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00179">lms_plugin_info::categories</a>, <a class="el" href="lightmediascanner_8h-source.html#l00202">lms_parser_info::description</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00180">lms_plugin_info::description</a>, <a class="el" href="lightmediascanner_8h-source.html#l00200">lms_parser_info::name</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00178">lms_plugin_info::name</a>, <a class="el" href="lightmediascanner_8h-source.html#l00199">lms_parser_info::path</a>, <a class="el" href="lightmediascanner_8h-source.html#l00205">lms_parser_info::uri</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00183">lms_plugin_info::uri</a>, <a class="el" href="lightmediascanner_8h-source.html#l00203">lms_parser_info::version</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00181">lms_plugin_info::version</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00824">lms_parser_info_find()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="66457cf4ec2ef4a50bd899f99e914650"></a><!-- doxytag: member="lightmediascanner.c::lms_parser_info_find" ref="66457cf4ec2ef4a50bd899f99e914650" args="(const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a>* lms_parser_info_find </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>name</em> </td>
+ <td> ) </td>
+ <td><code> [read]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Find <a class="el" href="structparser.html">parser</a> by name and get its information.<p>
+Information can be used to let user choose parsers on Graphical User Interfaces.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>name of .so to find the whole so_path and retrieve information. </td></tr>
+ </table>
+</dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info()</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00824">824</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="508ef3c49f7f4729b9e5a5711b66bda1"></a><!-- doxytag: member="lightmediascanner.c::lms_parser_info_free" ref="508ef3c49f7f4729b9e5a5711b66bda1" args="(struct lms_parser_info *info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_parser_info_free </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> * </td>
+ <td class="paramname"> <em>info</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Free previously returned information.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>it is safe to call with NULL. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00843">843</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="7e27ccbd0abfd5d112586a00fd424db9"></a><!-- doxytag: member="lightmediascanner.c::lms_parsers_list" ref="7e27ccbd0abfd5d112586a00fd424db9" args="(int(*cb)(void *data, const char *path), const void *data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_parsers_list </td>
+ <td>(</td>
+ <td class="paramtype">int(*)(void *data, const char *path) </td>
+ <td class="paramname"> <em>cb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> <em>data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+List all known parsers on the system.<p>
+No information is retrieved, you might like to call <a class="el" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info()</a> on the callback path.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>cb</em> </td><td>function to call for each path found. If it returns 0, it stops iteraction. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>extra data to pass to <em>cb</em> on every call. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00540">540</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00629">lms_parsers_list_by_category()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="24f4c44982b286dc3ca451ca1acb6123"></a><!-- doxytag: member="lightmediascanner.c::lms_parsers_list_by_category" ref="24f4c44982b286dc3ca451ca1acb6123" args="(const char *category, int(*cb)(void *data, const char *path, const struct lms_parser_info *info), const void *data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_parsers_list_by_category </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>category</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int(*)(void *data, const char *path, const struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> *info) </td>
+ <td class="paramname"> <em>cb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> <em>data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+List all known parsers of a given category.<p>
+Since we need information to figure out <a class="el" href="structparser.html">parser</a> category, these are passed as argument to callback, but you should NOT modify or reference it after callback function returns since it will be released after that.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>category</em> </td><td>which category to match. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>cb</em> </td><td>function to call for each path found. If it returns 0, it stops iteraction. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>extra data to pass to <em>cb</em> on every call. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00629">629</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner_8c-source.html#l00540">lms_parsers_list()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="668e706f6d5eae3ba5e36ff4db2ae514"></a><!-- doxytag: member="lightmediascanner.c::lms_set_progress_callback" ref="668e706f6d5eae3ba5e36ff4db2ae514" args="(lms_t *lms, lms_progress_callback_t cb, const void *data, lms_free_callback_t free_data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_set_progress_callback </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> </td>
+ <td class="paramname"> <em>cb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> <em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> </td>
+ <td class="paramname"> <em>free_data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set callback to be used to report progress (check and process).<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>cb</em> </td><td>function to call when files are processed or NULL to unset. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>data to give to cb when it's called, may be NULL. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>free_data</em> </td><td>function to call to free <em>data</em> when <a class="el" href="structlms.html">lms</a> is freed or new progress data is set. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00195">195</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00083">lms::cb</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00084">lms::data</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00085">lms::free_data</a>, and <a class="el" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">lms::progress</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_parsers_list_by_category",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_parsers_list",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html#7e27ccbd0abfd5d112586a00fd424db9"];
+}
--- /dev/null
+6cbda567f6329b3dbe1e0ab331e3af46
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_parser_info_find",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_parser_info",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8"];
+}
--- /dev/null
+f04c80800232ad6da160032dcde58bae
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="dlfcn.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="string.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="dirent.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="errno.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="lightmediascanner_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html"];
+ Node9 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node10 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node10 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node10 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node9 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="poll.h",height=0.2,width=0.4,color="grey75"];
+ Node9 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="limits.h",height=0.2,width=0.4,color="grey75"];
+ Node9 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
--- /dev/null
+fdf1ea4f9f69d259b7d76a374b82e729
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner.h</h1><a href="lightmediascanner_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00110"></a>00110 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_H_</span>
+<a name="l00111"></a><a class="code" href="lightmediascanner_8h.html#e97a674be7c85b0914a6acbafe994998">00111</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_H_ 1</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span>
+<a name="l00113"></a>00113 <span class="preprocessor">#ifdef API</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#undef API</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span>
+<a name="l00117"></a>00117 <span class="preprocessor">#ifdef __GNUC__</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ >= 4</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor"># define API __attribute__ ((visibility("default")))</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NULL_TERMINATED __attribute__((__sentinel__))</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NULL_TERMINATED</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_PURE __attribute__((__pure__))</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC __attribute__((__malloc__))</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_CONST __attribute__((__const__))</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_UNUSED __attribute__((__unused__))</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_PURE</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NORETURN</span>
+<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_CONST</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_UNUSED</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT __attribute__((warn_unused_result))</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...) __attribute__((nonnull(__VA_ARGS__)))</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00145"></a><a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">00145</a> <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00146"></a><a class="code" href="lightmediascanner_8h.html#3c631eb7d32b61d70bfc615ae54e5552">00146</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NULL_TERMINATED</span>
+<a name="l00147"></a><a class="code" href="lightmediascanner_8h.html#7a9a21d60c8e567c8110c8e3069f8201">00147</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_PURE</span>
+<a name="l00148"></a><a class="code" href="lightmediascanner_8h.html#2213ea4dca0e242f957f63988caab768">00148</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC</span>
+<a name="l00149"></a><a class="code" href="lightmediascanner_8h.html#ccce66c7f9844ae805b83bee1b9c32b5">00149</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_CONST</span>
+<a name="l00150"></a><a class="code" href="lightmediascanner_8h.html#80a4050221a914ea58d5799f13109ebb">00150</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_UNUSED</span>
+<a name="l00151"></a><a class="code" href="lightmediascanner_8h.html#34c563f40a0f86e597c51f1556669521">00151</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT</span>
+<a name="l00152"></a><a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">00152</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span>
+<a name="l00155"></a>00155 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00156"></a>00156 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00157"></a>00157 <span class="preprocessor">#endif</span>
+<a name="l00158"></a>00158 <span class="preprocessor"></span>
+<a name="l00164"></a><a class="code" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">00164</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structlms.html">lms</a> <a class="code" href="structlms.html">lms_t</a>;
+<a name="l00165"></a><a class="code" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">00165</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structlms__plugin.html">lms_plugin</a> <a class="code" href="structlms__plugin.html">lms_plugin_t</a>;
+<a name="l00166"></a>00166
+<a name="l00167"></a><a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">00167</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00168"></a><a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370204315e58ce4b7dfa6421b4d1556655d">00168</a> <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370204315e58ce4b7dfa6421b4d1556655d">LMS_PROGRESS_STATUS_UP_TO_DATE</a>,
+<a name="l00169"></a><a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">00169</a> <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">LMS_PROGRESS_STATUS_PROCESSED</a>,
+<a name="l00170"></a><a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11">00170</a> <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11">LMS_PROGRESS_STATUS_DELETED</a>,
+<a name="l00171"></a><a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152">00171</a> <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152">LMS_PROGRESS_STATUS_KILLED</a>,
+<a name="l00172"></a><a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">00172</a> <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">LMS_PROGRESS_STATUS_ERROR_PARSE</a>,
+<a name="l00173"></a><a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082">00173</a> <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082">LMS_PROGRESS_STATUS_ERROR_COMM</a>,
+<a name="l00174"></a><a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c">00174</a> <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c">LMS_PROGRESS_STATUS_SKIPPED</a>
+<a name="l00175"></a>00175 } <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lms_progress_status_t</a>;
+<a name="l00176"></a>00176
+<a name="l00177"></a><a class="code" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">00177</a> <span class="keyword">typedef</span> void (*<a class="code" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a>)(<span class="keywordtype">void</span> *data);
+<a name="l00178"></a><a class="code" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">00178</a> <span class="keyword">typedef</span> void (*<a class="code" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a>)(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">int</span> path_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lms_progress_status_t</a> status, <span class="keywordtype">void</span> *data);
+<a name="l00179"></a>00179
+<a name="l00180"></a>00180 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lms_new</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *db_path) <a class="code" href="lightmediascanner_8h.html#2213ea4dca0e242f957f63988caab768">GNUC_MALLOC</a> <a class="code" href="lightmediascanner_8h.html#34c563f40a0f86e597c51f1556669521">GNUC_WARN_UNUSED_RESULT</a>;
+<a name="l00181"></a>00181 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lms_free</a>(<a class="code" href="structlms.html">lms_t</a> *lms) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00182"></a>00182 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner_8h.html#7d2b81cfe07a8cce4c2bef705e7529f4">lms_process</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00183"></a>00183 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner_8h.html#c5eda23c23b2ea76f001ac994c2ba9e2">lms_process_single_process</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00184"></a>00184 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner_8h.html#5b70063cf19648de70bb145404aa3d0b">lms_check</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00185"></a>00185 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner_8h.html#bfd6888e606654c585e41aa946637432">lms_check_single_process</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00186"></a>00186 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="lightmediascanner_8h.html#30aa1e83907fc1049d2adccb28eef489">lms_stop_processing</a>(<a class="code" href="structlms.html">lms_t</a> *lms) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00187"></a>00187 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lms_get_db_path</a>(<span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *lms) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00188"></a>00188 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lms_is_processing</a>(<span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *lms) <a class="code" href="lightmediascanner_8h.html#7a9a21d60c8e567c8110c8e3069f8201">GNUC_PURE</a> <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00189"></a>00189 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lms_get_slave_timeout</a>(<span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *lms) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00190"></a>00190 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lms_set_slave_timeout</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keywordtype">int</span> ms) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00191"></a>00191 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lms_get_commit_interval</a>(<span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *lms) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00192"></a>00192 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lms_set_commit_interval</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> transactions) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00193"></a>00193 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="lightmediascanner_8c.html#668e706f6d5eae3ba5e36ff4db2ae514">lms_set_progress_callback</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <a class="code" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> cb, <span class="keyword">const</span> <span class="keywordtype">void</span> *data, <a class="code" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> free_data) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="lightmediascanner_8c.html#7e27ccbd0abfd5d112586a00fd424db9">lms_parsers_list</a>(<span class="keywordtype">int</span> (*cb)(<span class="keywordtype">void</span> *data, <span class="keyword">const</span> <span class="keywordtype">char</span> *path), <span class="keyword">const</span> <span class="keywordtype">void</span> *data);
+<a name="l00197"></a>00197
+<a name="l00198"></a><a class="code" href="structlms__parser__info.html">00198</a> <span class="keyword">struct </span><a class="code" href="structlms__parser__info.html">lms_parser_info</a> {
+<a name="l00199"></a><a class="code" href="structlms__parser__info.html#5ab9ec0ea57b30e14d5f6f671aac6590">00199</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *path;
+<a name="l00200"></a><a class="code" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">00200</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">name</a>;
+<a name="l00201"></a><a class="code" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">00201</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *<a class="code" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">categories</a>;
+<a name="l00202"></a><a class="code" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">00202</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">description</a>;
+<a name="l00203"></a><a class="code" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">00203</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">version</a>;
+<a name="l00204"></a><a class="code" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">00204</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keyword">const</span> *<a class="code" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">authors</a>;
+<a name="l00205"></a><a class="code" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">00205</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">uri</a>;
+<a name="l00206"></a>00206 };
+<a name="l00207"></a>00207
+<a name="l00208"></a>00208 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keyword">struct </span><a class="code" href="structlms__parser__info.html">lms_parser_info</a> *<a class="code" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *so_path);
+<a name="l00209"></a>00209 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keyword">struct </span><a class="code" href="structlms__parser__info.html">lms_parser_info</a> *<a class="code" href="lightmediascanner_8c.html#66457cf4ec2ef4a50bd899f99e914650">lms_parser_info_find</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">name</a>);
+<a name="l00210"></a>00210 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="lightmediascanner_8c.html#508ef3c49f7f4729b9e5a5711b66bda1">lms_parser_info_free</a>(<span class="keyword">struct</span> <a class="code" href="structlms__parser__info.html">lms_parser_info</a> *info);
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="lightmediascanner_8c.html#24f4c44982b286dc3ca451ca1acb6123">lms_parsers_list_by_category</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *category, <span class="keywordtype">int</span> (*cb)(<span class="keywordtype">void</span> *data, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__parser__info.html">lms_parser_info</a> *info), <span class="keyword">const</span> <span class="keywordtype">void</span> *data);
+<a name="l00213"></a>00213
+<a name="l00214"></a>00214 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *<a class="code" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lms_parser_add</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *so_path) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00215"></a>00215 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *<a class="code" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lms_parser_find_and_add</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">name</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00216"></a>00216 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">lms_parser_del</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *handle) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00217"></a>00217
+<a name="l00218"></a>00218 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__API.html#g4fd56e209d415b27466274726cc7d59f">lms_charset_add</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00219"></a>00219 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__API.html#g0b427b8b60957e29a0e504c10c5356b0">lms_charset_del</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00220"></a>00220
+<a name="l00221"></a>00221 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00222"></a>00222 <span class="preprocessor"></span>}
+<a name="l00223"></a>00223 <span class="preprocessor">#endif</span>
+<a name="l00224"></a>00224 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_H_ */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner.h File Reference</h1>
+<p>
+<div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__parser__info.html">lms_parser_info</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#e97a674be7c85b0914a6acbafe994998">_LIGHTMEDIASCANNER_H_</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#3c631eb7d32b61d70bfc615ae54e5552">GNUC_NULL_TERMINATED</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#7a9a21d60c8e567c8110c8e3069f8201">GNUC_PURE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#2213ea4dca0e242f957f63988caab768">GNUC_MALLOC</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#ccce66c7f9844ae805b83bee1b9c32b5">GNUC_CONST</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#80a4050221a914ea58d5799f13109ebb">GNUC_UNUSED</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#34c563f40a0f86e597c51f1556669521">GNUC_WARN_UNUSED_RESULT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(...)</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structlms.html">lms</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structlms__plugin.html">lms_plugin</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">lms_plugin_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> )(void *data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> )(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *path, int path_len, <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lms_progress_status_t</a> status, void *data)</td></tr>
+
+<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lms_progress_status_t</a> { <br>
+ <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370204315e58ce4b7dfa6421b4d1556655d">LMS_PROGRESS_STATUS_UP_TO_DATE</a>,
+<a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">LMS_PROGRESS_STATUS_PROCESSED</a>,
+<a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11">LMS_PROGRESS_STATUS_DELETED</a>,
+<a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152">LMS_PROGRESS_STATUS_KILLED</a>,
+<br>
+ <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">LMS_PROGRESS_STATUS_ERROR_PARSE</a>,
+<a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082">LMS_PROGRESS_STATUS_ERROR_COMM</a>,
+<a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c">LMS_PROGRESS_STATUS_SKIPPED</a>
+<br>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="structlms.html">lms_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">lms_new</a> (const char *db_path) GNUC_MALLOC GNUC_WARN_UNUSED_RESULT</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lms_free</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#7d2b81cfe07a8cce4c2bef705e7529f4">lms_process</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *top_path) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#c5eda23c23b2ea76f001ac994c2ba9e2">lms_process_single_process</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *top_path) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#5b70063cf19648de70bb145404aa3d0b">lms_check</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *top_path) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#bfd6888e606654c585e41aa946637432">lms_check_single_process</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *top_path) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int API <br class="typebreak">
+int API void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#30aa1e83907fc1049d2adccb28eef489">lms_stop_processing</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">lms_get_db_path</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">lms_is_processing</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>) GNUC_PURE GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lms_get_slave_timeout</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">lms_set_slave_timeout</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, int ms) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">lms_get_commit_interval</a> (const <a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">lms_set_commit_interval</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, unsigned int transactions) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#d2da241599f7f576670d64184f972c43">lms_set_progress_callback</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, <a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> cb, const void *data, <a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> free_data) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#ebe19263efa873f4629a18e77924bfaf">lms_parsers_list</a> (int(*cb)(void *data, const char *path), const void *data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#bda4586257139ef13260e3fe3bfd1b77">lms_parser_info</a> (const char *so_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#85b153a95dafb48c419dc1419e323567">lms_parser_info_find</a> (const char *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#f071ee2184c0d4d69c85cccd09e08b26">lms_parser_info_free</a> (struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> *info)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#f6dfb5e9ed76e132ee7f45e7fe26415e">lms_parsers_list_by_category</a> (const char *category, int(*cb)(void *data, const char *path, const struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> *info), const void *data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#ce55a5c9cc767b96fa6f24b77bebc7c3">lms_parser_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *so_path) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a> *API <br class="typebreak">
+<a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#e48d0483903bbb9604d14b44f7c569d9">lms_parser_find_and_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *name) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a> *API <br class="typebreak">
+<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *API int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#5ba173b12c355bbdf7913bfff0ff6415">lms_parser_del</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, <a class="el" href="structlms__plugin.html">lms_plugin_t</a> *handle) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a> *API <br class="typebreak">
+<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#03afcd1e04665bdaebe73d9f6cc20553">lms_charset_add</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *charset) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a> *API <br class="typebreak">
+<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *API int API int <br class="typebreak">
+API int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner_8h.html#35fc2de4828878b9dec07e8edda8a5e2">lms_charset_del</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *charset) GNUC_NON_NULL(1</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="e97a674be7c85b0914a6acbafe994998"></a><!-- doxytag: member="lightmediascanner.h::_LIGHTMEDIASCANNER_H_" ref="e97a674be7c85b0914a6acbafe994998" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _LIGHTMEDIASCANNER_H_ 1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00111">111</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d8ce4efaa307683d3d763b37b4711c53"></a><!-- doxytag: member="lightmediascanner.h::API" ref="d8ce4efaa307683d3d763b37b4711c53" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define API </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00145">145</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="ccce66c7f9844ae805b83bee1b9c32b5"></a><!-- doxytag: member="lightmediascanner.h::GNUC_CONST" ref="ccce66c7f9844ae805b83bee1b9c32b5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_CONST </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00149">149</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="2213ea4dca0e242f957f63988caab768"></a><!-- doxytag: member="lightmediascanner.h::GNUC_MALLOC" ref="2213ea4dca0e242f957f63988caab768" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_MALLOC </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00148">148</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6fe68cac0abf3e2ca61141920414e93a"></a><!-- doxytag: member="lightmediascanner.h::GNUC_NON_NULL" ref="6fe68cac0abf3e2ca61141920414e93a" args="(...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_NON_NULL </td>
+ <td>(</td>
+ <td class="paramtype"> <em>...</em> </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00152">152</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="3c631eb7d32b61d70bfc615ae54e5552"></a><!-- doxytag: member="lightmediascanner.h::GNUC_NULL_TERMINATED" ref="3c631eb7d32b61d70bfc615ae54e5552" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_NULL_TERMINATED </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00146">146</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="7a9a21d60c8e567c8110c8e3069f8201"></a><!-- doxytag: member="lightmediascanner.h::GNUC_PURE" ref="7a9a21d60c8e567c8110c8e3069f8201" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_PURE </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00147">147</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="80a4050221a914ea58d5799f13109ebb"></a><!-- doxytag: member="lightmediascanner.h::GNUC_UNUSED" ref="80a4050221a914ea58d5799f13109ebb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_UNUSED </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00150">150</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="34c563f40a0f86e597c51f1556669521"></a><!-- doxytag: member="lightmediascanner.h::GNUC_WARN_UNUSED_RESULT" ref="34c563f40a0f86e597c51f1556669521" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_WARN_UNUSED_RESULT </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00151">151</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="55ee3894f334dc5b30431bf94971f110"></a><!-- doxytag: member="lightmediascanner.h::lms_free_callback_t" ref="55ee3894f334dc5b30431bf94971f110" args=")(void *data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a>)(void *data) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00177">177</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="ccedd0cd6d535dcfee399957033074fd"></a><!-- doxytag: member="lightmediascanner.h::lms_plugin_t" ref="ccedd0cd6d535dcfee399957033074fd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structlms__plugin.html">lms_plugin</a> <a class="el" href="structlms__plugin.html">lms_plugin_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00165">165</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="117b4bb24ec8fc48fc4e6f0d7fa9ea3a"></a><!-- doxytag: member="lightmediascanner.h::lms_progress_callback_t" ref="117b4bb24ec8fc48fc4e6f0d7fa9ea3a" args=")(lms_t *lms, const char *path, int path_len, lms_progress_status_t status, void *data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a>)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *path, int path_len, <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lms_progress_status_t</a> status, void *data) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00178">178</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d118599605b4e66ca5f91376982b8a64"></a><!-- doxytag: member="lightmediascanner.h::lms_t" ref="d118599605b4e66ca5f91376982b8a64" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structlms.html">lms</a> <a class="el" href="structlms.html">lms_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00164">164</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Enumeration Type Documentation</h2>
+<a class="anchor" name="52b270a30c58810720ae0650f64d2370"></a><!-- doxytag: member="lightmediascanner.h::lms_progress_status_t" ref="52b270a30c58810720ae0650f64d2370" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lms_progress_status_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="52b270a30c58810720ae0650f64d2370204315e58ce4b7dfa6421b4d1556655d"></a><!-- doxytag: member="LMS_PROGRESS_STATUS_UP_TO_DATE" ref="52b270a30c58810720ae0650f64d2370204315e58ce4b7dfa6421b4d1556655d" args="" -->LMS_PROGRESS_STATUS_UP_TO_DATE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70"></a><!-- doxytag: member="LMS_PROGRESS_STATUS_PROCESSED" ref="52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70" args="" -->LMS_PROGRESS_STATUS_PROCESSED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11"></a><!-- doxytag: member="LMS_PROGRESS_STATUS_DELETED" ref="52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11" args="" -->LMS_PROGRESS_STATUS_DELETED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152"></a><!-- doxytag: member="LMS_PROGRESS_STATUS_KILLED" ref="52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152" args="" -->LMS_PROGRESS_STATUS_KILLED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82"></a><!-- doxytag: member="LMS_PROGRESS_STATUS_ERROR_PARSE" ref="52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82" args="" -->LMS_PROGRESS_STATUS_ERROR_PARSE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082"></a><!-- doxytag: member="LMS_PROGRESS_STATUS_ERROR_COMM" ref="52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082" args="" -->LMS_PROGRESS_STATUS_ERROR_COMM</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c"></a><!-- doxytag: member="LMS_PROGRESS_STATUS_SKIPPED" ref="52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c" args="" -->LMS_PROGRESS_STATUS_SKIPPED</em> </td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00167">167</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="03afcd1e04665bdaebe73d9f6cc20553"></a><!-- doxytag: member="lightmediascanner.h::lms_charset_add" ref="03afcd1e04665bdaebe73d9f6cc20553" args="(lms_t *lms, const char *charset) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* API int API int lms_charset_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>charset</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="35fc2de4828878b9dec07e8edda8a5e2"></a><!-- doxytag: member="lightmediascanner.h::lms_charset_del" ref="35fc2de4828878b9dec07e8edda8a5e2" args="(lms_t *lms, const char *charset) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* API int API int API int lms_charset_del </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>charset</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5b70063cf19648de70bb145404aa3d0b"></a><!-- doxytag: member="lightmediascanner.h::lms_check" ref="5b70063cf19648de70bb145404aa3d0b" args="(lms_t *lms, const char *top_path) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int API int API int lms_check </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>top_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bfd6888e606654c585e41aa946637432"></a><!-- doxytag: member="lightmediascanner.h::lms_check_single_process" ref="bfd6888e606654c585e41aa946637432" args="(lms_t *lms, const char *top_path) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int API int API int API int lms_check_single_process </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>top_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ce55a5c9cc767b96fa6f24b77bebc7c3"></a><!-- doxytag: member="lightmediascanner.h::lms_parser_add" ref="ce55a5c9cc767b96fa6f24b77bebc7c3" args="(lms_t *lms, const char *so_path) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* lms_parser_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>so_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="5ba173b12c355bbdf7913bfff0ff6415"></a><!-- doxytag: member="lightmediascanner.h::lms_parser_del" ref="5ba173b12c355bbdf7913bfff0ff6415" args="(lms_t *lms, lms_plugin_t *handle) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* API int lms_parser_del </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td>
+ <td class="paramname"> <em>handle</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e48d0483903bbb9604d14b44f7c569d9"></a><!-- doxytag: member="lightmediascanner.h::lms_parser_find_and_add" ref="e48d0483903bbb9604d14b44f7c569d9" args="(lms_t *lms, const char *name) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* API <a class="el" href="structlms__plugin.html">lms_plugin_t</a>* lms_parser_find_and_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>name</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="bda4586257139ef13260e3fe3bfd1b77"></a><!-- doxytag: member="lightmediascanner.h::lms_parser_info" ref="bda4586257139ef13260e3fe3bfd1b77" args="(const char *so_path)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a>* <a class="el" href="structlms__parser__info.html">lms_parser_info</a> </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>so_path</em> </td>
+ <td> ) </td>
+ <td><code> [read]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get <a class="el" href="structparser.html">parser</a> information.<p>
+Information can be used to let user choose parsers on Graphical User Interfaces.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>so_path</em> </td><td>full path to module. </td></tr>
+ </table>
+</dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="lightmediascanner_8c.html#66457cf4ec2ef4a50bd899f99e914650">lms_parser_info_find()</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00699">699</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner_8h-source.html#l00204">lms_parser_info::authors</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00182">lms_plugin_info::authors</a>, <a class="el" href="lightmediascanner_8h-source.html#l00201">lms_parser_info::categories</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00179">lms_plugin_info::categories</a>, <a class="el" href="lightmediascanner_8h-source.html#l00202">lms_parser_info::description</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00180">lms_plugin_info::description</a>, <a class="el" href="lightmediascanner_8h-source.html#l00200">lms_parser_info::name</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00178">lms_plugin_info::name</a>, <a class="el" href="lightmediascanner_8h-source.html#l00199">lms_parser_info::path</a>, <a class="el" href="lightmediascanner_8h-source.html#l00205">lms_parser_info::uri</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00183">lms_plugin_info::uri</a>, <a class="el" href="lightmediascanner_8h-source.html#l00203">lms_parser_info::version</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00181">lms_plugin_info::version</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00824">lms_parser_info_find()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="85b153a95dafb48c419dc1419e323567"></a><!-- doxytag: member="lightmediascanner.h::lms_parser_info_find" ref="85b153a95dafb48c419dc1419e323567" args="(const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a>* lms_parser_info_find </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>name</em> </td>
+ <td> ) </td>
+ <td><code> [read]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Find <a class="el" href="structparser.html">parser</a> by name and get its information.<p>
+Information can be used to let user choose parsers on Graphical User Interfaces.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>name of .so to find the whole so_path and retrieve information. </td></tr>
+ </table>
+</dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info()</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00824">824</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="f071ee2184c0d4d69c85cccd09e08b26"></a><!-- doxytag: member="lightmediascanner.h::lms_parser_info_free" ref="f071ee2184c0d4d69c85cccd09e08b26" args="(struct lms_parser_info *info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API void lms_parser_info_free </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> * </td>
+ <td class="paramname"> <em>info</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Free previously returned information.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>it is safe to call with NULL. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00843">843</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="ebe19263efa873f4629a18e77924bfaf"></a><!-- doxytag: member="lightmediascanner.h::lms_parsers_list" ref="ebe19263efa873f4629a18e77924bfaf" args="(int(*cb)(void *data, const char *path), const void *data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API void lms_parsers_list </td>
+ <td>(</td>
+ <td class="paramtype">int(*)(void *data, const char *path) </td>
+ <td class="paramname"> <em>cb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> <em>data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+List all known parsers on the system.<p>
+No information is retrieved, you might like to call <a class="el" href="lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8">lms_parser_info()</a> on the callback path.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>cb</em> </td><td>function to call for each path found. If it returns 0, it stops iteraction. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>extra data to pass to <em>cb</em> on every call. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00540">540</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00629">lms_parsers_list_by_category()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f6dfb5e9ed76e132ee7f45e7fe26415e"></a><!-- doxytag: member="lightmediascanner.h::lms_parsers_list_by_category" ref="f6dfb5e9ed76e132ee7f45e7fe26415e" args="(const char *category, int(*cb)(void *data, const char *path, const struct lms_parser_info *info), const void *data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API void lms_parsers_list_by_category </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>category</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int(*)(void *data, const char *path, const struct <a class="el" href="structlms__parser__info.html">lms_parser_info</a> *info) </td>
+ <td class="paramname"> <em>cb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> <em>data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+List all known parsers of a given category.<p>
+Since we need information to figure out <a class="el" href="structparser.html">parser</a> category, these are passed as argument to callback, but you should NOT modify or reference it after callback function returns since it will be released after that.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>category</em> </td><td>which category to match. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>cb</em> </td><td>function to call for each path found. If it returns 0, it stops iteraction. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>extra data to pass to <em>cb</em> on every call. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00629">629</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner_8c-source.html#l00540">lms_parsers_list()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="7d2b81cfe07a8cce4c2bef705e7529f4"></a><!-- doxytag: member="lightmediascanner.h::lms_process" ref="7d2b81cfe07a8cce4c2bef705e7529f4" args="(lms_t *lms, const char *top_path) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_process </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>top_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="c5eda23c23b2ea76f001ac994c2ba9e2"></a><!-- doxytag: member="lightmediascanner.h::lms_process_single_process" ref="c5eda23c23b2ea76f001ac994c2ba9e2" args="(lms_t *lms, const char *top_path) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int API int lms_process_single_process </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>top_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="d2da241599f7f576670d64184f972c43"></a><!-- doxytag: member="lightmediascanner.h::lms_set_progress_callback" ref="d2da241599f7f576670d64184f972c43" args="(lms_t *lms, lms_progress_callback_t cb, const void *data, lms_free_callback_t free_data) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API void lms_set_progress_callback </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> </td>
+ <td class="paramname"> <em>cb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> <em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> </td>
+ <td class="paramname"> <em>free_data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set callback to be used to report progress (check and process).<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>cb</em> </td><td>function to call when files are processed or NULL to unset. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>data to give to cb when it's called, may be NULL. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>free_data</em> </td><td>function to call to free <em>data</em> when <a class="el" href="structlms.html">lms</a> is freed or new progress data is set. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00195">195</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00083">lms::cb</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00084">lms::data</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00085">lms::free_data</a>, and <a class="el" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">lms::progress</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="30aa1e83907fc1049d2adccb28eef489"></a><!-- doxytag: member="lightmediascanner.h::lms_stop_processing" ref="30aa1e83907fc1049d2adccb28eef489" args="(lms_t *lms) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int API int API int API int API void lms_stop_processing </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l01082">1082</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00088">lms::is_processing</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00089">lms::stop_processing</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_parser_info_find",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_parser_info",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html#0b95c1ed1a71c241bb887ee672f740d8"];
+}
--- /dev/null
+f04c80800232ad6da160032dcde58bae
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="src/lib/lightmediascanner.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html"];
+ Node1 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="src/lib/lightmediascanner_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html"];
+ Node3 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="src/lib/lightmediascanner_check.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__check_8c.html"];
+ Node3 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="src/lib/lightmediascanner_process.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__process_8c.html"];
+ Node1 -> Node6 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="src/lib/lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node6 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 -> Node7 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="src/lib/lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node7 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 -> Node8 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="src/lib/lightmediascanner_db_audio.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__audio_8c.html"];
+ Node7 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="src/lib/lightmediascanner_db_common.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html"];
+ Node7 -> Node10 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="src/lib/lightmediascanner_db_image.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__image_8c.html"];
+ Node7 -> Node11 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="src/lib/lightmediascanner_db_playlist.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__playlist_8c.html"];
+ Node7 -> Node12 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="src/lib/lightmediascanner_db_video.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__video_8c.html"];
+ Node7 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 -> Node13 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="src/lib/lightmediascanner_db.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db_8h.html"];
+ Node13 -> Node8 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 -> Node10 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 -> Node11 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 -> Node12 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
--- /dev/null
+fb6bdf1e0ebe19d8d91542d2a63618f8
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_parsers_list_by_category",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_parsers_list",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html#7e27ccbd0abfd5d112586a00fd424db9"];
+}
--- /dev/null
+6cbda567f6329b3dbe1e0ab331e3af46
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_charset_conv.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_charset_conv.c</h1><a href="lightmediascanner__charset__conv_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__charset__conv_8h.html">lightmediascanner_charset_conv.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include <iconv.h></span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include <string.h></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include <errno.h></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <ctype.h></span>
+<a name="l00028"></a>00028
+<a name="l00029"></a>00029 <span class="keyword">struct </span><a class="code" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lms_charset_conv</a> {
+<a name="l00030"></a>00030 iconv_t check;
+<a name="l00031"></a>00031 iconv_t fallback;
+<a name="l00032"></a>00032 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size;
+<a name="l00033"></a>00033 iconv_t *convs;
+<a name="l00034"></a>00034 <span class="keywordtype">char</span> **names;
+<a name="l00035"></a>00035 };
+<a name="l00036"></a>00036
+<a name="l00046"></a>00046 <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *
+<a name="l00047"></a><a class="code" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">00047</a> <a class="code" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lms_charset_conv_new_full</a>(<span class="keywordtype">int</span> use_check, <span class="keywordtype">int</span> use_fallback)
+<a name="l00048"></a>00048 {
+<a name="l00049"></a>00049 <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc;
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 lcc = malloc(<span class="keyword">sizeof</span>(*lcc));
+<a name="l00052"></a>00052 <span class="keywordflow">if</span> (!lcc) {
+<a name="l00053"></a>00053 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00054"></a>00054 <span class="keywordflow">return</span> NULL;
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keywordflow">if</span> (!use_check)
+<a name="l00058"></a>00058 lcc->check = (iconv_t)-1;
+<a name="l00059"></a>00059 <span class="keywordflow">else</span> {
+<a name="l00060"></a>00060 lcc->check = iconv_open(<span class="stringliteral">"UTF-8"</span>, <span class="stringliteral">"UTF-8"</span>);
+<a name="l00061"></a>00061 <span class="keywordflow">if</span> (lcc->check == (iconv_t)-1) {
+<a name="l00062"></a>00062 perror(<span class="stringliteral">"ERROR: could not create conversion checker"</span>);
+<a name="l00063"></a>00063 <span class="keywordflow">goto</span> error_check;
+<a name="l00064"></a>00064 }
+<a name="l00065"></a>00065 }
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="keywordflow">if</span> (!use_fallback)
+<a name="l00068"></a>00068 lcc->fallback = (iconv_t)-1;
+<a name="l00069"></a>00069 <span class="keywordflow">else</span> {
+<a name="l00070"></a>00070 lcc->fallback = iconv_open(<span class="stringliteral">"UTF-8//IGNORE"</span>, <span class="stringliteral">"UTF-8"</span>);
+<a name="l00071"></a>00071 <span class="keywordflow">if</span> (lcc->fallback == (iconv_t)-1) {
+<a name="l00072"></a>00072 perror(<span class="stringliteral">"ERROR: could not create conversion fallback"</span>);
+<a name="l00073"></a>00073 <span class="keywordflow">goto</span> error_fallback;
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075 }
+<a name="l00076"></a>00076
+<a name="l00077"></a>00077 lcc->size = 0;
+<a name="l00078"></a>00078 lcc->convs = NULL;
+<a name="l00079"></a>00079 lcc->names = NULL;
+<a name="l00080"></a>00080 <span class="keywordflow">return</span> lcc;
+<a name="l00081"></a>00081
+<a name="l00082"></a>00082 error_fallback:
+<a name="l00083"></a>00083 <span class="keywordflow">if</span> (lcc->check != (iconv_t)-1)
+<a name="l00084"></a>00084 iconv_close(lcc->check);
+<a name="l00085"></a>00085 error_check:
+<a name="l00086"></a>00086 free(lcc);
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088 <span class="keywordflow">return</span> NULL;
+<a name="l00089"></a>00089 }
+<a name="l00090"></a>00090
+<a name="l00100"></a>00100 <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *
+<a name="l00101"></a><a class="code" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">00101</a> <a class="code" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lms_charset_conv_new</a>(<span class="keywordtype">void</span>)
+<a name="l00102"></a>00102 {
+<a name="l00103"></a>00103 <span class="keywordflow">return</span> <a class="code" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lms_charset_conv_new_full</a>(1, 1);
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105
+<a name="l00111"></a>00111 <span class="keywordtype">void</span>
+<a name="l00112"></a><a class="code" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">00112</a> <a class="code" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lms_charset_conv_free</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc)
+<a name="l00113"></a>00113 {
+<a name="l00114"></a>00114 <span class="keywordtype">int</span> i;
+<a name="l00115"></a>00115
+<a name="l00116"></a>00116 <span class="keywordflow">if</span> (!lcc)
+<a name="l00117"></a>00117 <span class="keywordflow">return</span>;
+<a name="l00118"></a>00118
+<a name="l00119"></a>00119 <span class="keywordflow">if</span> (lcc->check != (iconv_t)-1)
+<a name="l00120"></a>00120 iconv_close(lcc->check);
+<a name="l00121"></a>00121 <span class="keywordflow">if</span> (lcc->fallback != (iconv_t)-1)
+<a name="l00122"></a>00122 iconv_close(lcc->fallback);
+<a name="l00123"></a>00123
+<a name="l00124"></a>00124 <span class="keywordflow">for</span> (i = 0; i < lcc->size; i++) {
+<a name="l00125"></a>00125 iconv_close(lcc->convs[i]);
+<a name="l00126"></a>00126 free(lcc->names[i]);
+<a name="l00127"></a>00127 }
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 <span class="keywordflow">if</span> (lcc->convs)
+<a name="l00130"></a>00130 free(lcc->convs);
+<a name="l00131"></a>00131 <span class="keywordflow">if</span> (lcc->names)
+<a name="l00132"></a>00132 free(lcc->names);
+<a name="l00133"></a>00133 free(lcc);
+<a name="l00134"></a>00134 }
+<a name="l00135"></a>00135
+<a name="l00144"></a>00144 <span class="keywordtype">int</span>
+<a name="l00145"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">00145</a> <a class="code" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">lms_charset_conv_add</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset)
+<a name="l00146"></a>00146 {
+<a name="l00147"></a>00147 iconv_t cd, *convs;
+<a name="l00148"></a>00148 <span class="keywordtype">char</span> **names;
+<a name="l00149"></a>00149 <span class="keywordtype">int</span> idx, ns;
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151 <span class="keywordflow">if</span> (!lcc)
+<a name="l00152"></a>00152 <span class="keywordflow">return</span> -1;
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154 <span class="keywordflow">if</span> (!charset)
+<a name="l00155"></a>00155 <span class="keywordflow">return</span> -2;
+<a name="l00156"></a>00156
+<a name="l00157"></a>00157 cd = iconv_open(<span class="stringliteral">"UTF-8"</span>, charset);
+<a name="l00158"></a>00158 <span class="keywordflow">if</span> (cd == (iconv_t)-1) {
+<a name="l00159"></a>00159 fprintf(stderr, <span class="stringliteral">"ERROR: could not add conversion charset '%s': %s\n"</span>,
+<a name="l00160"></a>00160 charset, strerror(errno));
+<a name="l00161"></a>00161 <span class="keywordflow">return</span> -3;
+<a name="l00162"></a>00162 }
+<a name="l00163"></a>00163
+<a name="l00164"></a>00164 idx = lcc->size;
+<a name="l00165"></a>00165 ns = lcc->size + 1;
+<a name="l00166"></a>00166
+<a name="l00167"></a>00167 convs = realloc(lcc->convs, ns * <span class="keyword">sizeof</span>(*convs));
+<a name="l00168"></a>00168 <span class="keywordflow">if</span> (!convs)
+<a name="l00169"></a>00169 <span class="keywordflow">goto</span> realloc_error;
+<a name="l00170"></a>00170 lcc->convs = convs;
+<a name="l00171"></a>00171 lcc->convs[idx] = cd;
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 names = realloc(lcc->names, ns * <span class="keyword">sizeof</span>(*names));
+<a name="l00174"></a>00174 <span class="keywordflow">if</span> (!names)
+<a name="l00175"></a>00175 <span class="keywordflow">goto</span> realloc_error;
+<a name="l00176"></a>00176 lcc->names = names;
+<a name="l00177"></a>00177 lcc->names[idx] = strdup(charset);
+<a name="l00178"></a>00178 <span class="keywordflow">if</span> (!lcc->names[idx])
+<a name="l00179"></a>00179 <span class="keywordflow">goto</span> realloc_error;
+<a name="l00180"></a>00180
+<a name="l00181"></a>00181 lcc->size = ns;
+<a name="l00182"></a>00182 <span class="keywordflow">return</span> 0;
+<a name="l00183"></a>00183
+<a name="l00184"></a>00184 realloc_error:
+<a name="l00185"></a>00185 perror(<span class="stringliteral">"realloc"</span>);
+<a name="l00186"></a>00186 iconv_close(cd);
+<a name="l00187"></a>00187 <span class="keywordflow">return</span> -4;
+<a name="l00188"></a>00188 }
+<a name="l00189"></a>00189
+<a name="l00190"></a>00190 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00191"></a>00191 _find(<span class="keyword">const</span> <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset)
+<a name="l00192"></a>00192 {
+<a name="l00193"></a>00193 <span class="keywordtype">int</span> i;
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195 <span class="keywordflow">for</span> (i = 0; i < lcc->size; i++)
+<a name="l00196"></a>00196 <span class="keywordflow">if</span> (strcmp(lcc->names[i], charset) == 0)
+<a name="l00197"></a>00197 <span class="keywordflow">return</span> i;
+<a name="l00198"></a>00198
+<a name="l00199"></a>00199 <span class="keywordflow">return</span> -1;
+<a name="l00200"></a>00200 }
+<a name="l00201"></a>00201
+<a name="l00210"></a>00210 <span class="keywordtype">int</span>
+<a name="l00211"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">00211</a> <a class="code" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">lms_charset_conv_del</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset)
+<a name="l00212"></a>00212 {
+<a name="l00213"></a>00213 iconv_t *convs;
+<a name="l00214"></a>00214 <span class="keywordtype">char</span> **names;
+<a name="l00215"></a>00215 <span class="keywordtype">int</span> idx;
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 <span class="keywordflow">if</span> (!lcc)
+<a name="l00218"></a>00218 <span class="keywordflow">return</span> -1;
+<a name="l00219"></a>00219
+<a name="l00220"></a>00220 <span class="keywordflow">if</span> (!charset)
+<a name="l00221"></a>00221 <span class="keywordflow">return</span> -2;
+<a name="l00222"></a>00222
+<a name="l00223"></a>00223 idx = _find(lcc, charset);
+<a name="l00224"></a>00224 <span class="keywordflow">if</span> (idx < 0) {
+<a name="l00225"></a>00225 fprintf(stderr, <span class="stringliteral">"ERROR: could not find charset '%s'\n"</span>, charset);
+<a name="l00226"></a>00226 <span class="keywordflow">return</span> -3;
+<a name="l00227"></a>00227 }
+<a name="l00228"></a>00228
+<a name="l00229"></a>00229 iconv_close(lcc->convs[idx]);
+<a name="l00230"></a>00230 free(lcc->names[idx]);
+<a name="l00231"></a>00231
+<a name="l00232"></a>00232 lcc->size--;
+<a name="l00233"></a>00233 <span class="keywordflow">for</span> (; idx < lcc->size; idx++) {
+<a name="l00234"></a>00234 lcc->convs[idx] = lcc->convs[idx + 1];
+<a name="l00235"></a>00235 lcc->names[idx] = lcc->names[idx + 1];
+<a name="l00236"></a>00236 }
+<a name="l00237"></a>00237
+<a name="l00238"></a>00238 convs = realloc(lcc->convs, lcc->size * <span class="keyword">sizeof</span>(*convs));
+<a name="l00239"></a>00239 <span class="keywordflow">if</span> (convs)
+<a name="l00240"></a>00240 lcc->convs = convs;
+<a name="l00241"></a>00241 <span class="keywordflow">else</span>
+<a name="l00242"></a>00242 perror(<span class="stringliteral">"could not realloc 'convs'"</span>);
+<a name="l00243"></a>00243
+<a name="l00244"></a>00244 names = realloc(lcc->names, lcc->size * <span class="keyword">sizeof</span>(*names));
+<a name="l00245"></a>00245 <span class="keywordflow">if</span> (names)
+<a name="l00246"></a>00246 lcc->names = names;
+<a name="l00247"></a>00247 <span class="keywordflow">else</span>
+<a name="l00248"></a>00248 perror(<span class="stringliteral">"could not realloc 'names'"</span>);
+<a name="l00249"></a>00249
+<a name="l00250"></a>00250 <span class="keywordflow">return</span> 0;
+<a name="l00251"></a>00251 }
+<a name="l00252"></a>00252
+<a name="l00253"></a>00253 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00254"></a>00254 _check(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keyword">const</span> <span class="keywordtype">char</span> *istr, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ilen, <span class="keywordtype">char</span> *ostr, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> olen)
+<a name="l00255"></a>00255 {
+<a name="l00256"></a>00256 <span class="keywordtype">char</span> *inbuf, *outbuf;
+<a name="l00257"></a>00257 <span class="keywordtype">size_t</span> r, inlen, outlen;
+<a name="l00258"></a>00258
+<a name="l00259"></a>00259 <span class="keywordflow">if</span> (lcc->check == (iconv_t)-1)
+<a name="l00260"></a>00260 <span class="keywordflow">return</span> -1;
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 inbuf = (<span class="keywordtype">char</span> *)istr;
+<a name="l00263"></a>00263 inlen = ilen;
+<a name="l00264"></a>00264 outbuf = ostr;
+<a name="l00265"></a>00265 outlen = olen;
+<a name="l00266"></a>00266
+<a name="l00267"></a>00267 iconv(lcc->check, NULL, NULL, NULL, NULL);
+<a name="l00268"></a>00268 r = iconv(lcc->check, &inbuf, &inlen, &outbuf, &outlen);
+<a name="l00269"></a>00269 <span class="keywordflow">if</span> (r == (<span class="keywordtype">size_t</span>)-1)
+<a name="l00270"></a>00270 <span class="keywordflow">return</span> -1;
+<a name="l00271"></a>00271 <span class="keywordflow">else</span>
+<a name="l00272"></a>00272 <span class="keywordflow">return</span> 0;
+<a name="l00273"></a>00273 }
+<a name="l00274"></a>00274
+<a name="l00275"></a>00275 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00276"></a>00276 _conv(iconv_t cd, <span class="keywordtype">char</span> **p_str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len, <span class="keywordtype">char</span> *ostr, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> olen)
+<a name="l00277"></a>00277 {
+<a name="l00278"></a>00278 <span class="keywordtype">char</span> *inbuf, *outbuf;
+<a name="l00279"></a>00279 <span class="keywordtype">size_t</span> r, inlen, outlen;
+<a name="l00280"></a>00280
+<a name="l00281"></a>00281 inbuf = *p_str;
+<a name="l00282"></a>00282 inlen = *p_len;
+<a name="l00283"></a>00283 outbuf = ostr;
+<a name="l00284"></a>00284 outlen = olen;
+<a name="l00285"></a>00285
+<a name="l00286"></a>00286 iconv(cd, NULL, NULL, NULL, NULL);
+<a name="l00287"></a>00287 r = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
+<a name="l00288"></a>00288 <span class="keywordflow">if</span> (r == (<span class="keywordtype">size_t</span>)-1)
+<a name="l00289"></a>00289 <span class="keywordflow">return</span> -1;
+<a name="l00290"></a>00290
+<a name="l00291"></a>00291 *p_len = olen - outlen;
+<a name="l00292"></a>00292 free(*p_str);
+<a name="l00293"></a>00293 *p_str = ostr;
+<a name="l00294"></a>00294
+<a name="l00295"></a>00295 outbuf = realloc(*p_str, *p_len + 1);
+<a name="l00296"></a>00296 <span class="keywordflow">if</span> (!outbuf)
+<a name="l00297"></a>00297 perror(<span class="stringliteral">"realloc"</span>);
+<a name="l00298"></a>00298 <span class="keywordflow">else</span>
+<a name="l00299"></a>00299 *p_str = outbuf;
+<a name="l00300"></a>00300
+<a name="l00301"></a>00301 (*p_str)[*p_len] = <span class="charliteral">'\0'</span>;
+<a name="l00302"></a>00302
+<a name="l00303"></a>00303 <span class="keywordflow">return</span> 0;
+<a name="l00304"></a>00304 }
+<a name="l00305"></a>00305
+<a name="l00306"></a>00306 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00307"></a>00307 _fix_non_ascii(<span class="keywordtype">char</span> *s, <span class="keywordtype">int</span> len)
+<a name="l00308"></a>00308 {
+<a name="l00309"></a>00309 <span class="keywordflow">for</span> (; len > 0; len--, s++)
+<a name="l00310"></a>00310 <span class="keywordflow">if</span> (!isprint(*s))
+<a name="l00311"></a>00311 *s = <span class="charliteral">'?'</span>;
+<a name="l00312"></a>00312 }
+<a name="l00313"></a>00313
+<a name="l00327"></a>00327 <span class="keywordtype">int</span>
+<a name="l00328"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">00328</a> <a class="code" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lms_charset_conv</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keywordtype">char</span> **p_str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len)
+<a name="l00329"></a>00329 {
+<a name="l00330"></a>00330 <span class="keywordtype">char</span> *outstr;
+<a name="l00331"></a>00331 <span class="keywordtype">int</span> i, outlen;
+<a name="l00332"></a>00332
+<a name="l00333"></a>00333 <span class="keywordflow">if</span> (!lcc)
+<a name="l00334"></a>00334 <span class="keywordflow">return</span> -1;
+<a name="l00335"></a>00335 <span class="keywordflow">if</span> (!p_str)
+<a name="l00336"></a>00336 <span class="keywordflow">return</span> -2;
+<a name="l00337"></a>00337 <span class="keywordflow">if</span> (!p_len)
+<a name="l00338"></a>00338 <span class="keywordflow">return</span> -3;
+<a name="l00339"></a>00339 <span class="keywordflow">if</span> (!*p_str || !*p_len)
+<a name="l00340"></a>00340 <span class="keywordflow">return</span> 0;
+<a name="l00341"></a>00341
+<a name="l00342"></a>00342 outlen = 2 * *p_len;
+<a name="l00343"></a>00343 outstr = malloc(outlen + 1);
+<a name="l00344"></a>00344 <span class="keywordflow">if</span> (!outstr) {
+<a name="l00345"></a>00345 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00346"></a>00346 <span class="keywordflow">return</span> -4;
+<a name="l00347"></a>00347 }
+<a name="l00348"></a>00348
+<a name="l00349"></a>00349 <span class="keywordflow">if</span> (_check(lcc, *p_str, *p_len, outstr, outlen) == 0) {
+<a name="l00350"></a>00350 free(outstr);
+<a name="l00351"></a>00351 <span class="keywordflow">return</span> 0;
+<a name="l00352"></a>00352 }
+<a name="l00353"></a>00353
+<a name="l00354"></a>00354 <span class="keywordflow">for</span> (i = 0; i < lcc->size; i++)
+<a name="l00355"></a>00355 <span class="keywordflow">if</span> (_conv(lcc->convs[i], p_str, p_len, outstr, outlen) == 0)
+<a name="l00356"></a>00356 <span class="keywordflow">return</span> 0;
+<a name="l00357"></a>00357
+<a name="l00358"></a>00358 <span class="keywordflow">if</span> (lcc->fallback == (iconv_t)-1)
+<a name="l00359"></a>00359 <span class="keywordflow">return</span> -5;
+<a name="l00360"></a>00360
+<a name="l00361"></a>00361 fprintf(stderr,
+<a name="l00362"></a>00362 <span class="stringliteral">"WARNING: could not convert '%*s' to any charset, use fallback\n"</span>,
+<a name="l00363"></a>00363 *p_len, *p_str);
+<a name="l00364"></a>00364 i = _conv(lcc->fallback, p_str, p_len, outstr, outlen);
+<a name="l00365"></a>00365 <span class="keywordflow">if</span> (i < 0) {
+<a name="l00366"></a>00366 _fix_non_ascii(*p_str, *p_len);
+<a name="l00367"></a>00367 free(outstr);
+<a name="l00368"></a>00368 }
+<a name="l00369"></a>00369 <span class="keywordflow">return</span> i;
+<a name="l00370"></a>00370 }
+<a name="l00371"></a>00371
+<a name="l00385"></a>00385 <span class="keywordtype">int</span>
+<a name="l00386"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#8ea844f16120ba4000b7b142192e91e4">00386</a> <a class="code" href="lightmediascanner__charset__conv_8c.html#8ea844f16120ba4000b7b142192e91e4">lms_charset_conv_force</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keywordtype">char</span> **p_str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len)
+<a name="l00387"></a>00387 {
+<a name="l00388"></a>00388 <span class="keywordtype">char</span> *outstr;
+<a name="l00389"></a>00389 <span class="keywordtype">int</span> i, outlen;
+<a name="l00390"></a>00390
+<a name="l00391"></a>00391 <span class="keywordflow">if</span> (!lcc)
+<a name="l00392"></a>00392 <span class="keywordflow">return</span> -1;
+<a name="l00393"></a>00393 <span class="keywordflow">if</span> (!p_str)
+<a name="l00394"></a>00394 <span class="keywordflow">return</span> -2;
+<a name="l00395"></a>00395 <span class="keywordflow">if</span> (!p_len)
+<a name="l00396"></a>00396 <span class="keywordflow">return</span> -3;
+<a name="l00397"></a>00397 <span class="keywordflow">if</span> (!*p_str || !*p_len)
+<a name="l00398"></a>00398 <span class="keywordflow">return</span> 0;
+<a name="l00399"></a>00399
+<a name="l00400"></a>00400 outlen = 2 * *p_len;
+<a name="l00401"></a>00401 outstr = malloc(outlen + 1);
+<a name="l00402"></a>00402 <span class="keywordflow">if</span> (!outstr) {
+<a name="l00403"></a>00403 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00404"></a>00404 <span class="keywordflow">return</span> -4;
+<a name="l00405"></a>00405 }
+<a name="l00406"></a>00406
+<a name="l00407"></a>00407 <span class="keywordflow">for</span> (i = 0; i < lcc->size; i++)
+<a name="l00408"></a>00408 <span class="keywordflow">if</span> (_conv(lcc->convs[i], p_str, p_len, outstr, outlen) == 0)
+<a name="l00409"></a>00409 <span class="keywordflow">return</span> 0;
+<a name="l00410"></a>00410
+<a name="l00411"></a>00411 <span class="keywordflow">if</span> (lcc->fallback == (iconv_t)-1)
+<a name="l00412"></a>00412 <span class="keywordflow">return</span> -5;
+<a name="l00413"></a>00413
+<a name="l00414"></a>00414 fprintf(stderr,
+<a name="l00415"></a>00415 <span class="stringliteral">"WARNING: could not convert '%*s' to any charset, use fallback\n"</span>,
+<a name="l00416"></a>00416 *p_len, *p_str);
+<a name="l00417"></a>00417 i = _conv(lcc->fallback, p_str, p_len, outstr, outlen);
+<a name="l00418"></a>00418 <span class="keywordflow">if</span> (i < 0) {
+<a name="l00419"></a>00419 _fix_non_ascii(*p_str, *p_len);
+<a name="l00420"></a>00420 free(outstr);
+<a name="l00421"></a>00421 }
+<a name="l00422"></a>00422 <span class="keywordflow">return</span> i;
+<a name="l00423"></a>00423 }
+<a name="l00424"></a>00424
+<a name="l00439"></a>00439 <span class="keywordtype">int</span>
+<a name="l00440"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#f069b89e828896690fdd919e5b042c7d">00440</a> <a class="code" href="lightmediascanner__charset__conv_8c.html#f069b89e828896690fdd919e5b042c7d">lms_charset_conv_check</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len)
+<a name="l00441"></a>00441 {
+<a name="l00442"></a>00442 <span class="keywordtype">char</span> *outstr;
+<a name="l00443"></a>00443 <span class="keywordtype">int</span> r, outlen;
+<a name="l00444"></a>00444
+<a name="l00445"></a>00445 <span class="keywordflow">if</span> (!lcc)
+<a name="l00446"></a>00446 <span class="keywordflow">return</span> -1;
+<a name="l00447"></a>00447 <span class="keywordflow">if</span> (!str || !len)
+<a name="l00448"></a>00448 <span class="keywordflow">return</span> 0;
+<a name="l00449"></a>00449
+<a name="l00450"></a>00450 outlen = 2 * len;
+<a name="l00451"></a>00451 outstr = malloc(outlen);
+<a name="l00452"></a>00452 <span class="keywordflow">if</span> (!outstr) {
+<a name="l00453"></a>00453 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00454"></a>00454 <span class="keywordflow">return</span> -2;
+<a name="l00455"></a>00455 }
+<a name="l00456"></a>00456
+<a name="l00457"></a>00457 r = _check(lcc, str, len, outstr, outlen);
+<a name="l00458"></a>00458 free(outstr);
+<a name="l00459"></a>00459 <span class="keywordflow">return</span> r;
+<a name="l00460"></a>00460 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_charset_conv.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_charset_conv.c File Reference</h1><code>#include "<a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>"</code><br>
+<code>#include <iconv.h></code><br>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <string.h></code><br>
+<code>#include <errno.h></code><br>
+<code>#include <ctype.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_charset_conv.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__charset__conv_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lms_charset_conv_new_full</a> (int use_check, int use_fallback)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lms_charset_conv_new</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lms_charset_conv_free</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">lms_charset_conv_add</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *charset)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">lms_charset_conv_del</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *charset)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lms_charset_conv</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, char **p_str, unsigned int *p_len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8c.html#8ea844f16120ba4000b7b142192e91e4">lms_charset_conv_force</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, char **p_str, unsigned int *p_len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8c.html#f069b89e828896690fdd919e5b042c7d">lms_charset_conv_check</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *str, unsigned int len)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="35b728d3c5cb940027ebc47589971b25"></a><!-- doxytag: member="lightmediascanner_charset_conv.c::lms_charset_conv" ref="35b728d3c5cb940027ebc47589971b25" args="(lms_charset_conv_t *lcc, char **p_str, unsigned int *p_len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_charset_conv </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"> <em>p_str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int * </td>
+ <td class="paramname"> <em>p_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+If required, do charset conversion to UTF-8.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lcc</em> </td><td>existing Light Media Scanner charset conversion. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>p_str</em> </td><td>string to be converted. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>p_len</em> </td><td>string size.</td></tr>
+ </table>
+</dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>the check for string being already UTF-8 is not reliable, some cases might show false positives (UTF-16 is considered UTF-8). </dd></dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="lightmediascanner__charset__conv_8c.html#f069b89e828896690fdd919e5b042c7d">lms_charset_conv_check()</a></dd></dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00328">328</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="0a3006beae6fc8c59eca75468c1bc000"></a><!-- doxytag: member="lightmediascanner_charset_conv.c::lms_charset_conv_add" ref="0a3006beae6fc8c59eca75468c1bc000" args="(lms_charset_conv_t *lcc, const char *charset)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_charset_conv_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>charset</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Register new charset to conversion tool.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lcc</em> </td><td>existing Light Media Scanner charset conversion. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>charset</em> </td><td>charset name as understood by iconv_open(3).</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00145">145</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00496">lms_charset_add()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f069b89e828896690fdd919e5b042c7d"></a><!-- doxytag: member="lightmediascanner_charset_conv.c::lms_charset_conv_check" ref="f069b89e828896690fdd919e5b042c7d" args="(lms_charset_conv_t *lcc, const char *str, unsigned int len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_charset_conv_check </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Check if strings is not UTF-8 and conversion is required.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lcc</em> </td><td>existing Light Media Scanner charset conversion. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str</em> </td><td>string to be analysed. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>len</em> </td><td>string size.</td></tr>
+ </table>
+</dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>current implementation is not reliable, it tries to convert from UTF-8 to UTF-8. Some cases, like ISO-8859-1 will work, but some like UTF-16 to UTF-8 will say it's already in the correct charset, even if it's not.</dd></dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if string is already UTF-8. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00440">440</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="ad60dd3a2c2ebcf9ee1100986fc572e4"></a><!-- doxytag: member="lightmediascanner_charset_conv.c::lms_charset_conv_del" ref="ad60dd3a2c2ebcf9ee1100986fc572e4" args="(lms_charset_conv_t *lcc, const char *charset)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_charset_conv_del </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>charset</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Forget about previously registered charset in conversion tool.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lcc</em> </td><td>existing Light Media Scanner charset conversion. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>charset</em> </td><td>charset name.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00211">211</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00519">lms_charset_del()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="8ea844f16120ba4000b7b142192e91e4"></a><!-- doxytag: member="lightmediascanner_charset_conv.c::lms_charset_conv_force" ref="8ea844f16120ba4000b7b142192e91e4" args="(lms_charset_conv_t *lcc, char **p_str, unsigned int *p_len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_charset_conv_force </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td>
+ <td class="paramname"> <em>lcc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"> <em>p_str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int * </td>
+ <td class="paramname"> <em>p_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Forcefully do charset conversion to UTF-8.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lcc</em> </td><td>existing Light Media Scanner charset conversion. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>p_str</em> </td><td>string to be converted. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>p_len</em> </td><td>string size.</td></tr>
+ </table>
+</dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>This function does not check for the string being in UTF-8 before doing the conversion, use it if you are sure about the charset. In this case you'll usually have just one charset added.</dd></dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00386">386</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_charset_conv.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="iconv.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="string.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="errno.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="ctype.h",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+42e4a30fd4890b6609d2b4c1f4c3171a
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_charset_conv.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_charset_conv.h</h1><a href="lightmediascanner__charset__conv_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_CHARSET_CONV_H_</span>
+<a name="l00022"></a><a class="code" href="lightmediascanner__charset__conv_8h.html#79f872f99949ecde4c1661e4b78b4c2b">00022</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_CHARSET_CONV_H_ 1</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#ifdef GNUC_MALLOC</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#undef GNUC_MALLOC</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#ifdef GNUC_WARN_UNUSED_RESULT</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#undef GNUC_WARN_UNUSED_RESULT</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#ifdef GNUC_NON_NULL</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#undef GNUC_NON_NULL</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#ifdef API</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#undef API</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00037"></a>00037 <span class="preprocessor">#ifdef __GNUC__</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC __attribute__((__malloc__))</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT __attribute__((warn_unused_result))</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...) __attribute__((nonnull(__VA_ARGS__)))</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ >= 4</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor"># define API __attribute__ ((visibility("default")))</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00056"></a><a class="code" href="lightmediascanner__charset__conv_8h.html#2213ea4dca0e242f957f63988caab768">00056</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC</span>
+<a name="l00057"></a><a class="code" href="lightmediascanner__charset__conv_8h.html#34c563f40a0f86e597c51f1556669521">00057</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT</span>
+<a name="l00058"></a><a class="code" href="lightmediascanner__charset__conv_8h.html#6fe68cac0abf3e2ca61141920414e93a">00058</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00059"></a><a class="code" href="lightmediascanner__charset__conv_8h.html#d8ce4efaa307683d3d763b37b4711c53">00059</a> <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span>
+<a name="l00062"></a>00062 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00064"></a>00064 <span class="preprocessor">#endif</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00072"></a><a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">00072</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lms_charset_conv</a> <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a>;
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *<a class="code" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lms_charset_conv_new_full</a>(<span class="keywordtype">int</span> use_check, <span class="keywordtype">int</span> use_fallback) <a class="code" href="lightmediascanner_8h.html#2213ea4dca0e242f957f63988caab768">GNUC_MALLOC</a> <a class="code" href="lightmediascanner_8h.html#34c563f40a0f86e597c51f1556669521">GNUC_WARN_UNUSED_RESULT</a>;
+<a name="l00075"></a>00075 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *<a class="code" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lms_charset_conv_new</a>(<span class="keywordtype">void</span>) <a class="code" href="lightmediascanner_8h.html#2213ea4dca0e242f957f63988caab768">GNUC_MALLOC</a> GNUC_WARN_UNUSED_RESULT;
+<a name="l00076"></a>00076 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lms_charset_conv_free</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00077"></a>00077 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">lms_charset_conv_add</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const <span class="keywordtype">char</span> *charset) GNUC_NON_NULL(1, 2);
+<a name="l00078"></a>00078 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">lms_charset_conv_del</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const <span class="keywordtype">char</span> *charset) GNUC_NON_NULL(1, 2);
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lms_charset_conv</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keywordtype">char</span> **p_str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len) GNUC_NON_NULL(1, 2, 3);
+<a name="l00081"></a>00081 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__charset__conv_8c.html#8ea844f16120ba4000b7b142192e91e4">lms_charset_conv_force</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, <span class="keywordtype">char</span> **p_str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len) GNUC_NON_NULL(1, 2, 3);
+<a name="l00082"></a>00082 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__charset__conv_8c.html#f069b89e828896690fdd919e5b042c7d">lms_charset_conv_check</a>(<a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const <span class="keywordtype">char</span> *str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len) GNUC_NON_NULL(1, 2);
+<a name="l00083"></a>00083
+<a name="l00087"></a>00087 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span>}
+<a name="l00089"></a>00089 <span class="preprocessor">#endif</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_CHARSET_CONV_H_ */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_charset_conv.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_charset_conv.h File Reference</h1>
+<p>
+<div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__charset__conv_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8h.html#79f872f99949ecde4c1661e4b78b4c2b">_LIGHTMEDIASCANNER_CHARSET_CONV_H_</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8h.html#2213ea4dca0e242f957f63988caab768">GNUC_MALLOC</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8h.html#34c563f40a0f86e597c51f1556669521">GNUC_WARN_UNUSED_RESULT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(...)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__charset__conv_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_charset_conv </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g893421821eacaa0fd2020c872361af15">lms_charset_conv_new_full</a> (int use_check, int use_fallback) GNUC_MALLOC GNUC_WARN_UNUSED_RESULT</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lms_charset_conv_new</a> (void) GNUC_MALLOC GNUC_WARN_UNUSED_RESULT</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lms_charset_conv_free</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#gfc1aad4c212b5fa1ce7280d2b7df3ef7">lms_charset_conv_add</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *charset) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#gc364c502a4a4a64ea9f092a61074a90a">lms_charset_conv_del</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *charset) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#gd843f59abac208048f13437534d589fc">lms_charset_conv</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, char **p_str, unsigned int *p_len) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g9a610040a6380c745277effc5c4c9112">lms_charset_conv_force</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, char **p_str, unsigned int *p_len) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int API int API int API <br class="typebreak">
+int API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#gbc8903e67c3c7eefa902cbb2bd5e3338">lms_charset_conv_check</a> (<a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc, const char *str, unsigned int len) GNUC_NON_NULL(1</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="79f872f99949ecde4c1661e4b78b4c2b"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::_LIGHTMEDIASCANNER_CHARSET_CONV_H_" ref="79f872f99949ecde4c1661e4b78b4c2b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _LIGHTMEDIASCANNER_CHARSET_CONV_H_ 1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8h-source.html#l00022">22</a> of file <a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d8ce4efaa307683d3d763b37b4711c53"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::API" ref="d8ce4efaa307683d3d763b37b4711c53" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define API </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8h-source.html#l00059">59</a> of file <a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="2213ea4dca0e242f957f63988caab768"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::GNUC_MALLOC" ref="2213ea4dca0e242f957f63988caab768" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_MALLOC </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8h-source.html#l00056">56</a> of file <a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6fe68cac0abf3e2ca61141920414e93a"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::GNUC_NON_NULL" ref="6fe68cac0abf3e2ca61141920414e93a" args="(...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_NON_NULL </td>
+ <td>(</td>
+ <td class="paramtype"> <em>...</em> </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8h-source.html#l00058">58</a> of file <a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="34c563f40a0f86e597c51f1556669521"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::GNUC_WARN_UNUSED_RESULT" ref="34c563f40a0f86e597c51f1556669521" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_WARN_UNUSED_RESULT </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__charset__conv_8h-source.html#l00057">57</a> of file <a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="src/lib/lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node2 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="src/lib/lightmediascanner_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html"];
+ Node3 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="src/lib/lightmediascanner.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html"];
+ Node3 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="src/lib/lightmediascanner_check.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__check_8c.html"];
+ Node3 -> Node6 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="src/lib/lightmediascanner_process.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__process_8c.html"];
+ Node2 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 -> Node7 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="src/lib/lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node7 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 -> Node8 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="src/lib/lightmediascanner_db_audio.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__audio_8c.html"];
+ Node7 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="src/lib/lightmediascanner_db_common.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html"];
+ Node7 -> Node10 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="src/lib/lightmediascanner_db_image.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__image_8c.html"];
+ Node7 -> Node11 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="src/lib/lightmediascanner_db_playlist.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__playlist_8c.html"];
+ Node7 -> Node12 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="src/lib/lightmediascanner_db_video.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__video_8c.html"];
+ Node7 -> Node6 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 -> Node13 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="src/lib/lightmediascanner_db.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db_8h.html"];
+ Node13 -> Node8 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 -> Node10 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 -> Node11 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 -> Node12 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node14 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="src/lib/lightmediascanner_charset_conv.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8c.html"];
+}
--- /dev/null
+a8d763a8ab47ffcb4f3327d64ff7c79d
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_check.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_check.c</h1><a href="lightmediascanner__check_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include "config.h"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#endif</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span>
+<a name="l00025"></a><a class="code" href="lightmediascanner__check_8c.html#369266c24eacffb87046522897a570d5">00025</a> <span class="preprocessor">#define _GNU_SOURCE</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#include <sys/wait.h></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <sys/stat.h></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include <unistd.h></span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include <dirent.h></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include <signal.h></span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include <time.h></span>
+<a name="l00032"></a>00032
+<a name="l00033"></a>00033 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="lightmediascanner_8h.html">lightmediascanner.h</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__private_8h.html">lightmediascanner_private.h</a>"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041 <span class="keyword">struct </span>master_db {
+<a name="l00042"></a>00042 sqlite3 *handle;
+<a name="l00043"></a>00043 sqlite3_stmt *get_files;
+<a name="l00044"></a>00044 };
+<a name="l00045"></a>00045
+<a name="l00046"></a>00046 <span class="keyword">struct </span>slave_db {
+<a name="l00047"></a>00047 sqlite3 *handle;
+<a name="l00048"></a>00048 sqlite3_stmt *transaction_begin;
+<a name="l00049"></a>00049 sqlite3_stmt *transaction_commit;
+<a name="l00050"></a>00050 sqlite3_stmt *delete_file_info;
+<a name="l00051"></a>00051 sqlite3_stmt *update_file_info;
+<a name="l00052"></a>00052 };
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="keyword">struct </span>single_process_db {
+<a name="l00055"></a>00055 sqlite3 *handle;
+<a name="l00056"></a>00056 sqlite3_stmt *get_files;
+<a name="l00057"></a>00057 sqlite3_stmt *transaction_begin;
+<a name="l00058"></a>00058 sqlite3_stmt *transaction_commit;
+<a name="l00059"></a>00059 sqlite3_stmt *delete_file_info;
+<a name="l00060"></a>00060 sqlite3_stmt *update_file_info;
+<a name="l00061"></a>00061 };
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="comment">/***********************************************************************</span>
+<a name="l00064"></a>00064 <span class="comment"> * Master-Slave communication.</span>
+<a name="l00065"></a>00065 <span class="comment"> ***********************************************************************/</span>
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="keyword">struct </span>comm_finfo {
+<a name="l00068"></a>00068 <span class="keywordtype">int</span> path_len;
+<a name="l00069"></a>00069 <span class="keywordtype">int</span> base;
+<a name="l00070"></a>00070 int64_t id;
+<a name="l00071"></a>00071 time_t mtime;
+<a name="l00072"></a>00072 time_t dtime;
+<a name="l00073"></a>00073 <span class="keywordtype">size_t</span> size;
+<a name="l00074"></a>00074 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags;
+<a name="l00075"></a><a class="code" href="lightmediascanner__check_8c.html#f8084f435d209d810eb33deaa35fab5e">00075</a> <span class="preprocessor">#define COMM_FINFO_FLAG_OUTDATED 1</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>};
+<a name="l00077"></a>00077
+<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00079"></a>00079 _master_send_file(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *master, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> finfo, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
+<a name="l00080"></a>00080 {
+<a name="l00081"></a>00081 <span class="keyword">struct </span>comm_finfo ci;
+<a name="l00082"></a>00082
+<a name="l00083"></a>00083 ci.path_len = finfo.<a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>;
+<a name="l00084"></a>00084 ci.base = finfo.<a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a>;
+<a name="l00085"></a>00085 ci.id = finfo.<a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a>;
+<a name="l00086"></a>00086 ci.mtime = finfo.<a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a>;
+<a name="l00087"></a>00087 ci.dtime = finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>;
+<a name="l00088"></a>00088 ci.size = finfo.<a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a>;
+<a name="l00089"></a>00089 ci.flags = flags;
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091 <span class="keywordflow">if</span> (write(master-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>, &ci, <span class="keyword">sizeof</span>(ci)) < 0) {
+<a name="l00092"></a>00092 perror(<span class="stringliteral">"write"</span>);
+<a name="l00093"></a>00093 <span class="keywordflow">return</span> -1;
+<a name="l00094"></a>00094 }
+<a name="l00095"></a>00095
+<a name="l00096"></a>00096 <span class="keywordflow">if</span> (write(master-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>, finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>, finfo.<a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>) < 0) {
+<a name="l00097"></a>00097 perror(<span class="stringliteral">"write"</span>);
+<a name="l00098"></a>00098 <span class="keywordflow">return</span> -1;
+<a name="l00099"></a>00099 }
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="keywordflow">return</span> 0;
+<a name="l00102"></a>00102 }
+<a name="l00103"></a>00103
+<a name="l00104"></a>00104 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00105"></a>00105 _master_send_finish(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *master)
+<a name="l00106"></a>00106 {
+<a name="l00107"></a>00107 <span class="keyword">struct </span>comm_finfo ci = {-1, -1, -1, -1, -1, -1, 0};
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109 <span class="keywordflow">if</span> (write(master-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>, &ci, <span class="keyword">sizeof</span>(ci)) < 0) {
+<a name="l00110"></a>00110 perror(<span class="stringliteral">"write"</span>);
+<a name="l00111"></a>00111 <span class="keywordflow">return</span> -1;
+<a name="l00112"></a>00112 }
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 <span class="keywordflow">return</span> 0;
+<a name="l00115"></a>00115 }
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00118"></a>00118 _master_recv_reply(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *master, <span class="keyword">struct</span> pollfd *pfd, <span class="keywordtype">int</span> *reply, <span class="keywordtype">int</span> timeout)
+<a name="l00119"></a>00119 {
+<a name="l00120"></a>00120 <span class="keywordtype">int</span> r;
+<a name="l00121"></a>00121
+<a name="l00122"></a>00122 r = poll(pfd, 1, timeout);
+<a name="l00123"></a>00123 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00124"></a>00124 perror(<span class="stringliteral">"poll"</span>);
+<a name="l00125"></a>00125 <span class="keywordflow">return</span> -1;
+<a name="l00126"></a>00126 }
+<a name="l00127"></a>00127
+<a name="l00128"></a>00128 <span class="keywordflow">if</span> (r == 0)
+<a name="l00129"></a>00129 <span class="keywordflow">return</span> 1;
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keywordflow">if</span> (read(master-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>, reply, <span class="keyword">sizeof</span>(*reply)) != <span class="keyword">sizeof</span>(*reply)) {
+<a name="l00132"></a>00132 perror(<span class="stringliteral">"read"</span>);
+<a name="l00133"></a>00133 <span class="keywordflow">return</span> -2;
+<a name="l00134"></a>00134 }
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 <span class="keywordflow">return</span> 0;
+<a name="l00137"></a>00137 }
+<a name="l00138"></a>00138
+<a name="l00139"></a>00139 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00140"></a>00140 _slave_send_reply(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *slave, <span class="keywordtype">int</span> reply)
+<a name="l00141"></a>00141 {
+<a name="l00142"></a>00142 <span class="keywordflow">if</span> (write(slave-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>, &reply, <span class="keyword">sizeof</span>(reply)) == 0) {
+<a name="l00143"></a>00143 perror(<span class="stringliteral">"write"</span>);
+<a name="l00144"></a>00144 <span class="keywordflow">return</span> -1;
+<a name="l00145"></a>00145 }
+<a name="l00146"></a>00146 <span class="keywordflow">return</span> 0;
+<a name="l00147"></a>00147 }
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00150"></a>00150 _slave_recv_file(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *slave, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *flags)
+<a name="l00151"></a>00151 {
+<a name="l00152"></a>00152 <span class="keyword">struct </span>comm_finfo ci;
+<a name="l00153"></a>00153 <span class="keyword">static</span> <span class="keywordtype">char</span> path[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a> + 1];
+<a name="l00154"></a>00154 <span class="keywordtype">int</span> r;
+<a name="l00155"></a>00155
+<a name="l00156"></a>00156 r = read(slave-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>, &ci, <span class="keyword">sizeof</span>(ci));
+<a name="l00157"></a>00157 <span class="keywordflow">if</span> (r != <span class="keyword">sizeof</span>(ci)) {
+<a name="l00158"></a>00158 perror(<span class="stringliteral">"read"</span>);
+<a name="l00159"></a>00159 <span class="keywordflow">return</span> -1;
+<a name="l00160"></a>00160 }
+<a name="l00161"></a>00161
+<a name="l00162"></a>00162 finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> = ci.path_len;
+<a name="l00163"></a>00163 finfo-><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a> = ci.base;
+<a name="l00164"></a>00164 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = ci.id;
+<a name="l00165"></a>00165 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = ci.mtime;
+<a name="l00166"></a>00166 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = ci.dtime;
+<a name="l00167"></a>00167 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = ci.size;
+<a name="l00168"></a>00168 finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a> = NULL;
+<a name="l00169"></a>00169 *flags = ci.flags;
+<a name="l00170"></a>00170
+<a name="l00171"></a>00171 <span class="keywordflow">if</span> (ci.path_len == -1)
+<a name="l00172"></a>00172 <span class="keywordflow">return</span> 0;
+<a name="l00173"></a>00173
+<a name="l00174"></a>00174 <span class="keywordflow">if</span> (ci.path_len > <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>) {
+<a name="l00175"></a>00175 fprintf(stderr, <span class="stringliteral">"ERROR: path too long (%d/%d)\n"</span>,
+<a name="l00176"></a>00176 ci.path_len, <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>);
+<a name="l00177"></a>00177 <span class="keywordflow">return</span> -2;
+<a name="l00178"></a>00178 }
+<a name="l00179"></a>00179
+<a name="l00180"></a>00180 r = read(slave-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>, path, ci.path_len);
+<a name="l00181"></a>00181 <span class="keywordflow">if</span> (r != ci.path_len) {
+<a name="l00182"></a>00182 fprintf(stderr, <span class="stringliteral">"ERROR: could not read whole path %d/%d\n"</span>,
+<a name="l00183"></a>00183 r, ci.path_len);
+<a name="l00184"></a>00184 <span class="keywordflow">return</span> -3;
+<a name="l00185"></a>00185 }
+<a name="l00186"></a>00186
+<a name="l00187"></a>00187 path[ci.path_len] = 0;
+<a name="l00188"></a>00188 finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a> = path;
+<a name="l00189"></a>00189 <span class="keywordflow">return</span> 0;
+<a name="l00190"></a>00190 }
+<a name="l00191"></a>00191
+<a name="l00192"></a>00192
+<a name="l00193"></a>00193 <span class="comment">/***********************************************************************</span>
+<a name="l00194"></a>00194 <span class="comment"> * Slave-side.</span>
+<a name="l00195"></a>00195 <span class="comment"> ***********************************************************************/</span>
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00198"></a>00198 _slave_db_compile_all_stmts(<span class="keyword">struct</span> slave_db *db)
+<a name="l00199"></a>00199 {
+<a name="l00200"></a>00200 sqlite3 *handle;
+<a name="l00201"></a>00201
+<a name="l00202"></a>00202 handle = db->handle;
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 db->transaction_begin = <a class="code" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lms_db_compile_stmt_begin_transaction</a>(handle);
+<a name="l00205"></a>00205 <span class="keywordflow">if</span> (!db->transaction_begin)
+<a name="l00206"></a>00206 <span class="keywordflow">return</span> -1;
+<a name="l00207"></a>00207
+<a name="l00208"></a>00208 db->transaction_commit = <a class="code" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lms_db_compile_stmt_end_transaction</a>(handle);
+<a name="l00209"></a>00209 <span class="keywordflow">if</span> (!db->transaction_commit)
+<a name="l00210"></a>00210 <span class="keywordflow">return</span> -2;
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 db->delete_file_info = <a class="code" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lms_db_compile_stmt_delete_file_info</a>(handle);
+<a name="l00213"></a>00213 <span class="keywordflow">if</span> (!db->delete_file_info)
+<a name="l00214"></a>00214 <span class="keywordflow">return</span> -3;
+<a name="l00215"></a>00215
+<a name="l00216"></a>00216 db->update_file_info = <a class="code" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lms_db_compile_stmt_update_file_info</a>(handle);
+<a name="l00217"></a>00217 <span class="keywordflow">if</span> (!db->update_file_info)
+<a name="l00218"></a>00218 <span class="keywordflow">return</span> -4;
+<a name="l00219"></a>00219
+<a name="l00220"></a>00220 <span class="keywordflow">return</span> 0;
+<a name="l00221"></a>00221 }
+<a name="l00222"></a>00222
+<a name="l00223"></a>00223 <span class="keyword">static</span> <span class="keyword">struct </span>slave_db *
+<a name="l00224"></a>00224 _slave_db_open(<span class="keyword">const</span> <span class="keywordtype">char</span> *db_path)
+<a name="l00225"></a>00225 {
+<a name="l00226"></a>00226 <span class="keyword">struct </span>slave_db *db;
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 db = calloc(1, <span class="keyword">sizeof</span>(*db));
+<a name="l00229"></a>00229 <span class="keywordflow">if</span> (!db) {
+<a name="l00230"></a>00230 perror(<span class="stringliteral">"calloc"</span>);
+<a name="l00231"></a>00231 <span class="keywordflow">return</span> NULL;
+<a name="l00232"></a>00232 }
+<a name="l00233"></a>00233
+<a name="l00234"></a>00234 <span class="keywordflow">if</span> (sqlite3_open(db_path, &db->handle) != SQLITE_OK) {
+<a name="l00235"></a>00235 fprintf(stderr, <span class="stringliteral">"ERROR: could not open DB \"%s\": %s\n"</span>,
+<a name="l00236"></a>00236 db_path, sqlite3_errmsg(db->handle));
+<a name="l00237"></a>00237 <span class="keywordflow">goto</span> error;
+<a name="l00238"></a>00238 }
+<a name="l00239"></a>00239
+<a name="l00240"></a>00240 <span class="keywordflow">return</span> db;
+<a name="l00241"></a>00241
+<a name="l00242"></a>00242 error:
+<a name="l00243"></a>00243 sqlite3_close(db->handle);
+<a name="l00244"></a>00244 free(db);
+<a name="l00245"></a>00245 <span class="keywordflow">return</span> NULL;
+<a name="l00246"></a>00246 }
+<a name="l00247"></a>00247
+<a name="l00248"></a>00248 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00249"></a>00249 _slave_db_close(<span class="keyword">struct</span> slave_db *db)
+<a name="l00250"></a>00250 {
+<a name="l00251"></a>00251 <span class="keywordflow">if</span> (db->transaction_begin)
+<a name="l00252"></a>00252 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->transaction_begin, <span class="stringliteral">"transaction_begin"</span>);
+<a name="l00253"></a>00253
+<a name="l00254"></a>00254 <span class="keywordflow">if</span> (db->transaction_commit)
+<a name="l00255"></a>00255 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->transaction_commit, <span class="stringliteral">"transaction_commit"</span>);
+<a name="l00256"></a>00256
+<a name="l00257"></a>00257 <span class="keywordflow">if</span> (db->delete_file_info)
+<a name="l00258"></a>00258 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->delete_file_info, <span class="stringliteral">"delete_file_info"</span>);
+<a name="l00259"></a>00259
+<a name="l00260"></a>00260 <span class="keywordflow">if</span> (db->update_file_info)
+<a name="l00261"></a>00261 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->update_file_info, <span class="stringliteral">"update_file_info"</span>);
+<a name="l00262"></a>00262
+<a name="l00263"></a>00263 <span class="keywordflow">if</span> (sqlite3_close(db->handle) != SQLITE_OK) {
+<a name="l00264"></a>00264 fprintf(stderr, <span class="stringliteral">"ERROR: clould not close DB (slave): %s\n"</span>,
+<a name="l00265"></a>00265 sqlite3_errmsg(db->handle));
+<a name="l00266"></a>00266 <span class="keywordflow">return</span> -1;
+<a name="l00267"></a>00267 }
+<a name="l00268"></a>00268 free(db);
+<a name="l00269"></a>00269
+<a name="l00270"></a>00270 <span class="keywordflow">return</span> 0;
+<a name="l00271"></a>00271 }
+<a name="l00272"></a>00272
+<a name="l00273"></a>00273 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00274"></a>00274 _single_process_db_compile_all_stmts(<span class="keyword">struct</span> single_process_db *db)
+<a name="l00275"></a>00275 {
+<a name="l00276"></a>00276 sqlite3 *handle;
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 handle = db->handle;
+<a name="l00279"></a>00279
+<a name="l00280"></a>00280 db->get_files = <a class="code" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lms_db_compile_stmt_get_files</a>(handle);
+<a name="l00281"></a>00281 <span class="keywordflow">if</span> (!db->get_files)
+<a name="l00282"></a>00282 <span class="keywordflow">return</span> -1;
+<a name="l00283"></a>00283
+<a name="l00284"></a>00284 db->transaction_begin = <a class="code" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lms_db_compile_stmt_begin_transaction</a>(handle);
+<a name="l00285"></a>00285 <span class="keywordflow">if</span> (!db->transaction_begin)
+<a name="l00286"></a>00286 <span class="keywordflow">return</span> -2;
+<a name="l00287"></a>00287
+<a name="l00288"></a>00288 db->transaction_commit = <a class="code" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lms_db_compile_stmt_end_transaction</a>(handle);
+<a name="l00289"></a>00289 <span class="keywordflow">if</span> (!db->transaction_commit)
+<a name="l00290"></a>00290 <span class="keywordflow">return</span> -3;
+<a name="l00291"></a>00291
+<a name="l00292"></a>00292 db->delete_file_info = <a class="code" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lms_db_compile_stmt_delete_file_info</a>(handle);
+<a name="l00293"></a>00293 <span class="keywordflow">if</span> (!db->delete_file_info)
+<a name="l00294"></a>00294 <span class="keywordflow">return</span> -4;
+<a name="l00295"></a>00295
+<a name="l00296"></a>00296 db->update_file_info = <a class="code" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lms_db_compile_stmt_update_file_info</a>(handle);
+<a name="l00297"></a>00297 <span class="keywordflow">if</span> (!db->update_file_info)
+<a name="l00298"></a>00298 <span class="keywordflow">return</span> -5;
+<a name="l00299"></a>00299
+<a name="l00300"></a>00300 <span class="keywordflow">return</span> 0;
+<a name="l00301"></a>00301 }
+<a name="l00302"></a>00302
+<a name="l00303"></a>00303 <span class="keyword">static</span> <span class="keyword">struct </span>single_process_db *
+<a name="l00304"></a>00304 _single_process_db_open(<span class="keyword">const</span> <span class="keywordtype">char</span> *db_path)
+<a name="l00305"></a>00305 {
+<a name="l00306"></a>00306 <span class="keyword">struct </span>single_process_db *db;
+<a name="l00307"></a>00307
+<a name="l00308"></a>00308 db = calloc(1, <span class="keyword">sizeof</span>(*db));
+<a name="l00309"></a>00309 <span class="keywordflow">if</span> (!db) {
+<a name="l00310"></a>00310 perror(<span class="stringliteral">"calloc"</span>);
+<a name="l00311"></a>00311 <span class="keywordflow">return</span> NULL;
+<a name="l00312"></a>00312 }
+<a name="l00313"></a>00313
+<a name="l00314"></a>00314 <span class="keywordflow">if</span> (sqlite3_open(db_path, &db->handle) != SQLITE_OK) {
+<a name="l00315"></a>00315 fprintf(stderr, <span class="stringliteral">"ERROR: could not open DB \"%s\": %s\n"</span>,
+<a name="l00316"></a>00316 db_path, sqlite3_errmsg(db->handle));
+<a name="l00317"></a>00317 <span class="keywordflow">goto</span> error;
+<a name="l00318"></a>00318 }
+<a name="l00319"></a>00319
+<a name="l00320"></a>00320 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lms_db_create_core_tables_if_required</a>(db->handle) != 0) {
+<a name="l00321"></a>00321 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup tables and indexes.\n"</span>);
+<a name="l00322"></a>00322 <span class="keywordflow">goto</span> error;
+<a name="l00323"></a>00323 }
+<a name="l00324"></a>00324
+<a name="l00325"></a>00325 <span class="keywordflow">if</span> (_single_process_db_compile_all_stmts(db) != 0) {
+<a name="l00326"></a>00326 fprintf(stderr, <span class="stringliteral">"ERROR: could not compile statements.\n"</span>);
+<a name="l00327"></a>00327 <span class="keywordflow">goto</span> error;
+<a name="l00328"></a>00328 }
+<a name="l00329"></a>00329
+<a name="l00330"></a>00330 <span class="keywordflow">return</span> db;
+<a name="l00331"></a>00331
+<a name="l00332"></a>00332 error:
+<a name="l00333"></a>00333 sqlite3_close(db->handle);
+<a name="l00334"></a>00334 free(db);
+<a name="l00335"></a>00335 <span class="keywordflow">return</span> NULL;
+<a name="l00336"></a>00336 }
+<a name="l00337"></a>00337
+<a name="l00338"></a>00338 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00339"></a>00339 _single_process_db_close(<span class="keyword">struct</span> single_process_db *db)
+<a name="l00340"></a>00340 {
+<a name="l00341"></a>00341 <span class="keywordflow">if</span> (db->get_files)
+<a name="l00342"></a>00342 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->get_files, <span class="stringliteral">"get_files"</span>);
+<a name="l00343"></a>00343
+<a name="l00344"></a>00344 <span class="keywordflow">if</span> (db->transaction_begin)
+<a name="l00345"></a>00345 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->transaction_begin, <span class="stringliteral">"transaction_begin"</span>);
+<a name="l00346"></a>00346
+<a name="l00347"></a>00347 <span class="keywordflow">if</span> (db->transaction_commit)
+<a name="l00348"></a>00348 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->transaction_commit, <span class="stringliteral">"transaction_commit"</span>);
+<a name="l00349"></a>00349
+<a name="l00350"></a>00350 <span class="keywordflow">if</span> (db->delete_file_info)
+<a name="l00351"></a>00351 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->delete_file_info, <span class="stringliteral">"delete_file_info"</span>);
+<a name="l00352"></a>00352
+<a name="l00353"></a>00353 <span class="keywordflow">if</span> (db->update_file_info)
+<a name="l00354"></a>00354 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->update_file_info, <span class="stringliteral">"update_file_info"</span>);
+<a name="l00355"></a>00355
+<a name="l00356"></a>00356 <span class="keywordflow">if</span> (sqlite3_close(db->handle) != SQLITE_OK) {
+<a name="l00357"></a>00357 fprintf(stderr, <span class="stringliteral">"ERROR: clould not close DB (slave): %s\n"</span>,
+<a name="l00358"></a>00358 sqlite3_errmsg(db->handle));
+<a name="l00359"></a>00359 <span class="keywordflow">return</span> -1;
+<a name="l00360"></a>00360 }
+<a name="l00361"></a>00361 free(db);
+<a name="l00362"></a>00362
+<a name="l00363"></a>00363 <span class="keywordflow">return</span> 0;
+<a name="l00364"></a>00364 }
+<a name="l00365"></a>00365
+<a name="l00366"></a>00366 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00367"></a>00367 _init_sync_send(<span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *<a class="code" href="structfds.html">fds</a>)
+<a name="l00368"></a>00368 {
+<a name="l00369"></a>00369 <span class="keywordflow">return</span> _slave_send_reply(fds, 0);
+<a name="l00370"></a>00370 }
+<a name="l00371"></a>00371
+<a name="l00372"></a>00372 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00373"></a>00373 _slave_work_int(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *<a class="code" href="structfds.html">fds</a>, <span class="keyword">struct</span> slave_db *db)
+<a name="l00374"></a>00374 {
+<a name="l00375"></a>00375 <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> finfo;
+<a name="l00376"></a>00376 <span class="keywordtype">void</span> **parser_match;
+<a name="l00377"></a>00377 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> counter, flags;
+<a name="l00378"></a>00378 <span class="keywordtype">int</span> r;
+<a name="l00379"></a>00379
+<a name="l00380"></a>00380 parser_match = malloc(lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> * <span class="keyword">sizeof</span>(*parser_match));
+<a name="l00381"></a>00381 <span class="keywordflow">if</span> (!parser_match) {
+<a name="l00382"></a>00382 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00383"></a>00383 <span class="keywordflow">return</span> -6;
+<a name="l00384"></a>00384 }
+<a name="l00385"></a>00385
+<a name="l00386"></a>00386 _init_sync_send(fds);
+<a name="l00387"></a>00387
+<a name="l00388"></a>00388 counter = 0;
+<a name="l00389"></a>00389 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00390"></a>00390
+<a name="l00391"></a>00391 <span class="keywordflow">while</span> (((r = _slave_recv_file(fds, &finfo, &flags)) == 0) &&
+<a name="l00392"></a>00392 finfo.<a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> > 0) {
+<a name="l00393"></a>00393 r = <a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lms_db_update_file_info</a>(db->update_file_info, &finfo);
+<a name="l00394"></a>00394 <span class="keywordflow">if</span> (r < 0)
+<a name="l00395"></a>00395 fprintf(stderr, <span class="stringliteral">"ERROR: could not update path in DB\n"</span>);
+<a name="l00396"></a>00396 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (flags & <a class="code" href="lightmediascanner__check_8c.html#f8084f435d209d810eb33deaa35fab5e">COMM_FINFO_FLAG_OUTDATED</a>) {
+<a name="l00397"></a>00397 <span class="keywordtype">int</span> used;
+<a name="l00398"></a>00398
+<a name="l00399"></a>00399 used = <a class="code" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lms_parsers_check_using</a>(lms, parser_match, &finfo);
+<a name="l00400"></a>00400 <span class="keywordflow">if</span> (!used)
+<a name="l00401"></a>00401 r = 0;
+<a name="l00402"></a>00402 <span class="keywordflow">else</span> {
+<a name="l00403"></a>00403 r = <a class="code" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lms_parsers_run</a>(lms, db->handle, parser_match, &finfo);
+<a name="l00404"></a>00404 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00405"></a>00405 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00406"></a>00406 getpid(), finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>);
+<a name="l00407"></a>00407 <a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lms_db_delete_file_info</a>(db->delete_file_info, &finfo);
+<a name="l00408"></a>00408 }
+<a name="l00409"></a>00409 }
+<a name="l00410"></a>00410 }
+<a name="l00411"></a>00411
+<a name="l00412"></a>00412 _slave_send_reply(fds, r);
+<a name="l00413"></a>00413 counter++;
+<a name="l00414"></a>00414 <span class="keywordflow">if</span> (counter > lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>) {
+<a name="l00415"></a>00415 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00416"></a>00416 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00417"></a>00417 counter = 0;
+<a name="l00418"></a>00418 }
+<a name="l00419"></a>00419 }
+<a name="l00420"></a>00420
+<a name="l00421"></a>00421 free(parser_match);
+<a name="l00422"></a>00422 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00423"></a>00423
+<a name="l00424"></a>00424 <span class="keywordflow">return</span> r;
+<a name="l00425"></a>00425 }
+<a name="l00426"></a>00426
+<a name="l00427"></a>00427 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00428"></a>00428 _slave_work(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">struct</span> fds *fds)
+<a name="l00429"></a>00429 {
+<a name="l00430"></a>00430 <span class="keyword">struct </span>slave_db *db;
+<a name="l00431"></a>00431 <span class="keywordtype">int</span> r;
+<a name="l00432"></a>00432
+<a name="l00433"></a>00433 db = _slave_db_open(lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00434"></a>00434 <span class="keywordflow">if</span> (!db)
+<a name="l00435"></a>00435 <span class="keywordflow">return</span> -1;
+<a name="l00436"></a>00436
+<a name="l00437"></a>00437 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lms_parsers_setup</a>(lms, db->handle) != 0) {
+<a name="l00438"></a>00438 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup parsers.\n"</span>);
+<a name="l00439"></a>00439 r = -2;
+<a name="l00440"></a>00440 <span class="keywordflow">goto</span> end;
+<a name="l00441"></a>00441 }
+<a name="l00442"></a>00442
+<a name="l00443"></a>00443 <span class="keywordflow">if</span> (_slave_db_compile_all_stmts(db) != 0) {
+<a name="l00444"></a>00444 fprintf(stderr, <span class="stringliteral">"ERROR: could not compile statements.\n"</span>);
+<a name="l00445"></a>00445 r = -3;
+<a name="l00446"></a>00446 <span class="keywordflow">goto</span> end;
+<a name="l00447"></a>00447 }
+<a name="l00448"></a>00448
+<a name="l00449"></a>00449 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lms_parsers_start</a>(lms, db->handle) != 0) {
+<a name="l00450"></a>00450 fprintf(stderr, <span class="stringliteral">"ERROR: could not start parsers.\n"</span>);
+<a name="l00451"></a>00451 r = -4;
+<a name="l00452"></a>00452 <span class="keywordflow">goto</span> end;
+<a name="l00453"></a>00453 }
+<a name="l00454"></a>00454 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> < 1) {
+<a name="l00455"></a>00455 fprintf(stderr, <span class="stringliteral">"ERROR: no parser could be started, exit.\n"</span>);
+<a name="l00456"></a>00456 r = -5;
+<a name="l00457"></a>00457 <span class="keywordflow">goto</span> end;
+<a name="l00458"></a>00458 }
+<a name="l00459"></a>00459
+<a name="l00460"></a>00460 r = _slave_work_int(lms, fds, db);
+<a name="l00461"></a>00461
+<a name="l00462"></a>00462 end:
+<a name="l00463"></a>00463 <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(lms, db->handle);
+<a name="l00464"></a>00464 _slave_db_close(db);
+<a name="l00465"></a>00465 _init_sync_send(fds);
+<a name="l00466"></a>00466
+<a name="l00467"></a>00467 <span class="keywordflow">return</span> r;
+<a name="l00468"></a>00468 }
+<a name="l00469"></a>00469
+<a name="l00470"></a>00470
+<a name="l00471"></a>00471 <span class="comment">/***********************************************************************</span>
+<a name="l00472"></a>00472 <span class="comment"> * Master-side.</span>
+<a name="l00473"></a>00473 <span class="comment"> ***********************************************************************/</span>
+<a name="l00474"></a>00474
+<a name="l00475"></a>00475 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00476"></a>00476 _master_db_compile_all_stmts(<span class="keyword">struct</span> master_db *db)
+<a name="l00477"></a>00477 {
+<a name="l00478"></a>00478 sqlite3 *handle;
+<a name="l00479"></a>00479
+<a name="l00480"></a>00480 handle = db->handle;
+<a name="l00481"></a>00481
+<a name="l00482"></a>00482 db->get_files = <a class="code" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lms_db_compile_stmt_get_files</a>(handle);
+<a name="l00483"></a>00483 <span class="keywordflow">if</span> (!db->get_files)
+<a name="l00484"></a>00484 <span class="keywordflow">return</span> -1;
+<a name="l00485"></a>00485
+<a name="l00486"></a>00486 <span class="keywordflow">return</span> 0;
+<a name="l00487"></a>00487 }
+<a name="l00488"></a>00488
+<a name="l00489"></a>00489 <span class="keyword">static</span> <span class="keyword">struct </span>master_db *
+<a name="l00490"></a>00490 _master_db_open(<span class="keyword">const</span> <span class="keywordtype">char</span> *db_path)
+<a name="l00491"></a>00491 {
+<a name="l00492"></a>00492 <span class="keyword">struct </span>master_db *db;
+<a name="l00493"></a>00493
+<a name="l00494"></a>00494 db = calloc(1, <span class="keyword">sizeof</span>(*db));
+<a name="l00495"></a>00495 <span class="keywordflow">if</span> (!db) {
+<a name="l00496"></a>00496 perror(<span class="stringliteral">"calloc"</span>);
+<a name="l00497"></a>00497 <span class="keywordflow">return</span> NULL;
+<a name="l00498"></a>00498 }
+<a name="l00499"></a>00499
+<a name="l00500"></a>00500 <span class="keywordflow">if</span> (sqlite3_open(db_path, &db->handle) != SQLITE_OK) {
+<a name="l00501"></a>00501 fprintf(stderr, <span class="stringliteral">"ERROR: could not open DB \"%s\": %s\n"</span>,
+<a name="l00502"></a>00502 db_path, sqlite3_errmsg(db->handle));
+<a name="l00503"></a>00503 <span class="keywordflow">goto</span> error;
+<a name="l00504"></a>00504 }
+<a name="l00505"></a>00505
+<a name="l00506"></a>00506 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lms_db_create_core_tables_if_required</a>(db->handle) != 0) {
+<a name="l00507"></a>00507 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup tables and indexes.\n"</span>);
+<a name="l00508"></a>00508 <span class="keywordflow">goto</span> error;
+<a name="l00509"></a>00509 }
+<a name="l00510"></a>00510
+<a name="l00511"></a>00511 <span class="keywordflow">if</span> (_master_db_compile_all_stmts(db) != 0) {
+<a name="l00512"></a>00512 fprintf(stderr, <span class="stringliteral">"ERROR: could not compile statements.\n"</span>);
+<a name="l00513"></a>00513 <span class="keywordflow">goto</span> error;
+<a name="l00514"></a>00514 }
+<a name="l00515"></a>00515
+<a name="l00516"></a>00516 <span class="keywordflow">return</span> db;
+<a name="l00517"></a>00517
+<a name="l00518"></a>00518 error:
+<a name="l00519"></a>00519 sqlite3_close(db->handle);
+<a name="l00520"></a>00520 free(db);
+<a name="l00521"></a>00521 <span class="keywordflow">return</span> NULL;
+<a name="l00522"></a>00522 }
+<a name="l00523"></a>00523
+<a name="l00524"></a>00524 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00525"></a>00525 _master_db_close(<span class="keyword">struct</span> master_db *db)
+<a name="l00526"></a>00526 {
+<a name="l00527"></a>00527 <span class="keywordflow">if</span> (db->get_files)
+<a name="l00528"></a>00528 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->get_files, <span class="stringliteral">"get_files"</span>);
+<a name="l00529"></a>00529
+<a name="l00530"></a>00530 <span class="keywordflow">if</span> (sqlite3_close(db->handle) != SQLITE_OK) {
+<a name="l00531"></a>00531 fprintf(stderr, <span class="stringliteral">"ERROR: clould not close DB (master): %s\n"</span>,
+<a name="l00532"></a>00532 sqlite3_errmsg(db->handle));
+<a name="l00533"></a>00533 <span class="keywordflow">return</span> -1;
+<a name="l00534"></a>00534 }
+<a name="l00535"></a>00535 free(db);
+<a name="l00536"></a>00536
+<a name="l00537"></a>00537 <span class="keywordflow">return</span> 0;
+<a name="l00538"></a>00538 }
+<a name="l00539"></a>00539
+<a name="l00540"></a>00540 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00541"></a>00541 _calc_base(<span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00542"></a>00542 {
+<a name="l00543"></a>00543 <span class="keywordtype">int</span> i;
+<a name="l00544"></a>00544
+<a name="l00545"></a>00545 <span class="keywordflow">for</span> (i = finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> - 1; i >= 0; i--)
+<a name="l00546"></a>00546 <span class="keywordflow">if</span> (finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>[i] == <span class="charliteral">'/'</span>) {
+<a name="l00547"></a>00547 finfo-><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a> = i;
+<a name="l00548"></a>00548 <span class="keywordflow">return</span>;
+<a name="l00549"></a>00549 }
+<a name="l00550"></a>00550 }
+<a name="l00551"></a>00551
+<a name="l00552"></a>00552 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
+<a name="l00553"></a>00553 _update_finfo_from_stmt(<span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo, sqlite3_stmt *stmt)
+<a name="l00554"></a>00554 {
+<a name="l00555"></a>00555 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = sqlite3_column_int64(stmt, 0);
+<a name="l00556"></a>00556 finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a> = sqlite3_column_blob(stmt, 1);
+<a name="l00557"></a>00557 finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> = sqlite3_column_bytes(stmt, 1);
+<a name="l00558"></a>00558 finfo-><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a> = 0;
+<a name="l00559"></a>00559 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = sqlite3_column_int(stmt, 2);
+<a name="l00560"></a>00560 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = sqlite3_column_int(stmt, 3);
+<a name="l00561"></a>00561 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = sqlite3_column_int(stmt, 4);
+<a name="l00562"></a>00562 }
+<a name="l00563"></a>00563
+<a name="l00564"></a>00564 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
+<a name="l00565"></a>00565 _update_finfo_from_stat(<span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo, <span class="keyword">const</span> <span class="keyword">struct</span> stat *st)
+<a name="l00566"></a>00566 {
+<a name="l00567"></a>00567 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = st->st_mtime;
+<a name="l00568"></a>00568 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = st->st_size;
+<a name="l00569"></a>00569 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = 0;
+<a name="l00570"></a>00570 }
+<a name="l00571"></a>00571
+<a name="l00572"></a>00572 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
+<a name="l00573"></a>00573 _report_progress(<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lms_progress_status_t</a> status)
+<a name="l00574"></a>00574 {
+<a name="l00575"></a>00575 <a class="code" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> cb;
+<a name="l00576"></a>00576 <a class="code" href="structlms.html">lms_t</a> *lms = info-><a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>;
+<a name="l00577"></a>00577
+<a name="l00578"></a>00578 cb = lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#94615d22fba40d580a8a0055d28221c4">cb</a>;
+<a name="l00579"></a>00579 <span class="keywordflow">if</span> (!cb)
+<a name="l00580"></a>00580 <span class="keywordflow">return</span>;
+<a name="l00581"></a>00581
+<a name="l00582"></a>00582 cb(lms, finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>, finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>, status, lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a>);
+<a name="l00583"></a>00583 }
+<a name="l00584"></a>00584
+<a name="l00585"></a>00585 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00586"></a>00586 _finfo_update(<span class="keywordtype">void</span> *db_ptr, <span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *flags)
+<a name="l00587"></a>00587 {
+<a name="l00588"></a>00588 <span class="keyword">struct </span>master_db *db = db_ptr;
+<a name="l00589"></a>00589 <span class="keyword">struct </span>stat st;
+<a name="l00590"></a>00590
+<a name="l00591"></a>00591 _update_finfo_from_stmt(finfo, db->get_files);
+<a name="l00592"></a>00592
+<a name="l00593"></a>00593 *flags = 0;
+<a name="l00594"></a>00594 <span class="keywordflow">if</span> (stat(finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>, &st) == 0) {
+<a name="l00595"></a>00595 <span class="keywordflow">if</span> (st.st_mtime == finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> && st.st_size == finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a>) {
+<a name="l00596"></a>00596 <span class="keywordflow">if</span> (finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> == 0) {
+<a name="l00597"></a>00597 _report_progress(info, finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370204315e58ce4b7dfa6421b4d1556655d">LMS_PROGRESS_STATUS_UP_TO_DATE</a>);
+<a name="l00598"></a>00598 <span class="keywordflow">return</span> 0;
+<a name="l00599"></a>00599 } <span class="keywordflow">else</span>
+<a name="l00600"></a>00600 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = 0;
+<a name="l00601"></a>00601 } <span class="keywordflow">else</span> {
+<a name="l00602"></a>00602 _update_finfo_from_stat(finfo, &st);
+<a name="l00603"></a>00603 *flags |= COMM_FINFO_FLAG_OUTDATED;
+<a name="l00604"></a>00604 }
+<a name="l00605"></a>00605 } <span class="keywordflow">else</span> {
+<a name="l00606"></a>00606 <span class="keywordflow">if</span> (finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>)
+<a name="l00607"></a>00607 <span class="keywordflow">return</span> 0;
+<a name="l00608"></a>00608 <span class="keywordflow">else</span>
+<a name="l00609"></a>00609 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = time(NULL);
+<a name="l00610"></a>00610 }
+<a name="l00611"></a>00611
+<a name="l00612"></a>00612 _calc_base(finfo);
+<a name="l00613"></a>00613
+<a name="l00614"></a>00614 <span class="keywordflow">return</span> 1;
+<a name="l00615"></a>00615 }
+<a name="l00616"></a>00616
+<a name="l00617"></a>00617 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00618"></a>00618 _check_row(<span class="keywordtype">void</span> *db_ptr, <span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info)
+<a name="l00619"></a>00619 {
+<a name="l00620"></a>00620 <span class="keyword">struct </span><a class="code" href="structpinfo.html">pinfo</a> *<a class="code" href="structpinfo.html">pinfo</a> = (<span class="keyword">struct </span>pinfo *)info;
+<a name="l00621"></a>00621 <span class="keyword">struct </span>master_db *db = db_ptr;
+<a name="l00622"></a>00622 <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> finfo;
+<a name="l00623"></a>00623 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags;
+<a name="l00624"></a>00624 <span class="keywordtype">int</span> r, reply;
+<a name="l00625"></a>00625
+<a name="l00626"></a>00626 r = _finfo_update(db, info, &finfo, &flags);
+<a name="l00627"></a>00627 <span class="keywordflow">if</span> (r == 0)
+<a name="l00628"></a>00628 <span class="keywordflow">return</span> r;
+<a name="l00629"></a>00629
+<a name="l00630"></a>00630 <span class="keywordflow">if</span> (_master_send_file(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>, finfo, flags) != 0)
+<a name="l00631"></a>00631 <span class="keywordflow">return</span> -1;
+<a name="l00632"></a>00632
+<a name="l00633"></a>00633 r = _master_recv_reply(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>, &pinfo-><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>, &reply,
+<a name="l00634"></a>00634 pinfo-><a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>);
+<a name="l00635"></a>00635 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00636"></a>00636 _report_progress(info, &finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082">LMS_PROGRESS_STATUS_ERROR_COMM</a>);
+<a name="l00637"></a>00637 <span class="keywordflow">return</span> -2;
+<a name="l00638"></a>00638 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == 1) {
+<a name="l00639"></a>00639 fprintf(stderr, <span class="stringliteral">"ERROR: slave took too long, restart %d\n"</span>,
+<a name="l00640"></a>00640 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00641"></a>00641 _report_progress(info, &finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152">LMS_PROGRESS_STATUS_KILLED</a>);
+<a name="l00642"></a>00642 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a>(pinfo, _slave_work) != 0)
+<a name="l00643"></a>00643 <span class="keywordflow">return</span> -3;
+<a name="l00644"></a>00644 <span class="keywordflow">return</span> 1;
+<a name="l00645"></a>00645 } <span class="keywordflow">else</span> {
+<a name="l00646"></a>00646 <span class="keywordflow">if</span> (reply < 0) {
+<a name="l00647"></a>00647 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00648"></a>00648 getpid(), finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>);
+<a name="l00649"></a>00649 _report_progress(info, &finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">LMS_PROGRESS_STATUS_ERROR_PARSE</a>);
+<a name="l00650"></a>00650 <span class="keywordflow">return</span> (-reply) << 8;
+<a name="l00651"></a>00651 } <span class="keywordflow">else</span> {
+<a name="l00652"></a>00652 <span class="keywordflow">if</span> (!finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>)
+<a name="l00653"></a>00653 _report_progress(info, &finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">LMS_PROGRESS_STATUS_PROCESSED</a>);
+<a name="l00654"></a>00654 <span class="keywordflow">else</span>
+<a name="l00655"></a>00655 _report_progress(info, &finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11">LMS_PROGRESS_STATUS_DELETED</a>);
+<a name="l00656"></a>00656 <span class="keywordflow">return</span> reply;
+<a name="l00657"></a>00657 }
+<a name="l00658"></a>00658 }
+<a name="l00659"></a>00659 }
+<a name="l00660"></a>00660
+<a name="l00661"></a>00661 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00662"></a>00662 _check_row_single_process(<span class="keywordtype">void</span> *db_ptr, <span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info)
+<a name="l00663"></a>00663 {
+<a name="l00664"></a>00664 <span class="keyword">struct </span><a class="code" href="structsinfo.html">sinfo</a> *<a class="code" href="structsinfo.html">sinfo</a> = (<span class="keyword">struct </span>sinfo *)info;
+<a name="l00665"></a>00665 <span class="keyword">struct </span>single_process_db *db = db_ptr;
+<a name="l00666"></a>00666 <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> finfo;
+<a name="l00667"></a>00667 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags;
+<a name="l00668"></a>00668 <span class="keywordtype">int</span> r;
+<a name="l00669"></a>00669
+<a name="l00670"></a>00670 <span class="keywordtype">void</span> **parser_match = sinfo-><a class="code" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">parser_match</a>;
+<a name="l00671"></a>00671 <a class="code" href="structlms.html">lms_t</a> *lms = info-><a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>;
+<a name="l00672"></a>00672
+<a name="l00673"></a>00673 r = _finfo_update(db, info, &finfo, &flags);
+<a name="l00674"></a>00674 <span class="keywordflow">if</span> (r == 0)
+<a name="l00675"></a>00675 <span class="keywordflow">return</span> r;
+<a name="l00676"></a>00676
+<a name="l00677"></a>00677 r = <a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lms_db_update_file_info</a>(db->update_file_info, &finfo);
+<a name="l00678"></a>00678 <span class="keywordflow">if</span> (r < 0)
+<a name="l00679"></a>00679 fprintf(stderr, <span class="stringliteral">"ERROR: could not update path in DB\n"</span>);
+<a name="l00680"></a>00680 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (flags & COMM_FINFO_FLAG_OUTDATED) {
+<a name="l00681"></a>00681 <span class="keywordtype">int</span> used;
+<a name="l00682"></a>00682
+<a name="l00683"></a>00683 used = <a class="code" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lms_parsers_check_using</a>(lms, parser_match, &finfo);
+<a name="l00684"></a>00684 <span class="keywordflow">if</span> (!used)
+<a name="l00685"></a>00685 r = 0;
+<a name="l00686"></a>00686 <span class="keywordflow">else</span> {
+<a name="l00687"></a>00687 r = <a class="code" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lms_parsers_run</a>(lms, db->handle, parser_match, &finfo);
+<a name="l00688"></a>00688 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00689"></a>00689 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00690"></a>00690 getpid(), finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>);
+<a name="l00691"></a>00691 <a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lms_db_delete_file_info</a>(db->delete_file_info, &finfo);
+<a name="l00692"></a>00692 }
+<a name="l00693"></a>00693 }
+<a name="l00694"></a>00694 }
+<a name="l00695"></a>00695
+<a name="l00696"></a>00696 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00697"></a>00697 _report_progress(info, &finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">LMS_PROGRESS_STATUS_ERROR_PARSE</a>);
+<a name="l00698"></a>00698 <span class="keywordflow">return</span> (-r) << 8;
+<a name="l00699"></a>00699 } <span class="keywordflow">else</span> {
+<a name="l00700"></a>00700 sinfo-><a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a>++;
+<a name="l00701"></a>00701 <span class="keywordflow">if</span> (sinfo-><a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a> > lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>) {
+<a name="l00702"></a>00702 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00703"></a>00703 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00704"></a>00704 sinfo-><a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a> = 0;
+<a name="l00705"></a>00705 }
+<a name="l00706"></a>00706
+<a name="l00707"></a>00707 <span class="keywordflow">if</span> (!finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>)
+<a name="l00708"></a>00708 _report_progress(info, &finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">LMS_PROGRESS_STATUS_PROCESSED</a>);
+<a name="l00709"></a>00709 <span class="keywordflow">else</span>
+<a name="l00710"></a>00710 _report_progress(info, &finfo, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370a6792f0bca81010621d898e105face11">LMS_PROGRESS_STATUS_DELETED</a>);
+<a name="l00711"></a>00711 <span class="keywordflow">return</span> r;
+<a name="l00712"></a>00712 }
+<a name="l00713"></a>00713 }
+<a name="l00714"></a>00714
+<a name="l00715"></a>00715 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00716"></a>00716 _init_sync_wait(<span class="keyword">struct</span> pinfo *pinfo, <span class="keywordtype">int</span> restart)
+<a name="l00717"></a>00717 {
+<a name="l00718"></a>00718 <span class="keywordtype">int</span> r, reply;
+<a name="l00719"></a>00719
+<a name="l00720"></a>00720 <span class="keywordflow">do</span> {
+<a name="l00721"></a>00721 r = _master_recv_reply(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>, &pinfo-><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>, &reply,
+<a name="l00722"></a>00722 pinfo-><a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>);
+<a name="l00723"></a>00723 <span class="keywordflow">if</span> (r < 0)
+<a name="l00724"></a>00724 <span class="keywordflow">return</span> -1;
+<a name="l00725"></a>00725 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == 1 && restart) {
+<a name="l00726"></a>00726 fprintf(stderr, <span class="stringliteral">"ERROR: slave took too long, restart %d\n"</span>,
+<a name="l00727"></a>00727 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00728"></a>00728 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a>(pinfo, _slave_work) != 0)
+<a name="l00729"></a>00729 <span class="keywordflow">return</span> -2;
+<a name="l00730"></a>00730 }
+<a name="l00731"></a>00731 } <span class="keywordflow">while</span> (r != 0 && restart);
+<a name="l00732"></a>00732
+<a name="l00733"></a>00733 <span class="keywordflow">return</span> r;
+<a name="l00734"></a>00734 }
+<a name="l00735"></a>00735
+<a name="l00736"></a>00736 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00737"></a>00737 _master_dummy_send_finish(<span class="keyword">const</span> <span class="keyword">struct</span> fds *master)
+<a name="l00738"></a>00738 {
+<a name="l00739"></a>00739 <span class="keywordflow">return</span> 0;
+<a name="l00740"></a>00740 }
+<a name="l00741"></a>00741
+<a name="l00742"></a>00742 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00743"></a>00743 _db_files_loop(<span class="keywordtype">void</span> *db_ptr, <span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <a class="code" href="lightmediascanner__private_8h.html#818aa1ae6bb03151823bbd9b56bd0801">check_row_callback_t</a> check_row)
+<a name="l00744"></a>00744 {
+<a name="l00745"></a>00745 <span class="keyword">struct </span>master_db *db = db_ptr;
+<a name="l00746"></a>00746 <a class="code" href="structlms.html">lms_t</a> *lms = info-><a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>;
+<a name="l00747"></a>00747 <span class="keywordtype">int</span> r;
+<a name="l00748"></a>00748
+<a name="l00749"></a>00749 <span class="keywordflow">do</span> {
+<a name="l00750"></a>00750 r = sqlite3_step(db->get_files);
+<a name="l00751"></a>00751 <span class="keywordflow">if</span> (r == SQLITE_ROW) {
+<a name="l00752"></a>00752 <span class="keywordflow">if</span> (check_row(db_ptr, info) < 0) {
+<a name="l00753"></a>00753 fprintf(stderr, <span class="stringliteral">"ERROR: could not check row.\n"</span>);
+<a name="l00754"></a>00754 <span class="keywordflow">return</span> -1;
+<a name="l00755"></a>00755 }
+<a name="l00756"></a>00756 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00757"></a>00757 fprintf(stderr, <span class="stringliteral">"ERROR: could not begin transaction: %s\n"</span>,
+<a name="l00758"></a>00758 sqlite3_errmsg(db->handle));
+<a name="l00759"></a>00759 <span class="keywordflow">return</span> -2;
+<a name="l00760"></a>00760 }
+<a name="l00761"></a>00761 } <span class="keywordflow">while</span> (r != SQLITE_DONE && !lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a>);
+<a name="l00762"></a>00762
+<a name="l00763"></a>00763 <span class="keywordflow">return</span> 0;
+<a name="l00764"></a>00764 }
+<a name="l00765"></a>00765
+<a name="l00766"></a>00766 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00767"></a>00767 _check(<span class="keyword">struct</span> pinfo *pinfo, <span class="keywordtype">int</span> len, <span class="keywordtype">char</span> *path)
+<a name="l00768"></a>00768 {
+<a name="l00769"></a>00769 <span class="keywordtype">char</span> query[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a> + 2];
+<a name="l00770"></a>00770 <span class="keyword">struct </span>master_db *db;
+<a name="l00771"></a>00771 <span class="keywordtype">int</span> ret;
+<a name="l00772"></a>00772
+<a name="l00773"></a>00773 db = _master_db_open(pinfo-><a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00774"></a>00774 <span class="keywordflow">if</span> (!db)
+<a name="l00775"></a>00775 <span class="keywordflow">return</span> -1;
+<a name="l00776"></a>00776
+<a name="l00777"></a>00777 memcpy(query, path, len);
+<a name="l00778"></a>00778 query[len] = <span class="charliteral">'%'</span>;
+<a name="l00779"></a>00779 query[len + 1] = <span class="charliteral">'\0'</span>;
+<a name="l00780"></a>00780 ret = <a class="code" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lms_db_get_files</a>(db->get_files, query, len + 1);
+<a name="l00781"></a>00781 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00782"></a>00782 <span class="keywordflow">goto</span> end;
+<a name="l00783"></a>00783
+<a name="l00784"></a>00784 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a>(pinfo, _slave_work) != 0) {
+<a name="l00785"></a>00785 ret = -2;
+<a name="l00786"></a>00786 <span class="keywordflow">goto</span> end;
+<a name="l00787"></a>00787 }
+<a name="l00788"></a>00788
+<a name="l00789"></a>00789 _init_sync_wait(pinfo, 1);
+<a name="l00790"></a>00790
+<a name="l00791"></a>00791 ret = _db_files_loop(db, (<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *)pinfo, _check_row);
+<a name="l00792"></a>00792
+<a name="l00793"></a>00793 _master_send_finish(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>);
+<a name="l00794"></a>00794 _init_sync_wait(pinfo, 0);
+<a name="l00795"></a>00795 <a class="code" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave</a>(pinfo, _master_dummy_send_finish);
+<a name="l00796"></a>00796 end:
+<a name="l00797"></a>00797 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(db->get_files);
+<a name="l00798"></a>00798 _master_db_close(db);
+<a name="l00799"></a>00799
+<a name="l00800"></a>00800 <span class="keywordflow">return</span> ret;
+<a name="l00801"></a>00801 }
+<a name="l00802"></a>00802
+<a name="l00803"></a>00803 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00804"></a>00804 _check_single_process(<span class="keyword">struct</span> sinfo *sinfo, <span class="keywordtype">int</span> len, <span class="keywordtype">char</span> *path)
+<a name="l00805"></a>00805 {
+<a name="l00806"></a>00806 <span class="keyword">struct </span>single_process_db *db;
+<a name="l00807"></a>00807 <span class="keywordtype">char</span> query[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a> + 2];
+<a name="l00808"></a>00808 <span class="keywordtype">void</span> **parser_match;
+<a name="l00809"></a>00809 <a class="code" href="structlms.html">lms_t</a> *lms;
+<a name="l00810"></a>00810 <span class="keywordtype">int</span> ret;
+<a name="l00811"></a>00811
+<a name="l00812"></a>00812 lms = sinfo-><a class="code" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>;
+<a name="l00813"></a>00813 db = _single_process_db_open(lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00814"></a>00814 <span class="keywordflow">if</span> (!db)
+<a name="l00815"></a>00815 <span class="keywordflow">return</span> -1;
+<a name="l00816"></a>00816
+<a name="l00817"></a>00817 memcpy(query, path, len);
+<a name="l00818"></a>00818 query[len] = <span class="charliteral">'%'</span>;
+<a name="l00819"></a>00819 query[len + 1] = <span class="charliteral">'\0'</span>;
+<a name="l00820"></a>00820 ret = <a class="code" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lms_db_get_files</a>(db->get_files, query, len + 1);
+<a name="l00821"></a>00821 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00822"></a>00822 <span class="keywordflow">goto</span> end;
+<a name="l00823"></a>00823
+<a name="l00824"></a>00824 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lms_parsers_setup</a>(lms, db->handle) != 0) {
+<a name="l00825"></a>00825 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup parsers.\n"</span>);
+<a name="l00826"></a>00826 ret = -2;
+<a name="l00827"></a>00827 <span class="keywordflow">goto</span> end;
+<a name="l00828"></a>00828 }
+<a name="l00829"></a>00829
+<a name="l00830"></a>00830 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lms_parsers_start</a>(lms, db->handle) != 0) {
+<a name="l00831"></a>00831 fprintf(stderr, <span class="stringliteral">"ERROR: could not start parsers.\n"</span>);
+<a name="l00832"></a>00832 ret = -3;
+<a name="l00833"></a>00833 <span class="keywordflow">goto</span> end;
+<a name="l00834"></a>00834 }
+<a name="l00835"></a>00835
+<a name="l00836"></a>00836 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> < 1) {
+<a name="l00837"></a>00837 fprintf(stderr, <span class="stringliteral">"ERROR: no parser could be started, exit.\n"</span>);
+<a name="l00838"></a>00838 ret = -4;
+<a name="l00839"></a>00839 <span class="keywordflow">goto</span> end;
+<a name="l00840"></a>00840 }
+<a name="l00841"></a>00841
+<a name="l00842"></a>00842 parser_match = malloc(lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> * <span class="keyword">sizeof</span>(*parser_match));
+<a name="l00843"></a>00843 <span class="keywordflow">if</span> (!parser_match) {
+<a name="l00844"></a>00844 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00845"></a>00845 ret = -5;
+<a name="l00846"></a>00846 <span class="keywordflow">goto</span> end;
+<a name="l00847"></a>00847 }
+<a name="l00848"></a>00848
+<a name="l00849"></a>00849 sinfo-><a class="code" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">parser_match</a> = parser_match;
+<a name="l00850"></a>00850
+<a name="l00851"></a>00851 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00852"></a>00852
+<a name="l00853"></a>00853 ret = _db_files_loop(db, (<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *)sinfo, _check_row_single_process);
+<a name="l00854"></a>00854
+<a name="l00855"></a>00855 free(parser_match);
+<a name="l00856"></a>00856 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00857"></a>00857 end:
+<a name="l00858"></a>00858 <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(lms, db->handle);
+<a name="l00859"></a>00859 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(db->get_files);
+<a name="l00860"></a>00860 _single_process_db_close(db);
+<a name="l00861"></a>00861
+<a name="l00862"></a>00862 <span class="keywordflow">return</span> ret;
+<a name="l00863"></a>00863 }
+<a name="l00864"></a>00864
+<a name="l00865"></a>00865 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00866"></a>00866 _lms_check_check_valid(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *path)
+<a name="l00867"></a>00867 {
+<a name="l00868"></a>00868 <span class="keywordflow">if</span> (!lms)
+<a name="l00869"></a>00869 <span class="keywordflow">return</span> -1;
+<a name="l00870"></a>00870
+<a name="l00871"></a>00871 <span class="keywordflow">if</span> (!path)
+<a name="l00872"></a>00872 <span class="keywordflow">return</span> -2;
+<a name="l00873"></a>00873
+<a name="l00874"></a>00874 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>) {
+<a name="l00875"></a>00875 fprintf(stderr, <span class="stringliteral">"ERROR: is already processing.\n"</span>);
+<a name="l00876"></a>00876 <span class="keywordflow">return</span> -3;
+<a name="l00877"></a>00877 }
+<a name="l00878"></a>00878
+<a name="l00879"></a>00879 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00880"></a>00880 fprintf(stderr, <span class="stringliteral">"ERROR: no plugins registered.\n"</span>);
+<a name="l00881"></a>00881 <span class="keywordflow">return</span> -4;
+<a name="l00882"></a>00882 }
+<a name="l00883"></a>00883
+<a name="l00884"></a>00884 <span class="keywordflow">return</span> 0;
+<a name="l00885"></a>00885 }
+<a name="l00886"></a>00886
+<a name="l00899"></a>00899 <span class="keywordtype">int</span>
+<a name="l00900"></a><a class="code" href="lightmediascanner__check_8c.html#859492d896e816498edb471315efced1">00900</a> <a class="code" href="lightmediascanner_8h.html#5b70063cf19648de70bb145404aa3d0b">lms_check</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path)
+<a name="l00901"></a>00901 {
+<a name="l00902"></a>00902 <span class="keywordtype">char</span> path[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>];
+<a name="l00903"></a>00903 <span class="keyword">struct </span>pinfo pinfo;
+<a name="l00904"></a>00904 <span class="keywordtype">int</span> r;
+<a name="l00905"></a>00905
+<a name="l00906"></a>00906 r = _lms_check_check_valid(lms, top_path);
+<a name="l00907"></a>00907 <span class="keywordflow">if</span> (r < 0)
+<a name="l00908"></a>00908 <span class="keywordflow">return</span> r;
+<a name="l00909"></a>00909
+<a name="l00910"></a>00910 pinfo.<a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a> = lms;
+<a name="l00911"></a>00911
+<a name="l00912"></a>00912 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lms_create_pipes</a>(&pinfo) != 0) {
+<a name="l00913"></a>00913 r = -5;
+<a name="l00914"></a>00914 <span class="keywordflow">goto</span> end;
+<a name="l00915"></a>00915 }
+<a name="l00916"></a>00916
+<a name="l00917"></a>00917 <span class="keywordflow">if</span> (realpath(top_path, path) == NULL) {
+<a name="l00918"></a>00918 perror(<span class="stringliteral">"realpath"</span>);
+<a name="l00919"></a>00919 r = -6;
+<a name="l00920"></a>00920 <span class="keywordflow">goto</span> close_pipes;
+<a name="l00921"></a>00921 }
+<a name="l00922"></a>00922
+<a name="l00923"></a>00923 lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 1;
+<a name="l00924"></a>00924 lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a> = 0;
+<a name="l00925"></a>00925 r = _check(&pinfo, strlen(path), path);
+<a name="l00926"></a>00926 lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 0;
+<a name="l00927"></a>00927 lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a> = 0;
+<a name="l00928"></a>00928
+<a name="l00929"></a>00929 close_pipes:
+<a name="l00930"></a>00930 <a class="code" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lms_close_pipes</a>(&pinfo);
+<a name="l00931"></a>00931 end:
+<a name="l00932"></a>00932 <span class="keywordflow">return</span> r;
+<a name="l00933"></a>00933 }
+<a name="l00934"></a>00934
+<a name="l00948"></a>00948 <span class="keywordtype">int</span>
+<a name="l00949"></a><a class="code" href="lightmediascanner__check_8c.html#a56ce530328493e110054aa1eabf66c2">00949</a> <a class="code" href="lightmediascanner_8h.html#bfd6888e606654c585e41aa946637432">lms_check_single_process</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path)
+<a name="l00950"></a>00950 {
+<a name="l00951"></a>00951 <span class="keywordtype">char</span> path[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>];
+<a name="l00952"></a>00952 <span class="keyword">struct </span>sinfo sinfo;
+<a name="l00953"></a>00953 <span class="keywordtype">int</span> r;
+<a name="l00954"></a>00954
+<a name="l00955"></a>00955 r = _lms_check_check_valid(lms, top_path);
+<a name="l00956"></a>00956 <span class="keywordflow">if</span> (r < 0)
+<a name="l00957"></a>00957 <span class="keywordflow">return</span> r;
+<a name="l00958"></a>00958
+<a name="l00959"></a>00959 sinfo.<a class="code" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a> = lms;
+<a name="l00960"></a>00960 sinfo.<a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a> = 0;
+<a name="l00961"></a>00961
+<a name="l00962"></a>00962 <span class="keywordflow">if</span> (realpath(top_path, path) == NULL) {
+<a name="l00963"></a>00963 perror(<span class="stringliteral">"realpath"</span>);
+<a name="l00964"></a>00964 <span class="keywordflow">return</span> -6;
+<a name="l00965"></a>00965 }
+<a name="l00966"></a>00966
+<a name="l00967"></a>00967 lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 1;
+<a name="l00968"></a>00968 lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a> = 0;
+<a name="l00969"></a>00969 r = _check_single_process(&sinfo, strlen(path), path);
+<a name="l00970"></a>00970 lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 0;
+<a name="l00971"></a>00971 lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a> = 0;
+<a name="l00972"></a>00972
+<a name="l00973"></a>00973 <span class="keywordflow">return</span> r;
+<a name="l00974"></a>00974 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_check.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_check.c File Reference</h1><code>#include <sys/wait.h></code><br>
+<code>#include <sys/stat.h></code><br>
+<code>#include <unistd.h></code><br>
+<code>#include <dirent.h></code><br>
+<code>#include <signal.h></code><br>
+<code>#include <time.h></code><br>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <string.h></code><br>
+<code>#include "<a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>"</code><br>
+<code>#include "<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>"</code><br>
+<code>#include "<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>"</code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_check.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__check_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__check_8c.html#369266c24eacffb87046522897a570d5">_GNU_SOURCE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__check_8c.html#f8084f435d209d810eb33deaa35fab5e">COMM_FINFO_FLAG_OUTDATED</a> 1</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__check_8c.html#859492d896e816498edb471315efced1">lms_check</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *top_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__check_8c.html#a56ce530328493e110054aa1eabf66c2">lms_check_single_process</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *top_path)</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="369266c24eacffb87046522897a570d5"></a><!-- doxytag: member="lightmediascanner_check.c::_GNU_SOURCE" ref="369266c24eacffb87046522897a570d5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _GNU_SOURCE </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__check_8c-source.html#l00025">25</a> of file <a class="el" href="lightmediascanner__check_8c-source.html">lightmediascanner_check.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f8084f435d209d810eb33deaa35fab5e"></a><!-- doxytag: member="lightmediascanner_check.c::COMM_FINFO_FLAG_OUTDATED" ref="f8084f435d209d810eb33deaa35fab5e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COMM_FINFO_FLAG_OUTDATED 1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__check_8c-source.html#l00075">75</a> of file <a class="el" href="lightmediascanner__check_8c-source.html">lightmediascanner_check.c</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="859492d896e816498edb471315efced1"></a><!-- doxytag: member="lightmediascanner_check.c::lms_check" ref="859492d896e816498edb471315efced1" args="(lms_t *lms, const char *top_path)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_check </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>top_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Check consistency of given directory.<p>
+This will update media in the given directory or its children. If files are missing, they'll be marked as deleted (dtime is set), if they were marked as deleted and are now present, they are unmarked (dtime is unset).<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>top_path</em> </td><td>top directory to scan.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__check_8c-source.html#l00900">900</a> of file <a class="el" href="lightmediascanner__check_8c-source.html">lightmediascanner_check.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00055">pinfo::common</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00088">lms::is_processing</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00050">cinfo::lms</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00596">lms_close_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00607">lms_create_pipes()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00042">PATH_SIZE</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00089">lms::stop_processing</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="a56ce530328493e110054aa1eabf66c2"></a><!-- doxytag: member="lightmediascanner_check.c::lms_check_single_process" ref="a56ce530328493e110054aa1eabf66c2" args="(lms_t *lms, const char *top_path)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_check_single_process </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>top_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Check consistency of given directory *without fork()-ing* into child process.<p>
+This will update media in the given directory or its children. If files are missing, they'll be marked as deleted (dtime is set), if they were marked as deleted and are now present, they are unmarked (dtime is unset). Note that if a <a class="el" href="structparser.html">parser</a> hangs in the check process, this call will also hang.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>top_path</em> </td><td>top directory to scan.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__check_8c-source.html#l00949">949</a> of file <a class="el" href="lightmediascanner__check_8c-source.html">lightmediascanner_check.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00067">sinfo::commit_counter</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00064">sinfo::common</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00088">lms::is_processing</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00050">cinfo::lms</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00042">PATH_SIZE</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00089">lms::stop_processing</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_check",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_close_pipes",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_create_pipes",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4"];
+}
--- /dev/null
+e5d6266cac6f4e806beb307fbceec1fc
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_check.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="sys/wait.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sys/stat.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="unistd.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="dirent.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="signal.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="time.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="string.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node1 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="lightmediascanner_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html"];
+ Node12 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node13 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node13 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node13 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node17 [label="poll.h",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 [label="limits.h",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 [label="lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node19 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node19 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
--- /dev/null
+8b0dfa63d4ad79d27139cf1f8d53814c
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_db.h</h1><a href="lightmediascanner__db_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_DB_H_</span>
+<a name="l00022"></a><a class="code" href="lightmediascanner__db_8h.html#5360af19a6df2e8b0d326344bb27e151">00022</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_DB_H_ 1</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#ifdef API</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#undef API</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#ifdef __GNUC__</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ >= 4</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor"># define API __attribute__ ((visibility("default")))</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...) __attribute__((nonnull(__VA_ARGS__)))</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00040"></a><a class="code" href="lightmediascanner__db_8h.html#d8ce4efaa307683d3d763b37b4711c53">00040</a> <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00041"></a><a class="code" href="lightmediascanner__db_8h.html#6fe68cac0abf3e2ca61141920414e93a">00041</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__plugin_8h.html">lightmediascanner_plugin.h</a>></span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__utils_8h.html">lightmediascanner_utils.h</a>></span>
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>
+<a name="l00060"></a>00060 <span class="comment">/* Image Records */</span>
+<a name="l00061"></a><a class="code" href="structlms__gps__info.html">00061</a> <span class="keyword">struct </span><a class="code" href="structlms__gps__info.html">lms_gps_info</a> {
+<a name="l00062"></a><a class="code" href="structlms__gps__info.html#70f152098accf3d46f18bc159e3b4359">00062</a> <span class="keywordtype">double</span> <a class="code" href="structlms__gps__info.html#70f152098accf3d46f18bc159e3b4359">latitude</a>;
+<a name="l00063"></a><a class="code" href="structlms__gps__info.html#109202a83eb79b9a10df135600260e1b">00063</a> <span class="keywordtype">double</span> <a class="code" href="structlms__gps__info.html#109202a83eb79b9a10df135600260e1b">longitude</a>;
+<a name="l00064"></a><a class="code" href="structlms__gps__info.html#9b56b5dbae3e5c5722f7331c2bcbd520">00064</a> <span class="keywordtype">double</span> <a class="code" href="structlms__gps__info.html#9b56b5dbae3e5c5722f7331c2bcbd520">altitude</a>;
+<a name="l00065"></a>00065 };
+<a name="l00066"></a>00066
+<a name="l00067"></a><a class="code" href="structlms__image__info.html">00067</a> <span class="keyword">struct </span><a class="code" href="structlms__image__info.html">lms_image_info</a> {
+<a name="l00068"></a><a class="code" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">00068</a> int64_t <a class="code" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">id</a>;
+<a name="l00069"></a><a class="code" href="structlms__image__info.html#6242d231ae1972fb25bdaeed614d7a63">00069</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__image__info.html#6242d231ae1972fb25bdaeed614d7a63">title</a>;
+<a name="l00070"></a><a class="code" href="structlms__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">00070</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">artist</a>;
+<a name="l00071"></a><a class="code" href="structlms__image__info.html#150973d3ac9f60f1b74f0a0d08c7f288">00071</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms__image__info.html#150973d3ac9f60f1b74f0a0d08c7f288">date</a>;
+<a name="l00072"></a><a class="code" href="structlms__image__info.html#fbd2df9f6f5f290ac02ce4d803677249">00072</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="structlms__image__info.html#fbd2df9f6f5f290ac02ce4d803677249">width</a>;
+<a name="l00073"></a><a class="code" href="structlms__image__info.html#f2ae81781dadf7ecaa307b3bc91e710e">00073</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="structlms__image__info.html#f2ae81781dadf7ecaa307b3bc91e710e">height</a>;
+<a name="l00074"></a><a class="code" href="structlms__image__info.html#434330468b69d0f14b344c672d4778af">00074</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="structlms__image__info.html#434330468b69d0f14b344c672d4778af">orientation</a>;
+<a name="l00075"></a><a class="code" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">00075</a> <span class="keyword">struct </span><a class="code" href="structlms__gps__info.html">lms_gps_info</a> <a class="code" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">gps</a>;
+<a name="l00076"></a>00076 };
+<a name="l00077"></a>00077
+<a name="l00078"></a><a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">00078</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>lms_db_image <a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a>;
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *<a class="code" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new</a>(sqlite3 *db) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00081"></a>00081 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lms_db_image_start</a>(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00082"></a>00082 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lms_db_image_free</a>(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00083"></a>00083 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#gbf78dd3b90caa31e8901369211501200">lms_db_image_add</a>(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi, <span class="keyword">struct</span> <a class="code" href="structlms__image__info.html">lms_image_info</a> *info) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00084"></a>00084
+<a name="l00085"></a>00085 <span class="comment">/* Audio Records */</span>
+<a name="l00086"></a><a class="code" href="structlms__audio__info.html">00086</a> <span class="keyword">struct </span><a class="code" href="structlms__audio__info.html">lms_audio_info</a> {
+<a name="l00087"></a><a class="code" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">00087</a> int64_t <a class="code" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">id</a>;
+<a name="l00088"></a><a class="code" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">00088</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">title</a>;
+<a name="l00089"></a><a class="code" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">00089</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">artist</a>;
+<a name="l00090"></a><a class="code" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">00090</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">album</a>;
+<a name="l00091"></a><a class="code" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">00091</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">genre</a>;
+<a name="l00092"></a><a class="code" href="structlms__audio__info.html#7197e471d313274c4e361b2ff9e60e8a">00092</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms__audio__info.html#7197e471d313274c4e361b2ff9e60e8a">playcnt</a>;
+<a name="l00093"></a><a class="code" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">00093</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">trackno</a>;
+<a name="l00094"></a><a class="code" href="structlms__audio__info.html#932e73ccd8ff946831930be65d1ba2d2">00094</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structlms__audio__info.html#932e73ccd8ff946831930be65d1ba2d2">rating</a>;
+<a name="l00095"></a>00095 };
+<a name="l00096"></a>00096
+<a name="l00097"></a><a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">00097</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>lms_db_audio <a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a>;
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *<a class="code" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new</a>(sqlite3 *db) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00100"></a>00100 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lms_db_audio_start</a>(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00101"></a>00101 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lms_db_audio_free</a>(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00102"></a>00102 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g9b83f734ec4905778dec5494f39b7397">lms_db_audio_add</a>(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00103"></a>00103
+<a name="l00104"></a>00104 <span class="comment">/* Video Records */</span>
+<a name="l00105"></a><a class="code" href="structlms__video__info.html">00105</a> <span class="keyword">struct </span><a class="code" href="structlms__video__info.html">lms_video_info</a> {
+<a name="l00106"></a><a class="code" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">00106</a> int64_t <a class="code" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">id</a>;
+<a name="l00107"></a><a class="code" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">00107</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">title</a>;
+<a name="l00108"></a><a class="code" href="structlms__video__info.html#c0bfe0cf4fe29e3c24a6df4248c7640e">00108</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__video__info.html#c0bfe0cf4fe29e3c24a6df4248c7640e">artist</a>;
+<a name="l00109"></a>00109 };
+<a name="l00110"></a>00110
+<a name="l00111"></a><a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">00111</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>lms_db_video <a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a>;
+<a name="l00112"></a>00112
+<a name="l00113"></a>00113 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *<a class="code" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new</a>(sqlite3 *db) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00114"></a>00114 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lms_db_video_start</a>(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00115"></a>00115 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lms_db_video_free</a>(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00116"></a>00116 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#gb07d1e7fe962486b6e9d00581e8aac19">lms_db_video_add</a>(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv, <span class="keyword">struct</span> <a class="code" href="structlms__video__info.html">lms_video_info</a> *info) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00117"></a>00117
+<a name="l00118"></a>00118 <span class="comment">/* Playlist Records */</span>
+<a name="l00119"></a><a class="code" href="structlms__playlist__info.html">00119</a> <span class="keyword">struct </span><a class="code" href="structlms__playlist__info.html">lms_playlist_info</a> {
+<a name="l00120"></a><a class="code" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">00120</a> int64_t <a class="code" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">id</a>;
+<a name="l00121"></a><a class="code" href="structlms__playlist__info.html#515e63ba413a60d21ee73687151387f0">00121</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> <a class="code" href="structlms__playlist__info.html#515e63ba413a60d21ee73687151387f0">title</a>;
+<a name="l00122"></a><a class="code" href="structlms__playlist__info.html#81cc52f5b6ce04cd64cf3884cb774663">00122</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms__playlist__info.html#81cc52f5b6ce04cd64cf3884cb774663">n_entries</a>;
+<a name="l00123"></a>00123 };
+<a name="l00124"></a>00124
+<a name="l00125"></a><a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">00125</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>lms_db_playlist <a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a>;
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *<a class="code" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new</a>(sqlite3 *db) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00128"></a>00128 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lms_db_playlist_start</a>(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00129"></a>00129 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lms_db_playlist_free</a>(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00130"></a>00130 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="group__LMS__DB.html#g8864e532609191f07737c1d23c1bc65f">lms_db_playlist_add</a>(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp, <span class="keyword">struct</span> <a class="code" href="structlms__playlist__info.html">lms_playlist_info</a> *info) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00131"></a>00131
+<a name="l00136"></a>00136 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span>}
+<a name="l00138"></a>00138 <span class="preprocessor">#endif</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_DB_H_ */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_db.h File Reference</h1><code>#include <<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>></code><br>
+<code>#include <<a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_db.h:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__db_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__gps__info.html">lms_gps_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html">lms_image_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html">lms_audio_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__video__info.html">lms_video_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__playlist__info.html">lms_playlist_info</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db_8h.html#5360af19a6df2e8b0d326344bb27e151">_LIGHTMEDIASCANNER_DB_H_</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(...)</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_db_image </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_db_audio </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_db_video </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct lms_db_playlist </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lms_db_image_start</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lms_db_image_free</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#gbf78dd3b90caa31e8901369211501200">lms_db_image_add</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi, struct <a class="el" href="structlms__image__info.html">lms_image_info</a> *info) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lms_db_audio_start</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lms_db_audio_free</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g9b83f734ec4905778dec5494f39b7397">lms_db_audio_add</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, struct <a class="el" href="structlms__audio__info.html">lms_audio_info</a> *info) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lms_db_video_start</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lms_db_video_free</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#gb07d1e7fe962486b6e9d00581e8aac19">lms_db_video_add</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv, struct <a class="el" href="structlms__video__info.html">lms_video_info</a> *info) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API <a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lms_db_playlist_start</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lms_db_playlist_free</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g8864e532609191f07737c1d23c1bc65f">lms_db_playlist_add</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp, struct <a class="el" href="structlms__playlist__info.html">lms_playlist_info</a> *info) GNUC_NON_NULL(1</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="5360af19a6df2e8b0d326344bb27e151"></a><!-- doxytag: member="lightmediascanner_db.h::_LIGHTMEDIASCANNER_DB_H_" ref="5360af19a6df2e8b0d326344bb27e151" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _LIGHTMEDIASCANNER_DB_H_ 1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00022">22</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d8ce4efaa307683d3d763b37b4711c53"></a><!-- doxytag: member="lightmediascanner_db.h::API" ref="d8ce4efaa307683d3d763b37b4711c53" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define API </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00040">40</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6fe68cac0abf3e2ca61141920414e93a"></a><!-- doxytag: member="lightmediascanner_db.h::GNUC_NON_NULL" ref="6fe68cac0abf3e2ca61141920414e93a" args="(...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_NON_NULL </td>
+ <td>(</td>
+ <td class="paramtype"> <em>...</em> </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00041">41</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="src/lib/lightmediascanner_db_audio.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__audio_8c.html"];
+ Node1 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="src/lib/lightmediascanner_db_image.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__image_8c.html"];
+ Node1 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="src/lib/lightmediascanner_db_playlist.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__playlist_8c.html"];
+ Node1 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="src/lib/lightmediascanner_db_video.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__video_8c.html"];
+}
--- /dev/null
+edb1284dadd24ad1ebf770b69c32f41b
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node2 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node2 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="lightmediascanner_utils.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8h.html"];
+}
--- /dev/null
+168ff3253177e1eea055d0b7bdf588cf
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_audio.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_db_audio.c</h1><a href="lightmediascanner__db__audio_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a>></span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <span class="keyword">struct </span>lms_db_audio {
+<a name="l00027"></a>00027 sqlite3 *db;
+<a name="l00028"></a>00028 sqlite3_stmt *insert_audio;
+<a name="l00029"></a>00029 sqlite3_stmt *insert_artist;
+<a name="l00030"></a>00030 sqlite3_stmt *insert_album;
+<a name="l00031"></a>00031 sqlite3_stmt *insert_genre;
+<a name="l00032"></a>00032 sqlite3_stmt *get_artist;
+<a name="l00033"></a>00033 sqlite3_stmt *get_album;
+<a name="l00034"></a>00034 sqlite3_stmt *get_genre;
+<a name="l00035"></a>00035 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _references;
+<a name="l00036"></a>00036 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _is_started:1;
+<a name="l00037"></a>00037 };
+<a name="l00038"></a>00038
+<a name="l00039"></a>00039 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structlms__db__cache.html">lms_db_cache</a> _cache = {0, NULL};
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00042"></a>00042 _db_create(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">char</span> *sql)
+<a name="l00043"></a>00043 {
+<a name="l00044"></a>00044 <span class="keywordtype">char</span> *err;
+<a name="l00045"></a>00045 <span class="keywordtype">int</span> r;
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047 r = sqlite3_exec(db, sql, NULL, NULL, &err);
+<a name="l00048"></a>00048 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00049"></a>00049 fprintf(stderr, <span class="stringliteral">"ERROR: could not create \"%s\": %s\n"</span>, name, err);
+<a name="l00050"></a>00050 sqlite3_free(err);
+<a name="l00051"></a>00051 <span class="keywordflow">return</span> -1;
+<a name="l00052"></a>00052 }
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="keywordflow">return</span> 0;
+<a name="l00055"></a>00055 }
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00058"></a>00058 _db_table_updater_audios_0(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run)
+<a name="l00059"></a>00059 {
+<a name="l00060"></a>00060 <span class="keywordflow">return</span> 0;
+<a name="l00061"></a>00061 }
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00064"></a>00064 _db_table_updater_audios_1(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run)
+<a name="l00065"></a>00065 {
+<a name="l00066"></a>00066 <span class="keywordtype">char</span> *err;
+<a name="l00067"></a>00067 <span class="keywordtype">int</span> ret;
+<a name="l00068"></a>00068
+<a name="l00069"></a>00069 ret = sqlite3_exec(db, <span class="stringliteral">"DELETE FROM files"</span>, NULL, NULL, &err);
+<a name="l00070"></a>00070 <span class="keywordflow">if</span> (ret != SQLITE_OK) {
+<a name="l00071"></a>00071 fprintf(stderr, <span class="stringliteral">"ERROR: could not delete \"files\": %s\n"</span>, err);
+<a name="l00072"></a>00072 sqlite3_free(err);
+<a name="l00073"></a>00073 <span class="keywordflow">goto</span> done;
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075
+<a name="l00076"></a>00076 ret = sqlite3_exec(db, <span class="stringliteral">"DROP TABLE IF EXISTS audios"</span>, NULL, NULL, &err);
+<a name="l00077"></a>00077 <span class="keywordflow">if</span> (ret != SQLITE_OK) {
+<a name="l00078"></a>00078 fprintf(stderr, <span class="stringliteral">"ERROR: could not drop \"audios\": %s\n"</span>, err);
+<a name="l00079"></a>00079 sqlite3_free(err);
+<a name="l00080"></a>00080 <span class="keywordflow">goto</span> done;
+<a name="l00081"></a>00081 }
+<a name="l00082"></a>00082
+<a name="l00083"></a>00083 ret = _db_create(db, <span class="stringliteral">"audios"</span>,
+<a name="l00084"></a>00084 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS audios ("</span>
+<a name="l00085"></a>00085 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00086"></a>00086 <span class="stringliteral">"title TEXT, "</span>
+<a name="l00087"></a>00087 <span class="stringliteral">"album_id INTEGER, "</span>
+<a name="l00088"></a>00088 <span class="stringliteral">"artist_id INTEGER, "</span>
+<a name="l00089"></a>00089 <span class="stringliteral">"genre_id INTEGER, "</span>
+<a name="l00090"></a>00090 <span class="stringliteral">"trackno INTEGER, "</span>
+<a name="l00091"></a>00091 <span class="stringliteral">"rating INTEGER, "</span>
+<a name="l00092"></a>00092 <span class="stringliteral">"playcnt INTEGER"</span>
+<a name="l00093"></a>00093 <span class="stringliteral">")"</span>);
+<a name="l00094"></a>00094 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00095"></a>00095 <span class="keywordflow">goto</span> done;
+<a name="l00096"></a>00096
+<a name="l00097"></a>00097 ret = _db_create(db, <span class="stringliteral">"audios_title_idx"</span>,
+<a name="l00098"></a>00098 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00099"></a>00099 <span class="stringliteral">"audios_title_idx ON audios (title)"</span>);
+<a name="l00100"></a>00100 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00101"></a>00101 <span class="keywordflow">goto</span> done;
+<a name="l00102"></a>00102
+<a name="l00103"></a>00103 ret = _db_create(db, <span class="stringliteral">"audios_album_idx"</span>,
+<a name="l00104"></a>00104 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00105"></a>00105 <span class="stringliteral">"audios_album_idx ON audios (album_id)"</span>);
+<a name="l00106"></a>00106 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00107"></a>00107 <span class="keywordflow">goto</span> done;
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109 ret = _db_create(db, <span class="stringliteral">"audios_artist_idx"</span>,
+<a name="l00110"></a>00110 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00111"></a>00111 <span class="stringliteral">"audios_artist_idx ON audios (artist_id)"</span>);
+<a name="l00112"></a>00112 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00113"></a>00113 <span class="keywordflow">goto</span> done;
+<a name="l00114"></a>00114
+<a name="l00115"></a>00115 ret = _db_create(db, <span class="stringliteral">"audios_genre_idx"</span>,
+<a name="l00116"></a>00116 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00117"></a>00117 <span class="stringliteral">"audios_genre_idx ON audios (genre_id)"</span>);
+<a name="l00118"></a>00118 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00119"></a>00119 <span class="keywordflow">goto</span> done;
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 ret = _db_create(db, <span class="stringliteral">"audios_trackno_idx"</span>,
+<a name="l00122"></a>00122 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00123"></a>00123 <span class="stringliteral">"audios_trackno_idx ON audios (trackno)"</span>);
+<a name="l00124"></a>00124 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00125"></a>00125 <span class="keywordflow">goto</span> done;
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 ret = _db_create(db, <span class="stringliteral">"audios_playcnt_idx"</span>,
+<a name="l00128"></a>00128 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00129"></a>00129 <span class="stringliteral">"audios_playcnt_idx ON audios (playcnt)"</span>);
+<a name="l00130"></a>00130 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00131"></a>00131 <span class="keywordflow">goto</span> done;
+<a name="l00132"></a>00132
+<a name="l00133"></a>00133 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00134"></a>00134 <span class="stringliteral">"delete_audios_on_files_deleted "</span>
+<a name="l00135"></a>00135 <span class="stringliteral">"DELETE ON files FOR EACH ROW BEGIN"</span>
+<a name="l00136"></a>00136 <span class="stringliteral">" DELETE FROM audios WHERE id = OLD.id; END;"</span>);
+<a name="l00137"></a>00137 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00138"></a>00138 <span class="keywordflow">goto</span> done;
+<a name="l00139"></a>00139
+<a name="l00140"></a>00140 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00141"></a>00141 <span class="stringliteral">"delete_files_on_audios_deleted "</span>
+<a name="l00142"></a>00142 <span class="stringliteral">"DELETE ON audios FOR EACH ROW BEGIN"</span>
+<a name="l00143"></a>00143 <span class="stringliteral">" DELETE FROM files WHERE id = OLD.id; END;"</span>);
+<a name="l00144"></a>00144
+<a name="l00145"></a>00145 done:
+<a name="l00146"></a>00146 <span class="keywordflow">return</span> ret;
+<a name="l00147"></a>00147 }
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> _db_table_updater_audios[] = {
+<a name="l00150"></a>00150 _db_table_updater_audios_0,
+<a name="l00151"></a>00151 _db_table_updater_audios_1
+<a name="l00152"></a>00152 };
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00155"></a>00155 _db_table_updater_audio_artists_0(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run) {
+<a name="l00156"></a>00156 <span class="keywordtype">int</span> ret;
+<a name="l00157"></a>00157
+<a name="l00158"></a>00158 ret = _db_create(db, <span class="stringliteral">"audio_artists"</span>,
+<a name="l00159"></a>00159 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS audio_artists ("</span>
+<a name="l00160"></a>00160 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00161"></a>00161 <span class="stringliteral">"name TEXT UNIQUE"</span>
+<a name="l00162"></a>00162 <span class="stringliteral">")"</span>);
+<a name="l00163"></a>00163 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00164"></a>00164 <span class="keywordflow">goto</span> done;
+<a name="l00165"></a>00165
+<a name="l00166"></a>00166 ret = _db_create(db, <span class="stringliteral">"audio_artists_name_idx"</span>,
+<a name="l00167"></a>00167 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00168"></a>00168 <span class="stringliteral">"audio_artists_name_idx ON audio_artists (name)"</span>);
+<a name="l00169"></a>00169
+<a name="l00170"></a>00170 done:
+<a name="l00171"></a>00171 <span class="keywordflow">return</span> ret;
+<a name="l00172"></a>00172 }
+<a name="l00173"></a>00173
+<a name="l00174"></a>00174 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> _db_table_updater_audio_artists[] = {
+<a name="l00175"></a>00175 _db_table_updater_audio_artists_0
+<a name="l00176"></a>00176 };
+<a name="l00177"></a>00177
+<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00179"></a>00179 _db_table_updater_audio_albums_0(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run) {
+<a name="l00180"></a>00180 <span class="keywordtype">int</span> ret;
+<a name="l00181"></a>00181
+<a name="l00182"></a>00182 ret = _db_create(db, <span class="stringliteral">"audio_albums"</span>,
+<a name="l00183"></a>00183 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS audio_albums ("</span>
+<a name="l00184"></a>00184 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00185"></a>00185 <span class="stringliteral">"artist_id INTEGER, "</span>
+<a name="l00186"></a>00186 <span class="stringliteral">"name TEXT"</span>
+<a name="l00187"></a>00187 <span class="stringliteral">")"</span>);
+<a name="l00188"></a>00188 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00189"></a>00189 <span class="keywordflow">goto</span> done;
+<a name="l00190"></a>00190
+<a name="l00191"></a>00191 ret = _db_create(db, <span class="stringliteral">"audio_albums_name_idx"</span>,
+<a name="l00192"></a>00192 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00193"></a>00193 <span class="stringliteral">"audio_albums_name_idx ON audio_albums (name)"</span>);
+<a name="l00194"></a>00194 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00195"></a>00195 <span class="keywordflow">goto</span> done;
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 ret = _db_create(db, <span class="stringliteral">"audio_albums_artist_idx"</span>,
+<a name="l00198"></a>00198 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00199"></a>00199 <span class="stringliteral">"audio_albums_artist_idx ON audio_albums (artist_id)"</span>);
+<a name="l00200"></a>00200 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00201"></a>00201 <span class="keywordflow">goto</span> done;
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00204"></a>00204 <span class="stringliteral">"delete_audios_on_albums_deleted "</span>
+<a name="l00205"></a>00205 <span class="stringliteral">"DELETE ON audio_albums FOR EACH ROW BEGIN"</span>
+<a name="l00206"></a>00206 <span class="stringliteral">" DELETE FROM audios WHERE album_id = OLD.id; END;"</span>);
+<a name="l00207"></a>00207 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00208"></a>00208 <span class="keywordflow">goto</span> done;
+<a name="l00209"></a>00209
+<a name="l00210"></a>00210 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00211"></a>00211 <span class="stringliteral">"delete_audio_albums_on_artists_deleted "</span>
+<a name="l00212"></a>00212 <span class="stringliteral">"DELETE ON audio_artists FOR EACH ROW BEGIN"</span>
+<a name="l00213"></a>00213 <span class="stringliteral">" DELETE FROM audio_albums WHERE artist_id = OLD.id; END;"</span>);
+<a name="l00214"></a>00214
+<a name="l00215"></a>00215 done:
+<a name="l00216"></a>00216 <span class="keywordflow">return</span> ret;
+<a name="l00217"></a>00217 }
+<a name="l00218"></a>00218
+<a name="l00219"></a>00219 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> _db_table_updater_audio_albums[] = {
+<a name="l00220"></a>00220 _db_table_updater_audio_albums_0
+<a name="l00221"></a>00221 };
+<a name="l00222"></a>00222
+<a name="l00223"></a>00223 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00224"></a>00224 _db_table_updater_audio_genres_0(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run) {
+<a name="l00225"></a>00225 <span class="keywordtype">int</span> ret;
+<a name="l00226"></a>00226
+<a name="l00227"></a>00227 ret = _db_create(db, <span class="stringliteral">"audio_genres"</span>,
+<a name="l00228"></a>00228 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS audio_genres ("</span>
+<a name="l00229"></a>00229 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00230"></a>00230 <span class="stringliteral">"name TEXT UNIQUE"</span>
+<a name="l00231"></a>00231 <span class="stringliteral">")"</span>);
+<a name="l00232"></a>00232 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00233"></a>00233 <span class="keywordflow">goto</span> done;
+<a name="l00234"></a>00234
+<a name="l00235"></a>00235 ret = _db_create(db, <span class="stringliteral">"audio_genres_name_idx"</span>,
+<a name="l00236"></a>00236 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00237"></a>00237 <span class="stringliteral">"audio_albums_name_idx ON audio_albums (name)"</span>);
+<a name="l00238"></a>00238 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00239"></a>00239 <span class="keywordflow">goto</span> done;
+<a name="l00240"></a>00240
+<a name="l00241"></a>00241 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00242"></a>00242 <span class="stringliteral">"delete_audios_on_genres_deleted "</span>
+<a name="l00243"></a>00243 <span class="stringliteral">"DELETE ON audio_genres FOR EACH ROW BEGIN"</span>
+<a name="l00244"></a>00244 <span class="stringliteral">" DELETE FROM audios WHERE genre_id = OLD.id; END;"</span>);
+<a name="l00245"></a>00245
+<a name="l00246"></a>00246 done:
+<a name="l00247"></a>00247 <span class="keywordflow">return</span> ret;
+<a name="l00248"></a>00248 }
+<a name="l00249"></a>00249
+<a name="l00250"></a>00250 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> _db_table_updater_audio_genres[] = {
+<a name="l00251"></a>00251 _db_table_updater_audio_genres_0
+<a name="l00252"></a>00252 };
+<a name="l00253"></a>00253
+<a name="l00254"></a><a class="code" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">00254</a> <span class="preprocessor">#define _DB_T_UPDATE(db, name, array) \</span>
+<a name="l00255"></a>00255 <span class="preprocessor"> lms_db_table_update_if_required(db, name, LMS_ARRAY_SIZE(array), array)</span>
+<a name="l00256"></a>00256 <span class="preprocessor"></span>
+<a name="l00257"></a>00257 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00258"></a>00258 _db_create_tables_if_required(sqlite3 *db)
+<a name="l00259"></a>00259 {
+<a name="l00260"></a>00260 <span class="keywordtype">int</span> ret;
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 ret = <a class="code" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">_DB_T_UPDATE</a>(db, <span class="stringliteral">"audios"</span>, _db_table_updater_audios);
+<a name="l00263"></a>00263 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00264"></a>00264 <span class="keywordflow">goto</span> done;
+<a name="l00265"></a>00265
+<a name="l00266"></a>00266 ret = <a class="code" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">_DB_T_UPDATE</a>(db, <span class="stringliteral">"audio_artists"</span>, _db_table_updater_audio_artists);
+<a name="l00267"></a>00267 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00268"></a>00268 <span class="keywordflow">goto</span> done;
+<a name="l00269"></a>00269
+<a name="l00270"></a>00270 ret = <a class="code" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">_DB_T_UPDATE</a>(db, <span class="stringliteral">"audio_albums"</span>, _db_table_updater_audio_albums);
+<a name="l00271"></a>00271 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00272"></a>00272 <span class="keywordflow">goto</span> done;
+<a name="l00273"></a>00273
+<a name="l00274"></a>00274 ret = <a class="code" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">_DB_T_UPDATE</a>(db, <span class="stringliteral">"audio_genres"</span>, _db_table_updater_audio_genres);
+<a name="l00275"></a>00275
+<a name="l00276"></a>00276 done:
+<a name="l00277"></a>00277 <span class="keywordflow">return</span> ret;
+<a name="l00278"></a>00278 }
+<a name="l00279"></a>00279
+<a name="l00280"></a>00280 <span class="preprocessor">#undef _DB_T_UPDATE</span>
+<a name="l00281"></a>00281 <span class="preprocessor"></span>
+<a name="l00296"></a>00296 <a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *
+<a name="l00297"></a><a class="code" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">00297</a> <a class="code" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new</a>(sqlite3 *db)
+<a name="l00298"></a>00298 {
+<a name="l00299"></a>00299 <a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda;
+<a name="l00300"></a>00300 <span class="keywordtype">void</span> *p;
+<a name="l00301"></a>00301
+<a name="l00302"></a>00302 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lms_db_cache_get</a>(&_cache, db, &p) == 0) {
+<a name="l00303"></a>00303 lda = p;
+<a name="l00304"></a>00304 lda->_references++;
+<a name="l00305"></a>00305 <span class="keywordflow">return</span> lda;
+<a name="l00306"></a>00306 }
+<a name="l00307"></a>00307
+<a name="l00308"></a>00308 <span class="keywordflow">if</span> (!db)
+<a name="l00309"></a>00309 <span class="keywordflow">return</span> NULL;
+<a name="l00310"></a>00310
+<a name="l00311"></a>00311 <span class="keywordflow">if</span> (_db_create_tables_if_required(db) != 0) {
+<a name="l00312"></a>00312 fprintf(stderr, <span class="stringliteral">"ERROR: could not create tables.\n"</span>);
+<a name="l00313"></a>00313 <span class="keywordflow">return</span> NULL;
+<a name="l00314"></a>00314 }
+<a name="l00315"></a>00315
+<a name="l00316"></a>00316 lda = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a>));
+<a name="l00317"></a>00317 lda->_references = 1;
+<a name="l00318"></a>00318 lda->db = db;
+<a name="l00319"></a>00319
+<a name="l00320"></a>00320 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lms_db_cache_add</a>(&_cache, db, lda) != 0) {
+<a name="l00321"></a>00321 <a class="code" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lms_db_audio_free</a>(lda);
+<a name="l00322"></a>00322 <span class="keywordflow">return</span> NULL;
+<a name="l00323"></a>00323 }
+<a name="l00324"></a>00324
+<a name="l00325"></a>00325 <span class="keywordflow">return</span> lda;
+<a name="l00326"></a>00326 }
+<a name="l00327"></a>00327
+<a name="l00340"></a>00340 <span class="keywordtype">int</span>
+<a name="l00341"></a><a class="code" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">00341</a> <a class="code" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lms_db_audio_start</a>(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda)
+<a name="l00342"></a>00342 {
+<a name="l00343"></a>00343 <span class="keywordflow">if</span> (!lda)
+<a name="l00344"></a>00344 <span class="keywordflow">return</span> -1;
+<a name="l00345"></a>00345 <span class="keywordflow">if</span> (lda->_is_started)
+<a name="l00346"></a>00346 <span class="keywordflow">return</span> 0;
+<a name="l00347"></a>00347
+<a name="l00348"></a>00348 lda->insert_audio = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00349"></a>00349 <span class="stringliteral">"INSERT OR REPLACE INTO audios "</span>
+<a name="l00350"></a>00350 <span class="stringliteral">"(id, title, album_id, artist_id, genre_id, trackno, rating, playcnt) "</span>
+<a name="l00351"></a>00351 <span class="stringliteral">"VALUES (?, ?, ?, ?, ?, ?, ?, ?)"</span>);
+<a name="l00352"></a>00352 <span class="keywordflow">if</span> (!lda->insert_audio)
+<a name="l00353"></a>00353 <span class="keywordflow">return</span> -2;
+<a name="l00354"></a>00354
+<a name="l00355"></a>00355 lda->insert_artist = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00356"></a>00356 <span class="stringliteral">"INSERT INTO audio_artists (name) VALUES (?)"</span>);
+<a name="l00357"></a>00357 <span class="keywordflow">if</span> (!lda->insert_artist)
+<a name="l00358"></a>00358 <span class="keywordflow">return</span> -3;
+<a name="l00359"></a>00359
+<a name="l00360"></a>00360 lda->insert_album = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00361"></a>00361 <span class="stringliteral">"INSERT INTO audio_albums (artist_id, name) VALUES (?, ?)"</span>);
+<a name="l00362"></a>00362 <span class="keywordflow">if</span> (!lda->insert_album)
+<a name="l00363"></a>00363 <span class="keywordflow">return</span> -4;
+<a name="l00364"></a>00364
+<a name="l00365"></a>00365 lda->insert_genre = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00366"></a>00366 <span class="stringliteral">"INSERT INTO audio_genres (name) VALUES (?)"</span>);
+<a name="l00367"></a>00367 <span class="keywordflow">if</span> (!lda->insert_genre)
+<a name="l00368"></a>00368 <span class="keywordflow">return</span> -5;
+<a name="l00369"></a>00369
+<a name="l00370"></a>00370 lda->get_artist = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00371"></a>00371 <span class="stringliteral">"SELECT id FROM audio_artists WHERE name = ? LIMIT 1"</span>);
+<a name="l00372"></a>00372 <span class="keywordflow">if</span> (!lda->get_artist)
+<a name="l00373"></a>00373 <span class="keywordflow">return</span> -6;
+<a name="l00374"></a>00374
+<a name="l00375"></a>00375 lda->get_album = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00376"></a>00376 <span class="stringliteral">"SELECT id FROM audio_albums WHERE name = ? AND artist_id = ? LIMIT 1"</span>);
+<a name="l00377"></a>00377 <span class="keywordflow">if</span> (!lda->get_album)
+<a name="l00378"></a>00378 <span class="keywordflow">return</span> -7;
+<a name="l00379"></a>00379
+<a name="l00380"></a>00380 lda->get_genre = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00381"></a>00381 <span class="stringliteral">"SELECT id FROM audio_genres WHERE name = ? LIMIT 1"</span>);
+<a name="l00382"></a>00382 <span class="keywordflow">if</span> (!lda->get_genre)
+<a name="l00383"></a>00383 <span class="keywordflow">return</span> -8;
+<a name="l00384"></a>00384
+<a name="l00385"></a>00385 lda->_is_started = 1;
+<a name="l00386"></a>00386 <span class="keywordflow">return</span> 0;
+<a name="l00387"></a>00387 }
+<a name="l00388"></a>00388
+<a name="l00401"></a>00401 <span class="keywordtype">int</span>
+<a name="l00402"></a><a class="code" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">00402</a> <a class="code" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lms_db_audio_free</a>(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda)
+<a name="l00403"></a>00403 {
+<a name="l00404"></a>00404 <span class="keywordtype">int</span> r;
+<a name="l00405"></a>00405
+<a name="l00406"></a>00406 <span class="keywordflow">if</span> (!lda)
+<a name="l00407"></a>00407 <span class="keywordflow">return</span> -1;
+<a name="l00408"></a>00408 <span class="keywordflow">if</span> (lda->_references == 0) {
+<a name="l00409"></a>00409 fprintf(stderr, <span class="stringliteral">"ERROR: over-called lms_db_audio_free(%p)\n"</span>, lda);
+<a name="l00410"></a>00410 <span class="keywordflow">return</span> -1;
+<a name="l00411"></a>00411 }
+<a name="l00412"></a>00412
+<a name="l00413"></a>00413 lda->_references--;
+<a name="l00414"></a>00414 <span class="keywordflow">if</span> (lda->_references > 0)
+<a name="l00415"></a>00415 <span class="keywordflow">return</span> 0;
+<a name="l00416"></a>00416
+<a name="l00417"></a>00417 <span class="keywordflow">if</span> (lda->insert_audio)
+<a name="l00418"></a>00418 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(lda->insert_audio, <span class="stringliteral">"insert_audio"</span>);
+<a name="l00419"></a>00419
+<a name="l00420"></a>00420 <span class="keywordflow">if</span> (lda->insert_artist)
+<a name="l00421"></a>00421 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(lda->insert_artist, <span class="stringliteral">"insert_artist"</span>);
+<a name="l00422"></a>00422
+<a name="l00423"></a>00423 <span class="keywordflow">if</span> (lda->insert_album)
+<a name="l00424"></a>00424 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(lda->insert_album, <span class="stringliteral">"insert_album"</span>);
+<a name="l00425"></a>00425
+<a name="l00426"></a>00426 <span class="keywordflow">if</span> (lda->insert_genre)
+<a name="l00427"></a>00427 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(lda->insert_genre, <span class="stringliteral">"insert_genre"</span>);
+<a name="l00428"></a>00428
+<a name="l00429"></a>00429 <span class="keywordflow">if</span> (lda->get_artist)
+<a name="l00430"></a>00430 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(lda->get_artist, <span class="stringliteral">"get_artist"</span>);
+<a name="l00431"></a>00431
+<a name="l00432"></a>00432 <span class="keywordflow">if</span> (lda->get_album)
+<a name="l00433"></a>00433 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(lda->get_album, <span class="stringliteral">"get_album"</span>);
+<a name="l00434"></a>00434
+<a name="l00435"></a>00435 <span class="keywordflow">if</span> (lda->get_genre)
+<a name="l00436"></a>00436 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(lda->get_genre, <span class="stringliteral">"get_genre"</span>);
+<a name="l00437"></a>00437
+<a name="l00438"></a>00438 r = <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(&_cache, lda->db, lda);
+<a name="l00439"></a>00439 free(lda);
+<a name="l00440"></a>00440
+<a name="l00441"></a>00441 <span class="keywordflow">return</span> r;
+<a name="l00442"></a>00442 }
+<a name="l00443"></a>00443
+<a name="l00444"></a>00444 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00445"></a>00445 _db_get_id_by_name(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__string__size.html">lms_string_size</a> *name, int64_t *<span class="keywordtype">id</span>)
+<a name="l00446"></a>00446 {
+<a name="l00447"></a>00447 <span class="keywordtype">int</span> r, ret;
+<a name="l00448"></a>00448
+<a name="l00449"></a>00449 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 1, name-><a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, name-><a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00450"></a>00450 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00451"></a>00451 <span class="keywordflow">goto</span> done;
+<a name="l00452"></a>00452
+<a name="l00453"></a>00453 r = sqlite3_step(stmt);
+<a name="l00454"></a>00454 <span class="keywordflow">if</span> (r == SQLITE_DONE) {
+<a name="l00455"></a>00455 ret = 1;
+<a name="l00456"></a>00456 <span class="keywordflow">goto</span> done;
+<a name="l00457"></a>00457 }
+<a name="l00458"></a>00458
+<a name="l00459"></a>00459 <span class="keywordflow">if</span> (r != SQLITE_ROW) {
+<a name="l00460"></a>00460 fprintf(stderr, <span class="stringliteral">"ERROR: could not get id by name: %s\n"</span>,
+<a name="l00461"></a>00461 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00462"></a>00462 ret = -2;
+<a name="l00463"></a>00463 <span class="keywordflow">goto</span> done;
+<a name="l00464"></a>00464 }
+<a name="l00465"></a>00465
+<a name="l00466"></a>00466 *<span class="keywordtype">id</span> = sqlite3_column_int64(stmt, 0);
+<a name="l00467"></a>00467 ret = 0;
+<a name="l00468"></a>00468
+<a name="l00469"></a>00469 done:
+<a name="l00470"></a>00470 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00471"></a>00471
+<a name="l00472"></a>00472 <span class="keywordflow">return</span> ret;
+<a name="l00473"></a>00473
+<a name="l00474"></a>00474 }
+<a name="l00475"></a>00475 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00476"></a>00476 _db_insert_name(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__string__size.html">lms_string_size</a> *name, int64_t *<span class="keywordtype">id</span>)
+<a name="l00477"></a>00477 {
+<a name="l00478"></a>00478 <span class="keywordtype">int</span> r, ret;
+<a name="l00479"></a>00479
+<a name="l00480"></a>00480 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 1, name-><a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, name-><a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00481"></a>00481 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00482"></a>00482 <span class="keywordflow">goto</span> done;
+<a name="l00483"></a>00483
+<a name="l00484"></a>00484 r = sqlite3_step(stmt);
+<a name="l00485"></a>00485 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00486"></a>00486 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert name: %s\n"</span>,
+<a name="l00487"></a>00487 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00488"></a>00488 ret = -2;
+<a name="l00489"></a>00489 <span class="keywordflow">goto</span> done;
+<a name="l00490"></a>00490 }
+<a name="l00491"></a>00491
+<a name="l00492"></a>00492 *<span class="keywordtype">id</span> = sqlite3_last_insert_rowid(sqlite3_db_handle(stmt));
+<a name="l00493"></a>00493 ret = 0;
+<a name="l00494"></a>00494
+<a name="l00495"></a>00495 done:
+<a name="l00496"></a>00496 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00497"></a>00497
+<a name="l00498"></a>00498 <span class="keywordflow">return</span> ret;
+<a name="l00499"></a>00499 }
+<a name="l00500"></a>00500
+<a name="l00501"></a>00501 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00502"></a>00502 _db_get_artist(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info, int64_t *artist_id)
+<a name="l00503"></a>00503 {
+<a name="l00504"></a>00504 <span class="keywordflow">return</span> _db_get_id_by_name(lda->get_artist, &info-><a class="code" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">artist</a>, artist_id);
+<a name="l00505"></a>00505 }
+<a name="l00506"></a>00506
+<a name="l00507"></a>00507 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00508"></a>00508 _db_insert_artist(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info, int64_t *artist_id)
+<a name="l00509"></a>00509 {
+<a name="l00510"></a>00510 <span class="keywordtype">int</span> r;
+<a name="l00511"></a>00511
+<a name="l00512"></a>00512 <span class="keywordflow">if</span> (!info-><a class="code" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">artist</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>) <span class="comment">/* fast path for unknown artist */</span>
+<a name="l00513"></a>00513 <span class="keywordflow">return</span> 1;
+<a name="l00514"></a>00514
+<a name="l00515"></a>00515 r =_db_get_artist(lda, info, artist_id);
+<a name="l00516"></a>00516 <span class="keywordflow">if</span> (r == 0)
+<a name="l00517"></a>00517 <span class="keywordflow">return</span> 0;
+<a name="l00518"></a>00518 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r < 0)
+<a name="l00519"></a>00519 <span class="keywordflow">return</span> -1;
+<a name="l00520"></a>00520
+<a name="l00521"></a>00521 <span class="keywordflow">return</span> _db_insert_name(lda->insert_artist, &info-><a class="code" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">artist</a>, artist_id);
+<a name="l00522"></a>00522 }
+<a name="l00523"></a>00523
+<a name="l00524"></a>00524 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00525"></a>00525 _db_get_album(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info, int64_t *artist_id, int64_t *album_id)
+<a name="l00526"></a>00526 {
+<a name="l00527"></a>00527 sqlite3_stmt *stmt;
+<a name="l00528"></a>00528 <span class="keywordtype">int</span> r, ret;
+<a name="l00529"></a>00529
+<a name="l00530"></a>00530 stmt = lda->get_album;
+<a name="l00531"></a>00531
+<a name="l00532"></a>00532 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 1, info-><a class="code" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">album</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, info-><a class="code" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">album</a>.<a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00533"></a>00533 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00534"></a>00534 <span class="keywordflow">goto</span> done;
+<a name="l00535"></a>00535
+<a name="l00536"></a>00536 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 2, artist_id);
+<a name="l00537"></a>00537 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00538"></a>00538 <span class="keywordflow">goto</span> done;
+<a name="l00539"></a>00539
+<a name="l00540"></a>00540 r = sqlite3_step(stmt);
+<a name="l00541"></a>00541 <span class="keywordflow">if</span> (r == SQLITE_DONE) {
+<a name="l00542"></a>00542 ret = 1;
+<a name="l00543"></a>00543 <span class="keywordflow">goto</span> done;
+<a name="l00544"></a>00544 }
+<a name="l00545"></a>00545
+<a name="l00546"></a>00546 <span class="keywordflow">if</span> (r != SQLITE_ROW) {
+<a name="l00547"></a>00547 fprintf(stderr, <span class="stringliteral">"ERROR: could not get album from table: %s\n"</span>,
+<a name="l00548"></a>00548 sqlite3_errmsg(lda->db));
+<a name="l00549"></a>00549 ret = -2;
+<a name="l00550"></a>00550 <span class="keywordflow">goto</span> done;
+<a name="l00551"></a>00551 }
+<a name="l00552"></a>00552
+<a name="l00553"></a>00553 *album_id = sqlite3_column_int64(stmt, 0);
+<a name="l00554"></a>00554 ret = 0;
+<a name="l00555"></a>00555
+<a name="l00556"></a>00556 done:
+<a name="l00557"></a>00557 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00558"></a>00558
+<a name="l00559"></a>00559 <span class="keywordflow">return</span> ret;
+<a name="l00560"></a>00560
+<a name="l00561"></a>00561 }
+<a name="l00562"></a>00562
+<a name="l00563"></a>00563 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00564"></a>00564 _db_insert_album(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info, int64_t *album_id, int64_t *artist_id)
+<a name="l00565"></a>00565 {
+<a name="l00566"></a>00566 <span class="keywordtype">int</span> r, ret;
+<a name="l00567"></a>00567 sqlite3_stmt *stmt;
+<a name="l00568"></a>00568
+<a name="l00569"></a>00569 <span class="keywordflow">if</span> (!info-><a class="code" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">album</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>) <span class="comment">/* fast path for unknown album */</span>
+<a name="l00570"></a>00570 <span class="keywordflow">return</span> 1;
+<a name="l00571"></a>00571
+<a name="l00572"></a>00572 r =_db_get_album(lda, info, artist_id, album_id);
+<a name="l00573"></a>00573 <span class="keywordflow">if</span> (r == 0)
+<a name="l00574"></a>00574 <span class="keywordflow">return</span> 0;
+<a name="l00575"></a>00575 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r < 0)
+<a name="l00576"></a>00576 <span class="keywordflow">return</span> -1;
+<a name="l00577"></a>00577
+<a name="l00578"></a>00578 stmt = lda->insert_album;
+<a name="l00579"></a>00579 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 1, artist_id);
+<a name="l00580"></a>00580 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00581"></a>00581 <span class="keywordflow">goto</span> done;
+<a name="l00582"></a>00582
+<a name="l00583"></a>00583 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 2, info-><a class="code" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">album</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, info-><a class="code" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">album</a>.<a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00584"></a>00584 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00585"></a>00585 <span class="keywordflow">goto</span> done;
+<a name="l00586"></a>00586
+<a name="l00587"></a>00587 r = sqlite3_step(stmt);
+<a name="l00588"></a>00588 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00589"></a>00589 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert audio album: %s\n"</span>,
+<a name="l00590"></a>00590 sqlite3_errmsg(lda->db));
+<a name="l00591"></a>00591 ret = -3;
+<a name="l00592"></a>00592 <span class="keywordflow">goto</span> done;
+<a name="l00593"></a>00593 }
+<a name="l00594"></a>00594
+<a name="l00595"></a>00595 *album_id = sqlite3_last_insert_rowid(lda->db);
+<a name="l00596"></a>00596 ret = 0;
+<a name="l00597"></a>00597
+<a name="l00598"></a>00598 done:
+<a name="l00599"></a>00599 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00600"></a>00600
+<a name="l00601"></a>00601 <span class="keywordflow">return</span> ret;
+<a name="l00602"></a>00602 }
+<a name="l00603"></a>00603
+<a name="l00604"></a>00604 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00605"></a>00605 _db_get_genre(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info, int64_t *genre_id)
+<a name="l00606"></a>00606 {
+<a name="l00607"></a>00607 <span class="keywordflow">return</span> _db_get_id_by_name(lda->get_genre, &info-><a class="code" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">genre</a>, genre_id);
+<a name="l00608"></a>00608 }
+<a name="l00609"></a>00609
+<a name="l00610"></a>00610 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00611"></a>00611 _db_insert_genre(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info, int64_t *genre_id)
+<a name="l00612"></a>00612 {
+<a name="l00613"></a>00613 <span class="keywordtype">int</span> r;
+<a name="l00614"></a>00614
+<a name="l00615"></a>00615 <span class="keywordflow">if</span> (!info-><a class="code" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">genre</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>) <span class="comment">/* fast path for unknown genre */</span>
+<a name="l00616"></a>00616 <span class="keywordflow">return</span> 1;
+<a name="l00617"></a>00617
+<a name="l00618"></a>00618 r =_db_get_genre(lda, info, genre_id);
+<a name="l00619"></a>00619 <span class="keywordflow">if</span> (r == 0)
+<a name="l00620"></a>00620 <span class="keywordflow">return</span> 0;
+<a name="l00621"></a>00621 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r < 0)
+<a name="l00622"></a>00622 <span class="keywordflow">return</span> -1;
+<a name="l00623"></a>00623
+<a name="l00624"></a>00624 <span class="keywordflow">return</span> _db_insert_name(lda->insert_genre, &info-><a class="code" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">genre</a>, genre_id);
+<a name="l00625"></a>00625 }
+<a name="l00626"></a>00626
+<a name="l00627"></a>00627 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00628"></a>00628 _db_insert_audio(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info, int64_t *album_id, int64_t *artist_id, int64_t *genre_id)
+<a name="l00629"></a>00629 {
+<a name="l00630"></a>00630 sqlite3_stmt *stmt;
+<a name="l00631"></a>00631 <span class="keywordtype">int</span> r, ret;
+<a name="l00632"></a>00632
+<a name="l00633"></a>00633 stmt = lda->insert_audio;
+<a name="l00634"></a>00634 ret = <a class="code" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a>(stmt, 1, info-><a class="code" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">id</a>);
+<a name="l00635"></a>00635 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00636"></a>00636 <span class="keywordflow">goto</span> done;
+<a name="l00637"></a>00637
+<a name="l00638"></a>00638 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 2, info-><a class="code" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">title</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, info-><a class="code" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">title</a>.<a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00639"></a>00639 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00640"></a>00640 <span class="keywordflow">goto</span> done;
+<a name="l00641"></a>00641
+<a name="l00642"></a>00642 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 3, album_id);
+<a name="l00643"></a>00643 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00644"></a>00644 <span class="keywordflow">goto</span> done;
+<a name="l00645"></a>00645
+<a name="l00646"></a>00646 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 4, artist_id);
+<a name="l00647"></a>00647 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00648"></a>00648 <span class="keywordflow">goto</span> done;
+<a name="l00649"></a>00649
+<a name="l00650"></a>00650 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 5, genre_id);
+<a name="l00651"></a>00651 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00652"></a>00652 <span class="keywordflow">goto</span> done;
+<a name="l00653"></a>00653
+<a name="l00654"></a>00654 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 6, info-><a class="code" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">trackno</a>);
+<a name="l00655"></a>00655 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00656"></a>00656 <span class="keywordflow">goto</span> done;
+<a name="l00657"></a>00657
+<a name="l00658"></a>00658 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 7, info-><a class="code" href="structlms__audio__info.html#932e73ccd8ff946831930be65d1ba2d2">rating</a>);
+<a name="l00659"></a>00659 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00660"></a>00660 <span class="keywordflow">goto</span> done;
+<a name="l00661"></a>00661
+<a name="l00662"></a>00662 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 8, info-><a class="code" href="structlms__audio__info.html#7197e471d313274c4e361b2ff9e60e8a">playcnt</a>);
+<a name="l00663"></a>00663 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00664"></a>00664 <span class="keywordflow">goto</span> done;
+<a name="l00665"></a>00665
+<a name="l00666"></a>00666 r = sqlite3_step(stmt);
+<a name="l00667"></a>00667 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00668"></a>00668 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert audio info: %s\n"</span>,
+<a name="l00669"></a>00669 sqlite3_errmsg(lda->db));
+<a name="l00670"></a>00670 ret = -9;
+<a name="l00671"></a>00671 <span class="keywordflow">goto</span> done;
+<a name="l00672"></a>00672 }
+<a name="l00673"></a>00673
+<a name="l00674"></a>00674 ret = 0;
+<a name="l00675"></a>00675
+<a name="l00676"></a>00676 done:
+<a name="l00677"></a>00677 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00678"></a>00678
+<a name="l00679"></a>00679 <span class="keywordflow">return</span> ret;
+<a name="l00680"></a>00680 }
+<a name="l00681"></a>00681
+<a name="l00693"></a>00693 <span class="keywordtype">int</span>
+<a name="l00694"></a><a class="code" href="lightmediascanner__db__audio_8c.html#334b8c49f8dbf76024ee6b1d69f56c8c">00694</a> <a class="code" href="group__LMS__DB.html#g9b83f734ec4905778dec5494f39b7397">lms_db_audio_add</a>(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, <span class="keyword">struct</span> <a class="code" href="structlms__audio__info.html">lms_audio_info</a> *info)
+<a name="l00695"></a>00695 {
+<a name="l00696"></a>00696 int64_t album_id, genre_id, artist_id;
+<a name="l00697"></a>00697 <span class="keywordtype">int</span> ret_album, ret_genre, ret_artist;
+<a name="l00698"></a>00698
+<a name="l00699"></a>00699 <span class="keywordflow">if</span> (!lda)
+<a name="l00700"></a>00700 <span class="keywordflow">return</span> -1;
+<a name="l00701"></a>00701 <span class="keywordflow">if</span> (!info)
+<a name="l00702"></a>00702 <span class="keywordflow">return</span> -2;
+<a name="l00703"></a>00703 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">id</a> < 1)
+<a name="l00704"></a>00704 <span class="keywordflow">return</span> -3;
+<a name="l00705"></a>00705
+<a name="l00706"></a>00706 ret_artist = _db_insert_artist(lda, info, &artist_id);
+<a name="l00707"></a>00707 <span class="keywordflow">if</span> (ret_artist < 0)
+<a name="l00708"></a>00708 <span class="keywordflow">return</span> -4;
+<a name="l00709"></a>00709
+<a name="l00710"></a>00710 ret_album = _db_insert_album(lda, info, &album_id,
+<a name="l00711"></a>00711 (ret_artist == 0) ? &artist_id : NULL);
+<a name="l00712"></a>00712 <span class="keywordflow">if</span> (ret_album < 0)
+<a name="l00713"></a>00713 <span class="keywordflow">return</span> -5;
+<a name="l00714"></a>00714
+<a name="l00715"></a>00715 ret_genre = _db_insert_genre(lda, info, &genre_id);
+<a name="l00716"></a>00716 <span class="keywordflow">if</span> (ret_genre < 0)
+<a name="l00717"></a>00717 <span class="keywordflow">return</span> -6;
+<a name="l00718"></a>00718
+<a name="l00719"></a>00719 <span class="keywordflow">return</span> _db_insert_audio(lda, info,
+<a name="l00720"></a>00720 (ret_album == 0) ? &album_id : NULL,
+<a name="l00721"></a>00721 (ret_artist == 0) ? &artist_id : NULL,
+<a name="l00722"></a>00722 (ret_genre == 0) ? &genre_id : NULL);
+<a name="l00723"></a>00723 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_audio.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_db_audio.c File Reference</h1><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code><br>
+<code>#include "<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>"</code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <stdio.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_db_audio.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__db__audio_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">_DB_T_UPDATE</a>(db, name, array) lms_db_table_update_if_required(db, name, LMS_ARRAY_SIZE(array), array)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lms_db_audio_start</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lms_db_audio_free</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__audio_8c.html#334b8c49f8dbf76024ee6b1d69f56c8c">lms_db_audio_add</a> (<a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda, struct <a class="el" href="structlms__audio__info.html">lms_audio_info</a> *info)</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="d2a4e90aa49af7291552e6ac172aaa51"></a><!-- doxytag: member="lightmediascanner_db_audio.c::_DB_T_UPDATE" ref="d2a4e90aa49af7291552e6ac172aaa51" args="(db, name, array)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _DB_T_UPDATE </td>
+ <td>(</td>
+ <td class="paramtype">db, <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">name, <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">array </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td> lms_db_table_update_if_required(db, name, LMS_ARRAY_SIZE(array), array)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00254">254</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="334b8c49f8dbf76024ee6b1d69f56c8c"></a><!-- doxytag: member="lightmediascanner_db_audio.c::lms_db_audio_add" ref="334b8c49f8dbf76024ee6b1d69f56c8c" args="(lms_db_audio_t *lda, struct lms_audio_info *info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_audio_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> * </td>
+ <td class="paramname"> <em>lda</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__audio__info.html">lms_audio_info</a> * </td>
+ <td class="paramname"> <em>info</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add audio file to DB.<p>
+This is usually called from plugin's <b>parse()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>lda</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new()</a>. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>info</em> </td><td>audio information to store.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00694">694</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db_8h-source.html#l00087">lms_audio_info::id</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db_audio.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner_db.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db_8h.html"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node3 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="lightmediascanner_utils.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8h.html"];
+ Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node9 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+99726fe86b247bafa6516dcbb4cfbf1f
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_common.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_db_common.c</h1><a href="lightmediascanner__db__common_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include <string.h></span>
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <span class="preprocessor">#if SQLITE_VERSION_NUMBER < 3003009</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="keywordtype">int</span>
+<a name="l00028"></a><a class="code" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405">00028</a> <a class="code" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405">sqlite3_prepare_v2</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *sql, <span class="keywordtype">int</span> len, sqlite3_stmt **stmt, <span class="keyword">const</span> <span class="keywordtype">char</span> **tail)
+<a name="l00029"></a>00029 {
+<a name="l00030"></a>00030 <span class="keywordflow">return</span> sqlite3_prepare(db, sql, len, stmt, tail);
+<a name="l00031"></a>00031 }
+<a name="l00032"></a>00032 <span class="preprocessor">#endif </span><span class="comment">/* SQLITE_VERSION_NUMBER < 3003009 */</span>
+<a name="l00033"></a>00033
+<a name="l00034"></a>00034 <span class="preprocessor">#if SQLITE_VERSION_NUMBER < 3003007</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="keywordtype">int</span>
+<a name="l00036"></a><a class="code" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">00036</a> <a class="code" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">sqlite3_clear_bindings</a>(sqlite3_stmt *stmt)
+<a name="l00037"></a>00037 {
+<a name="l00038"></a>00038 <span class="keywordtype">int</span> i, last;
+<a name="l00039"></a>00039 <span class="keywordtype">int</span> rc;
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041 rc = SQLITE_OK;
+<a name="l00042"></a>00042 last = sqlite3_bind_parameter_count(stmt);
+<a name="l00043"></a>00043 <span class="keywordflow">for</span>(i = 1; rc == SQLITE_OK && i <= last; i++) {
+<a name="l00044"></a>00044 rc = sqlite3_bind_null(stmt, i);
+<a name="l00045"></a>00045 }
+<a name="l00046"></a>00046 <span class="keywordflow">return</span> rc;
+<a name="l00047"></a>00047 }
+<a name="l00048"></a>00048 <span class="preprocessor">#endif </span><span class="comment">/* SQLITE_VERSION_NUMBER < 3003007 */</span>
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#if SQLITE_VERSION_NUMBER < 3003008</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="comment">/* Until 3.3.8 it doesn't support CREATE TRIGGER IF NOT EXISTS, so</span>
+<a name="l00052"></a>00052 <span class="comment"> * just ignore errors :-(</span>
+<a name="l00053"></a>00053 <span class="comment"> */</span>
+<a name="l00054"></a>00054 <span class="keywordtype">int</span>
+<a name="l00055"></a><a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">00055</a> <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *sql)
+<a name="l00056"></a>00056 {
+<a name="l00057"></a>00057 <span class="keywordtype">char</span> *errmsg, *query;
+<a name="l00058"></a>00058 <span class="keywordtype">int</span> r, sql_len, prefix_len;
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 prefix_len = <span class="keyword">sizeof</span>(<span class="stringliteral">"CREATE TRIGGER "</span>) - 1;
+<a name="l00061"></a>00061 sql_len = strlen(sql);
+<a name="l00062"></a>00062 query = malloc((prefix_len + sql_len + 1) * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
+<a name="l00063"></a>00063 <span class="keywordflow">if</span> (!query)
+<a name="l00064"></a>00064 <span class="keywordflow">return</span> -1;
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 memcpy(query, <span class="stringliteral">"CREATE TRIGGER "</span>, prefix_len);
+<a name="l00067"></a>00067 memcpy(query + prefix_len, sql, sql_len + 1);
+<a name="l00068"></a>00068 r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
+<a name="l00069"></a>00069 free(query);
+<a name="l00070"></a>00070 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00071"></a>00071 sqlite3_free(errmsg);
+<a name="l00072"></a>00072 <span class="keywordflow">return</span> 0;
+<a name="l00073"></a>00073 }
+<a name="l00074"></a>00074 <span class="preprocessor">#else </span><span class="comment">/* SQLITE_VERSION_NUMBER < 3003008 */</span>
+<a name="l00075"></a>00075 <span class="keywordtype">int</span>
+<a name="l00076"></a>00076 <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *sql)
+<a name="l00077"></a>00077 {
+<a name="l00078"></a>00078 <span class="keywordtype">char</span> *errmsg, *query;
+<a name="l00079"></a>00079 <span class="keywordtype">int</span> r, sql_len, prefix_len;
+<a name="l00080"></a>00080
+<a name="l00081"></a>00081 prefix_len = <span class="keyword">sizeof</span>(<span class="stringliteral">"CREATE TRIGGER IF NOT EXISTS "</span>) - 1;
+<a name="l00082"></a>00082 sql_len = strlen(sql);
+<a name="l00083"></a>00083 query = malloc((prefix_len + sql_len + 1) * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
+<a name="l00084"></a>00084 <span class="keywordflow">if</span> (!query)
+<a name="l00085"></a>00085 <span class="keywordflow">return</span> -1;
+<a name="l00086"></a>00086
+<a name="l00087"></a>00087 memcpy(query, <span class="stringliteral">"CREATE TRIGGER IF NOT EXISTS "</span>, prefix_len);
+<a name="l00088"></a>00088 memcpy(query + prefix_len, sql, sql_len + 1);
+<a name="l00089"></a>00089 r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
+<a name="l00090"></a>00090 free(query);
+<a name="l00091"></a>00091 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00092"></a>00092 fprintf(stderr, <span class="stringliteral">"ERROR: could not create trigger: %s\n"</span>, errmsg);
+<a name="l00093"></a>00093 sqlite3_free(errmsg);
+<a name="l00094"></a>00094 <span class="keywordflow">return</span> -2;
+<a name="l00095"></a>00095 }
+<a name="l00096"></a>00096 <span class="keywordflow">return</span> 0;
+<a name="l00097"></a>00097 }
+<a name="l00098"></a>00098 <span class="preprocessor">#endif </span><span class="comment">/* SQLITE_VERSION_NUMBER < 3003008 */</span>
+<a name="l00099"></a>00099
+<a name="l00100"></a>00100 sqlite3_stmt *
+<a name="l00101"></a><a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">00101</a> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *sql)
+<a name="l00102"></a>00102 {
+<a name="l00103"></a>00103 sqlite3_stmt *stmt;
+<a name="l00104"></a>00104
+<a name="l00105"></a>00105 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405">sqlite3_prepare_v2</a>(db, sql, -1, &stmt, NULL) != SQLITE_OK)
+<a name="l00106"></a>00106 fprintf(stderr, <span class="stringliteral">"ERROR: could not prepare \"%s\": %s\n"</span>, sql,
+<a name="l00107"></a>00107 sqlite3_errmsg(db));
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109 <span class="keywordflow">return</span> stmt;
+<a name="l00110"></a>00110 }
+<a name="l00111"></a>00111
+<a name="l00112"></a>00112 <span class="keywordtype">int</span>
+<a name="l00113"></a><a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">00113</a> <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
+<a name="l00114"></a>00114 {
+<a name="l00115"></a>00115 <span class="keywordtype">int</span> r;
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 r = sqlite3_finalize(stmt);
+<a name="l00118"></a>00118 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00119"></a>00119 fprintf(stderr, <span class="stringliteral">"ERROR: could not finalize %s statement: #%d\n"</span>,
+<a name="l00120"></a>00120 name, r);
+<a name="l00121"></a>00121 <span class="keywordflow">return</span> -1;
+<a name="l00122"></a>00122 }
+<a name="l00123"></a>00123
+<a name="l00124"></a>00124 <span class="keywordflow">return</span> 0;
+<a name="l00125"></a>00125 }
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 <span class="keywordtype">int</span>
+<a name="l00128"></a><a class="code" href="lightmediascanner__db__private_8h.html#ee78f418f0f3c9ead3023b1453c63556">00128</a> <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(sqlite3_stmt *stmt)
+<a name="l00129"></a>00129 {
+<a name="l00130"></a>00130 <span class="keywordtype">int</span> r, ret;
+<a name="l00131"></a>00131
+<a name="l00132"></a>00132 ret = r = sqlite3_reset(stmt);
+<a name="l00133"></a>00133 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00134"></a>00134 fprintf(stderr, <span class="stringliteral">"ERROR: could not reset SQL statement: #%d\n"</span>, r);
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 r = <a class="code" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">sqlite3_clear_bindings</a>(stmt);
+<a name="l00137"></a>00137 ret += r;
+<a name="l00138"></a>00138 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00139"></a>00139 fprintf(stderr, <span class="stringliteral">"ERROR: could not clear SQL: #%d\n"</span>, r);
+<a name="l00140"></a>00140
+<a name="l00141"></a>00141 <span class="keywordflow">return</span> ret;
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143
+<a name="l00144"></a>00144 <span class="keywordtype">int</span>
+<a name="l00145"></a><a class="code" href="lightmediascanner__db__private_8h.html#14d56e02624ad6130bc59ae9bb950ac3">00145</a> <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, <span class="keyword">const</span> <span class="keywordtype">char</span> *text, <span class="keywordtype">int</span> len)
+<a name="l00146"></a>00146 {
+<a name="l00147"></a>00147 <span class="keywordtype">int</span> r;
+<a name="l00148"></a>00148
+<a name="l00149"></a>00149 <span class="keywordflow">if</span> (text)
+<a name="l00150"></a>00150 r = sqlite3_bind_text(stmt, col, text, len, SQLITE_STATIC);
+<a name="l00151"></a>00151 <span class="keywordflow">else</span>
+<a name="l00152"></a>00152 r = sqlite3_bind_null(stmt, col);
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00155"></a>00155 <span class="keywordflow">return</span> 0;
+<a name="l00156"></a>00156 <span class="keywordflow">else</span> {
+<a name="l00157"></a>00157 sqlite3 *db;
+<a name="l00158"></a>00158 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00159"></a>00159
+<a name="l00160"></a>00160 db = sqlite3_db_handle(stmt);
+<a name="l00161"></a>00161 err = sqlite3_errmsg(db);
+<a name="l00162"></a>00162 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00163"></a>00163 <span class="keywordflow">return</span> -col;
+<a name="l00164"></a>00164 }
+<a name="l00165"></a>00165 }
+<a name="l00166"></a>00166
+<a name="l00167"></a>00167 <span class="keywordtype">int</span>
+<a name="l00168"></a><a class="code" href="lightmediascanner__db__private_8h.html#7fd514b582578c18a25cdbf6c561243c">00168</a> <a class="code" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lms_db_bind_blob</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, <span class="keyword">const</span> <span class="keywordtype">void</span> *blob, <span class="keywordtype">int</span> len)
+<a name="l00169"></a>00169 {
+<a name="l00170"></a>00170 <span class="keywordtype">int</span> r;
+<a name="l00171"></a>00171
+<a name="l00172"></a>00172 <span class="keywordflow">if</span> (blob)
+<a name="l00173"></a>00173 r = sqlite3_bind_blob(stmt, col, blob, len, SQLITE_STATIC);
+<a name="l00174"></a>00174 <span class="keywordflow">else</span>
+<a name="l00175"></a>00175 r = sqlite3_bind_null(stmt, col);
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00178"></a>00178 <span class="keywordflow">return</span> 0;
+<a name="l00179"></a>00179 <span class="keywordflow">else</span> {
+<a name="l00180"></a>00180 sqlite3 *db;
+<a name="l00181"></a>00181 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00182"></a>00182
+<a name="l00183"></a>00183 db = sqlite3_db_handle(stmt);
+<a name="l00184"></a>00184 err = sqlite3_errmsg(db);
+<a name="l00185"></a>00185 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00186"></a>00186 <span class="keywordflow">return</span> -col;
+<a name="l00187"></a>00187 }
+<a name="l00188"></a>00188 }
+<a name="l00189"></a>00189
+<a name="l00190"></a>00190 <span class="keywordtype">int</span>
+<a name="l00191"></a><a class="code" href="lightmediascanner__db__private_8h.html#bbb18d7cc44f7e363c0f240849d72c31">00191</a> <a class="code" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, int64_t value)
+<a name="l00192"></a>00192 {
+<a name="l00193"></a>00193 <span class="keywordtype">int</span> r;
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195 r = sqlite3_bind_int64(stmt, col, value);
+<a name="l00196"></a>00196 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00197"></a>00197 <span class="keywordflow">return</span> 0;
+<a name="l00198"></a>00198 <span class="keywordflow">else</span> {
+<a name="l00199"></a>00199 sqlite3 *db;
+<a name="l00200"></a>00200 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00201"></a>00201
+<a name="l00202"></a>00202 db = sqlite3_db_handle(stmt);
+<a name="l00203"></a>00203 err = sqlite3_errmsg(db);
+<a name="l00204"></a>00204 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00205"></a>00205 <span class="keywordflow">return</span> -col;
+<a name="l00206"></a>00206 }
+<a name="l00207"></a>00207 }
+<a name="l00208"></a>00208
+<a name="l00209"></a>00209 <span class="keywordtype">int</span>
+<a name="l00210"></a><a class="code" href="lightmediascanner__db__private_8h.html#cd7006f0271b9a47937dc2d2ae5480fe">00210</a> <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, int64_t *p_value)
+<a name="l00211"></a>00211 {
+<a name="l00212"></a>00212 <span class="keywordtype">int</span> r;
+<a name="l00213"></a>00213
+<a name="l00214"></a>00214 <span class="keywordflow">if</span> (p_value)
+<a name="l00215"></a>00215 r = sqlite3_bind_int64(stmt, col, *p_value);
+<a name="l00216"></a>00216 <span class="keywordflow">else</span>
+<a name="l00217"></a>00217 r = sqlite3_bind_null(stmt, col);
+<a name="l00218"></a>00218 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00219"></a>00219 <span class="keywordflow">return</span> 0;
+<a name="l00220"></a>00220 <span class="keywordflow">else</span> {
+<a name="l00221"></a>00221 sqlite3 *db;
+<a name="l00222"></a>00222 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00223"></a>00223
+<a name="l00224"></a>00224 db = sqlite3_db_handle(stmt);
+<a name="l00225"></a>00225 err = sqlite3_errmsg(db);
+<a name="l00226"></a>00226 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00227"></a>00227 <span class="keywordflow">return</span> -col;
+<a name="l00228"></a>00228 }
+<a name="l00229"></a>00229 }
+<a name="l00230"></a>00230
+<a name="l00231"></a>00231 <span class="keywordtype">int</span>
+<a name="l00232"></a><a class="code" href="lightmediascanner__db__private_8h.html#37815f859116b46089bea4ba84bb23d2">00232</a> <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, <span class="keywordtype">int</span> value)
+<a name="l00233"></a>00233 {
+<a name="l00234"></a>00234 <span class="keywordtype">int</span> r;
+<a name="l00235"></a>00235
+<a name="l00236"></a>00236 r = sqlite3_bind_int(stmt, col, value);
+<a name="l00237"></a>00237 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00238"></a>00238 <span class="keywordflow">return</span> 0;
+<a name="l00239"></a>00239 <span class="keywordflow">else</span> {
+<a name="l00240"></a>00240 sqlite3 *db;
+<a name="l00241"></a>00241 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00242"></a>00242
+<a name="l00243"></a>00243 db = sqlite3_db_handle(stmt);
+<a name="l00244"></a>00244 err = sqlite3_errmsg(db);
+<a name="l00245"></a>00245 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00246"></a>00246 <span class="keywordflow">return</span> -col;
+<a name="l00247"></a>00247 }
+<a name="l00248"></a>00248 }
+<a name="l00249"></a>00249
+<a name="l00250"></a>00250 <span class="keywordtype">int</span>
+<a name="l00251"></a><a class="code" href="lightmediascanner__db__private_8h.html#9e78297037179998924354e73ca69349">00251</a> <a class="code" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lms_db_bind_double</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, <span class="keywordtype">double</span> value)
+<a name="l00252"></a>00252 {
+<a name="l00253"></a>00253 <span class="keywordtype">int</span> r;
+<a name="l00254"></a>00254
+<a name="l00255"></a>00255 r = sqlite3_bind_double(stmt, col, value);
+<a name="l00256"></a>00256 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00257"></a>00257 <span class="keywordflow">return</span> 0;
+<a name="l00258"></a>00258 <span class="keywordflow">else</span> {
+<a name="l00259"></a>00259 sqlite3 *db;
+<a name="l00260"></a>00260 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 db = sqlite3_db_handle(stmt);
+<a name="l00263"></a>00263 err = sqlite3_errmsg(db);
+<a name="l00264"></a>00264 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00265"></a>00265 <span class="keywordflow">return</span> -col;
+<a name="l00266"></a>00266 }
+<a name="l00267"></a>00267 }
+<a name="l00268"></a>00268
+<a name="l00269"></a>00269 <span class="keywordtype">int</span>
+<a name="l00270"></a><a class="code" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">00270</a> <a class="code" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">lms_db_table_version_get</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table)
+<a name="l00271"></a>00271 {
+<a name="l00272"></a>00272 <span class="keywordtype">int</span> r, version;
+<a name="l00273"></a>00273 sqlite3_stmt *stmt;
+<a name="l00274"></a>00274
+<a name="l00275"></a>00275 stmt = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00276"></a>00276 <span class="stringliteral">"SELECT version FROM lms_internal WHERE tab = ?"</span>);
+<a name="l00277"></a>00277 <span class="keywordflow">if</span> (!stmt)
+<a name="l00278"></a>00278 <span class="keywordflow">return</span> -1;
+<a name="l00279"></a>00279
+<a name="l00280"></a>00280 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 1, table, -1) != 0) {
+<a name="l00281"></a>00281 version = -1;
+<a name="l00282"></a>00282 <span class="keywordflow">goto</span> done;
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284
+<a name="l00285"></a>00285 r = sqlite3_step(stmt);
+<a name="l00286"></a>00286 <span class="keywordflow">if</span> (r == SQLITE_DONE)
+<a name="l00287"></a>00287 version = 0;
+<a name="l00288"></a>00288 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == SQLITE_ROW)
+<a name="l00289"></a>00289 version = sqlite3_column_int(stmt, 0);
+<a name="l00290"></a>00290 <span class="keywordflow">else</span> {
+<a name="l00291"></a>00291 version = -1;
+<a name="l00292"></a>00292 fprintf(stderr, <span class="stringliteral">"ERROR: could not get table '%s' version: %s\n"</span>,
+<a name="l00293"></a>00293 table, sqlite3_errmsg(db));
+<a name="l00294"></a>00294 }
+<a name="l00295"></a>00295
+<a name="l00296"></a>00296 done:
+<a name="l00297"></a>00297 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00298"></a>00298 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(stmt, <span class="stringliteral">"table_version_get"</span>);
+<a name="l00299"></a>00299
+<a name="l00300"></a>00300 <span class="keywordflow">return</span> version;
+<a name="l00301"></a>00301 }
+<a name="l00302"></a>00302
+<a name="l00303"></a>00303 <span class="keywordtype">int</span>
+<a name="l00304"></a><a class="code" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">00304</a> <a class="code" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">lms_db_table_version_set</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> version)
+<a name="l00305"></a>00305 {
+<a name="l00306"></a>00306 <span class="keywordtype">int</span> r, ret;
+<a name="l00307"></a>00307 sqlite3_stmt *stmt;
+<a name="l00308"></a>00308
+<a name="l00309"></a>00309 stmt = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00310"></a>00310 <span class="stringliteral">"INSERT OR REPLACE INTO lms_internal (tab, version) VALUES (?, ?)"</span>);
+<a name="l00311"></a>00311 <span class="keywordflow">if</span> (!stmt)
+<a name="l00312"></a>00312 <span class="keywordflow">return</span> -1;
+<a name="l00313"></a>00313
+<a name="l00314"></a>00314 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 1, table, -1);
+<a name="l00315"></a>00315 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00316"></a>00316 <span class="keywordflow">goto</span> done;
+<a name="l00317"></a>00317
+<a name="l00318"></a>00318 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 2, version);
+<a name="l00319"></a>00319 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00320"></a>00320 <span class="keywordflow">goto</span> done;
+<a name="l00321"></a>00321
+<a name="l00322"></a>00322 r = sqlite3_step(stmt);
+<a name="l00323"></a>00323 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00324"></a>00324 ret = -1;
+<a name="l00325"></a>00325 fprintf(stderr, <span class="stringliteral">"ERROR: could not set table '%s' version: %s\n"</span>,
+<a name="l00326"></a>00326 table, sqlite3_errmsg(db));
+<a name="l00327"></a>00327 }
+<a name="l00328"></a>00328
+<a name="l00329"></a>00329 done:
+<a name="l00330"></a>00330 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00331"></a>00331 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(stmt, <span class="stringliteral">"table_version_set"</span>);
+<a name="l00332"></a>00332
+<a name="l00333"></a>00333 <span class="keywordflow">return</span> ret;
+<a name="l00334"></a>00334 }
+<a name="l00335"></a>00335
+<a name="l00336"></a>00336 <span class="keywordtype">int</span>
+<a name="l00337"></a><a class="code" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558">00337</a> <a class="code" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558">lms_db_table_update</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> last_version, <span class="keyword">const</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> *updaters)
+<a name="l00338"></a>00338 {
+<a name="l00339"></a>00339 <span class="keywordflow">if</span> (current_version == last_version)
+<a name="l00340"></a>00340 <span class="keywordflow">return</span> 0;
+<a name="l00341"></a>00341 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (current_version > last_version) {
+<a name="l00342"></a>00342 fprintf(stderr,
+<a name="l00343"></a>00343 <span class="stringliteral">"WARNING: current version (%d) of table '%s' is greater than "</span>
+<a name="l00344"></a>00344 <span class="stringliteral">"last known version (%d), no updates will be made.\n"</span>,
+<a name="l00345"></a>00345 current_version, table, last_version);
+<a name="l00346"></a>00346 <span class="keywordflow">return</span> 0;
+<a name="l00347"></a>00347 }
+<a name="l00348"></a>00348
+<a name="l00349"></a>00349 <span class="keywordflow">for</span> (; current_version < last_version; current_version++) {
+<a name="l00350"></a>00350 <span class="keywordtype">int</span> r, is_last_run;
+<a name="l00351"></a>00351
+<a name="l00352"></a>00352 is_last_run = current_version == (last_version - 1);
+<a name="l00353"></a>00353 r = updaters[current_version](db, table, current_version, is_last_run);
+<a name="l00354"></a>00354 <span class="keywordflow">if</span> (r != 0) {
+<a name="l00355"></a>00355 fprintf(stderr,
+<a name="l00356"></a>00356 <span class="stringliteral">"ERROR: could not update table '%s' from version %d->%d\n"</span>,
+<a name="l00357"></a>00357 table, current_version, current_version + 1);
+<a name="l00358"></a>00358 <span class="keywordflow">return</span> r;
+<a name="l00359"></a>00359 }
+<a name="l00360"></a>00360 <a class="code" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">lms_db_table_version_set</a>(db, table, current_version + 1);
+<a name="l00361"></a>00361 }
+<a name="l00362"></a>00362
+<a name="l00363"></a>00363 <span class="keywordflow">return</span> 0;
+<a name="l00364"></a>00364 }
+<a name="l00365"></a>00365
+<a name="l00366"></a>00366 <span class="keywordtype">int</span>
+<a name="l00367"></a><a class="code" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">00367</a> <a class="code" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lms_db_table_update_if_required</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> last_version, <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> *updaters)
+<a name="l00368"></a>00368 {
+<a name="l00369"></a>00369 <span class="keywordtype">int</span> current_version;
+<a name="l00370"></a>00370
+<a name="l00371"></a>00371 current_version = <a class="code" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">lms_db_table_version_get</a>(db, table);
+<a name="l00372"></a>00372 <span class="keywordflow">if</span> (current_version < 0)
+<a name="l00373"></a>00373 <span class="keywordflow">return</span> -1;
+<a name="l00374"></a>00374 <span class="keywordflow">else</span>
+<a name="l00375"></a>00375 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558">lms_db_table_update</a>(db, table, current_version, last_version,
+<a name="l00376"></a>00376 updaters);
+<a name="l00377"></a>00377 }
+<a name="l00378"></a>00378
+<a name="l00379"></a>00379 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00380"></a>00380 lms_db_cache_find_db(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__db__cache.html">lms_db_cache</a> *cache, <span class="keyword">const</span> sqlite3 *db)
+<a name="l00381"></a>00381 {
+<a name="l00382"></a>00382 <span class="keywordtype">int</span> i;
+<a name="l00383"></a>00383
+<a name="l00384"></a>00384 <span class="keywordflow">for</span> (i = 0; i < cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a>; i++)
+<a name="l00385"></a>00385 <span class="keywordflow">if</span> (cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a>[i].<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a> == db)
+<a name="l00386"></a>00386 <span class="keywordflow">return</span> i;
+<a name="l00387"></a>00387
+<a name="l00388"></a>00388 <span class="keywordflow">return</span> -1;
+<a name="l00389"></a>00389 }
+<a name="l00390"></a>00390
+<a name="l00391"></a>00391 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00392"></a>00392 lms_db_cache_resize(<span class="keyword">struct</span> <a class="code" href="structlms__db__cache.html">lms_db_cache</a> *cache, <span class="keywordtype">int</span> new_size)
+<a name="l00393"></a>00393 {
+<a name="l00394"></a>00394 cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> = new_size;
+<a name="l00395"></a>00395 cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a> = realloc(cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a>,
+<a name="l00396"></a>00396 cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> * <span class="keyword">sizeof</span>(*cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a>));
+<a name="l00397"></a>00397 <span class="keywordflow">if</span> (cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> && !cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a>) {
+<a name="l00398"></a>00398 perror(<span class="stringliteral">"realloc"</span>);
+<a name="l00399"></a>00399 cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> = 0;
+<a name="l00400"></a>00400 <span class="keywordflow">return</span> -1;
+<a name="l00401"></a>00401 }
+<a name="l00402"></a>00402
+<a name="l00403"></a>00403 <span class="keywordflow">return</span> 0;
+<a name="l00404"></a>00404 }
+<a name="l00405"></a>00405
+<a name="l00406"></a>00406 <span class="keywordtype">int</span>
+<a name="l00407"></a><a class="code" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">00407</a> <a class="code" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lms_db_cache_add</a>(<span class="keyword">struct</span> <a class="code" href="structlms__db__cache.html">lms_db_cache</a> *cache, <span class="keyword">const</span> sqlite3 *db, <span class="keywordtype">void</span> *data)
+<a name="l00408"></a>00408 {
+<a name="l00409"></a>00409 <span class="keyword">struct </span><a class="code" href="structlms__db__cache__entry.html">lms_db_cache_entry</a> *e;
+<a name="l00410"></a>00410 <span class="keywordtype">int</span> idx;
+<a name="l00411"></a>00411
+<a name="l00412"></a>00412 idx = lms_db_cache_find_db(cache, db);
+<a name="l00413"></a>00413 <span class="keywordflow">if</span> (idx >= 0) {
+<a name="l00414"></a>00414 e = cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a> + idx;
+<a name="l00415"></a>00415 <span class="keywordflow">if</span> (e-><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a> == data)
+<a name="l00416"></a>00416 <span class="keywordflow">return</span> 0;
+<a name="l00417"></a>00417 <span class="keywordflow">else</span> {
+<a name="l00418"></a>00418 fprintf(stderr,
+<a name="l00419"></a>00419 <span class="stringliteral">"ERROR: cache %p for db %p has another data registered"</span>
+<a name="l00420"></a>00420 <span class="stringliteral">": %p (current is %p)\n"</span>, cache, db, e-><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a>, data);
+<a name="l00421"></a>00421 <span class="keywordflow">return</span> -1;
+<a name="l00422"></a>00422 }
+<a name="l00423"></a>00423 }
+<a name="l00424"></a>00424
+<a name="l00425"></a>00425 idx = cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a>;
+<a name="l00426"></a>00426 <span class="keywordflow">if</span> (lms_db_cache_resize(cache, cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> + 1) != 0) {
+<a name="l00427"></a>00427 <span class="keywordflow">return</span> -2;
+<a name="l00428"></a>00428 }
+<a name="l00429"></a>00429
+<a name="l00430"></a>00430 e = cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a> + idx;
+<a name="l00431"></a>00431 e-><a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a> = db;
+<a name="l00432"></a>00432 e-><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a> = data;
+<a name="l00433"></a>00433 <span class="keywordflow">return</span> 0;
+<a name="l00434"></a>00434 }
+<a name="l00435"></a>00435
+<a name="l00436"></a>00436 <span class="keywordtype">int</span>
+<a name="l00437"></a><a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">00437</a> <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(<span class="keyword">struct</span> <a class="code" href="structlms__db__cache.html">lms_db_cache</a> *cache, <span class="keyword">const</span> sqlite3 *db, <span class="keywordtype">void</span> *<a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a>)
+<a name="l00438"></a>00438 {
+<a name="l00439"></a>00439 <span class="keywordtype">int</span> idx;
+<a name="l00440"></a>00440 <span class="keyword">struct </span><a class="code" href="structlms__db__cache__entry.html">lms_db_cache_entry</a> *e;
+<a name="l00441"></a>00441
+<a name="l00442"></a>00442 idx = lms_db_cache_find_db(cache, db);
+<a name="l00443"></a>00443 <span class="keywordflow">if</span> (idx < 0) {
+<a name="l00444"></a>00444 fprintf(stderr, <span class="stringliteral">"ERROR: no db %p found in cache %p\n"</span>, db, cache);
+<a name="l00445"></a>00445 <span class="keywordflow">return</span> -1;
+<a name="l00446"></a>00446 }
+<a name="l00447"></a>00447
+<a name="l00448"></a>00448 e = cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a> + idx;
+<a name="l00449"></a>00449 <span class="keywordflow">if</span> (e-><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a> != data) {
+<a name="l00450"></a>00450 fprintf(stderr, <span class="stringliteral">"ERROR: data mismatch in request to delete from cache: "</span>
+<a name="l00451"></a>00451 <span class="stringliteral">"want %p, has %p, cache %p, db %p\n"</span>, data, e-><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a>, cache, db);
+<a name="l00452"></a>00452 <span class="keywordflow">return</span> -2;
+<a name="l00453"></a>00453 }
+<a name="l00454"></a>00454
+<a name="l00455"></a>00455 <span class="keywordflow">for</span> (; idx < cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> - 1; idx++)
+<a name="l00456"></a>00456 cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a>[idx] = cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a>[idx + 1];
+<a name="l00457"></a>00457
+<a name="l00458"></a>00458 <span class="keywordflow">return</span> lms_db_cache_resize(cache, cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> - 1);
+<a name="l00459"></a>00459 }
+<a name="l00460"></a>00460
+<a name="l00461"></a>00461 <span class="keywordtype">int</span>
+<a name="l00462"></a><a class="code" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">00462</a> <a class="code" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lms_db_cache_get</a>(<span class="keyword">struct</span> <a class="code" href="structlms__db__cache.html">lms_db_cache</a> *cache, <span class="keyword">const</span> sqlite3 *db, <span class="keywordtype">void</span> **pdata)
+<a name="l00463"></a>00463 {
+<a name="l00464"></a>00464 <span class="keywordtype">int</span> idx;
+<a name="l00465"></a>00465
+<a name="l00466"></a>00466 idx = lms_db_cache_find_db(cache, db);
+<a name="l00467"></a>00467 <span class="keywordflow">if</span> (idx < 0)
+<a name="l00468"></a>00468 <span class="keywordflow">return</span> -1;
+<a name="l00469"></a>00469
+<a name="l00470"></a>00470 *pdata = cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a>[idx].<a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a>;
+<a name="l00471"></a>00471 <span class="keywordflow">return</span> 0;
+<a name="l00472"></a>00472 }
+<a name="l00473"></a>00473
+<a name="l00474"></a>00474 <span class="keywordtype">int</span>
+<a name="l00475"></a><a class="code" href="lightmediascanner__db__private_8h.html#13ca09c885535a2968e707120e935268">00475</a> <a class="code" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lms_db_create_core_tables_if_required</a>(sqlite3 *db)
+<a name="l00476"></a>00476 {
+<a name="l00477"></a>00477 <span class="keywordtype">char</span> *errmsg;
+<a name="l00478"></a>00478 <span class="keywordtype">int</span> r;
+<a name="l00479"></a>00479
+<a name="l00480"></a>00480 errmsg = NULL;
+<a name="l00481"></a>00481 r = sqlite3_exec(db,
+<a name="l00482"></a>00482 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS lms_internal ("</span>
+<a name="l00483"></a>00483 <span class="stringliteral">"tab TEXT NOT NULL UNIQUE, "</span>
+<a name="l00484"></a>00484 <span class="stringliteral">"version INTEGER NOT NULL"</span>
+<a name="l00485"></a>00485 <span class="stringliteral">")"</span>,
+<a name="l00486"></a>00486 NULL, NULL, &errmsg);
+<a name="l00487"></a>00487 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00488"></a>00488 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'lms_internal' table: %s\n"</span>,
+<a name="l00489"></a>00489 errmsg);
+<a name="l00490"></a>00490 sqlite3_free(errmsg);
+<a name="l00491"></a>00491 <span class="keywordflow">return</span> -1;
+<a name="l00492"></a>00492 }
+<a name="l00493"></a>00493
+<a name="l00494"></a>00494 r = sqlite3_exec(db,
+<a name="l00495"></a>00495 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS files ("</span>
+<a name="l00496"></a>00496 <span class="stringliteral">"id INTEGER PRIMARY KEY AUTOINCREMENT, "</span>
+<a name="l00497"></a>00497 <span class="stringliteral">"path BLOB NOT NULL UNIQUE, "</span>
+<a name="l00498"></a>00498 <span class="stringliteral">"mtime INTEGER NOT NULL, "</span>
+<a name="l00499"></a>00499 <span class="stringliteral">"dtime INTEGER NOT NULL, "</span>
+<a name="l00500"></a>00500 <span class="stringliteral">"size INTEGER NOT NULL"</span>
+<a name="l00501"></a>00501 <span class="stringliteral">")"</span>,
+<a name="l00502"></a>00502 NULL, NULL, &errmsg);
+<a name="l00503"></a>00503 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00504"></a>00504 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'files' table: %s\n"</span>, errmsg);
+<a name="l00505"></a>00505 sqlite3_free(errmsg);
+<a name="l00506"></a>00506 <span class="keywordflow">return</span> -2;
+<a name="l00507"></a>00507 }
+<a name="l00508"></a>00508
+<a name="l00509"></a>00509 r = sqlite3_exec(db,
+<a name="l00510"></a>00510 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS files_path_idx ON files ("</span>
+<a name="l00511"></a>00511 <span class="stringliteral">"path"</span>
+<a name="l00512"></a>00512 <span class="stringliteral">")"</span>,
+<a name="l00513"></a>00513 NULL, NULL, &errmsg);
+<a name="l00514"></a>00514 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00515"></a>00515 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'files_path_idx' index: %s\n"</span>,
+<a name="l00516"></a>00516 errmsg);
+<a name="l00517"></a>00517 sqlite3_free(errmsg);
+<a name="l00518"></a>00518 <span class="keywordflow">return</span> -3;
+<a name="l00519"></a>00519 }
+<a name="l00520"></a>00520
+<a name="l00521"></a>00521 <span class="keywordflow">return</span> 0;
+<a name="l00522"></a>00522 }
+<a name="l00523"></a>00523
+<a name="l00524"></a>00524
+<a name="l00525"></a>00525 sqlite3_stmt *
+<a name="l00526"></a><a class="code" href="lightmediascanner__db__private_8h.html#073c254ca7b4d3f42e1be1854bcc42a3">00526</a> <a class="code" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lms_db_compile_stmt_begin_transaction</a>(sqlite3 *db)
+<a name="l00527"></a>00527 {
+<a name="l00528"></a>00528 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db, <span class="stringliteral">"BEGIN TRANSACTION"</span>);
+<a name="l00529"></a>00529 }
+<a name="l00530"></a>00530
+<a name="l00531"></a>00531 <span class="keywordtype">int</span>
+<a name="l00532"></a><a class="code" href="lightmediascanner__db__private_8h.html#3a7256cb653542bbf563feeb2aa2d0ea">00532</a> <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(sqlite3_stmt *stmt)
+<a name="l00533"></a>00533 {
+<a name="l00534"></a>00534 <span class="keywordtype">int</span> r, ret;
+<a name="l00535"></a>00535
+<a name="l00536"></a>00536 ret = 0;
+<a name="l00537"></a>00537 r = sqlite3_step(stmt);
+<a name="l00538"></a>00538 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00539"></a>00539 fprintf(stderr, <span class="stringliteral">"ERROR: could not begin transaction: %s\n"</span>,
+<a name="l00540"></a>00540 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00541"></a>00541 ret = -1;
+<a name="l00542"></a>00542 }
+<a name="l00543"></a>00543
+<a name="l00544"></a>00544 r = sqlite3_reset(stmt);
+<a name="l00545"></a>00545 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00546"></a>00546 fprintf(stderr, <span class="stringliteral">"ERROR: could not reset SQL statement: %s\n"</span>,
+<a name="l00547"></a>00547 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00548"></a>00548
+<a name="l00549"></a>00549 <span class="keywordflow">return</span> ret;
+<a name="l00550"></a>00550 }
+<a name="l00551"></a>00551
+<a name="l00552"></a>00552 sqlite3_stmt *
+<a name="l00553"></a><a class="code" href="lightmediascanner__db__private_8h.html#09feca4fbfde33d5647cdd5cc2de6500">00553</a> <a class="code" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lms_db_compile_stmt_end_transaction</a>(sqlite3 *db)
+<a name="l00554"></a>00554 {
+<a name="l00555"></a>00555 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db, <span class="stringliteral">"COMMIT"</span>);
+<a name="l00556"></a>00556 }
+<a name="l00557"></a>00557
+<a name="l00558"></a>00558 <span class="keywordtype">int</span>
+<a name="l00559"></a><a class="code" href="lightmediascanner__db__private_8h.html#8ee7bfba83958b80f717a6ccbad2a84c">00559</a> <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(sqlite3_stmt *stmt)
+<a name="l00560"></a>00560 {
+<a name="l00561"></a>00561 <span class="keywordtype">int</span> r, ret;
+<a name="l00562"></a>00562
+<a name="l00563"></a>00563 ret = 0;
+<a name="l00564"></a>00564 r = sqlite3_step(stmt);
+<a name="l00565"></a>00565 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00566"></a>00566 fprintf(stderr, <span class="stringliteral">"ERROR: could not end transaction: %s\n"</span>,
+<a name="l00567"></a>00567 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00568"></a>00568 ret = -1;
+<a name="l00569"></a>00569 }
+<a name="l00570"></a>00570
+<a name="l00571"></a>00571 r = sqlite3_reset(stmt);
+<a name="l00572"></a>00572 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00573"></a>00573 fprintf(stderr, <span class="stringliteral">"ERROR: could not reset SQL statement: %s\n"</span>,
+<a name="l00574"></a>00574 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00575"></a>00575
+<a name="l00576"></a>00576 <span class="keywordflow">return</span> ret;
+<a name="l00577"></a>00577 }
+<a name="l00578"></a>00578
+<a name="l00579"></a>00579 sqlite3_stmt *
+<a name="l00580"></a><a class="code" href="lightmediascanner__db__private_8h.html#327d54a6dac083e356fd609298a0cbd5">00580</a> <a class="code" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lms_db_compile_stmt_get_file_info</a>(sqlite3 *db)
+<a name="l00581"></a>00581 {
+<a name="l00582"></a>00582 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00583"></a>00583 <span class="stringliteral">"SELECT id, mtime, dtime, size FROM files WHERE path = ?"</span>);
+<a name="l00584"></a>00584 }
+<a name="l00585"></a>00585
+<a name="l00586"></a>00586 <span class="keywordtype">int</span>
+<a name="l00587"></a><a class="code" href="lightmediascanner__db__common_8c.html#c0b7cf0b2eb0f55fbf8a4103bc9569d1">00587</a> <a class="code" href="lightmediascanner__db__common_8c.html#c0b7cf0b2eb0f55fbf8a4103bc9569d1">lms_db_get_file_info</a>(sqlite3_stmt *stmt, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00588"></a>00588 {
+<a name="l00589"></a>00589 <span class="keywordtype">int</span> r, ret;
+<a name="l00590"></a>00590
+<a name="l00591"></a>00591 ret = <a class="code" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lms_db_bind_blob</a>(stmt, 1, finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>, finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>);
+<a name="l00592"></a>00592 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00593"></a>00593 <span class="keywordflow">goto</span> done;
+<a name="l00594"></a>00594
+<a name="l00595"></a>00595 r = sqlite3_step(stmt);
+<a name="l00596"></a>00596 <span class="keywordflow">if</span> (r == SQLITE_DONE) {
+<a name="l00597"></a>00597 ret = 1;
+<a name="l00598"></a>00598 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = -1;
+<a name="l00599"></a>00599 <span class="keywordflow">goto</span> done;
+<a name="l00600"></a>00600 }
+<a name="l00601"></a>00601
+<a name="l00602"></a>00602 <span class="keywordflow">if</span> (r != SQLITE_ROW) {
+<a name="l00603"></a>00603 fprintf(stderr, <span class="stringliteral">"ERROR: could not get file info from table: %s\n"</span>,
+<a name="l00604"></a>00604 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00605"></a>00605 ret = -2;
+<a name="l00606"></a>00606 <span class="keywordflow">goto</span> done;
+<a name="l00607"></a>00607 }
+<a name="l00608"></a>00608
+<a name="l00609"></a>00609 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = sqlite3_column_int64(stmt, 0);
+<a name="l00610"></a>00610 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = sqlite3_column_int(stmt, 1);
+<a name="l00611"></a>00611 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = sqlite3_column_int(stmt, 2);
+<a name="l00612"></a>00612 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = sqlite3_column_int(stmt, 3);
+<a name="l00613"></a>00613 ret = 0;
+<a name="l00614"></a>00614
+<a name="l00615"></a>00615 done:
+<a name="l00616"></a>00616 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00617"></a>00617
+<a name="l00618"></a>00618 <span class="keywordflow">return</span> ret;
+<a name="l00619"></a>00619 }
+<a name="l00620"></a>00620
+<a name="l00621"></a>00621 sqlite3_stmt *
+<a name="l00622"></a><a class="code" href="lightmediascanner__db__private_8h.html#69eb9d9058d9432f7658f9adffb79ed6">00622</a> <a class="code" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lms_db_compile_stmt_update_file_info</a>(sqlite3 *db)
+<a name="l00623"></a>00623 {
+<a name="l00624"></a>00624 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00625"></a>00625 <span class="stringliteral">"UPDATE files SET mtime = ?, dtime = ?, size = ? WHERE id = ?"</span>);
+<a name="l00626"></a>00626 }
+<a name="l00627"></a>00627
+<a name="l00628"></a>00628 <span class="keywordtype">int</span>
+<a name="l00629"></a><a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">00629</a> <a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lms_db_update_file_info</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00630"></a>00630 {
+<a name="l00631"></a>00631 <span class="keywordtype">int</span> r, ret;
+<a name="l00632"></a>00632
+<a name="l00633"></a>00633 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 1, finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a>);
+<a name="l00634"></a>00634 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00635"></a>00635 <span class="keywordflow">goto</span> done;
+<a name="l00636"></a>00636
+<a name="l00637"></a>00637 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 2, finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>);
+<a name="l00638"></a>00638 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00639"></a>00639 <span class="keywordflow">goto</span> done;
+<a name="l00640"></a>00640
+<a name="l00641"></a>00641 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 3, finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a>);
+<a name="l00642"></a>00642 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00643"></a>00643 <span class="keywordflow">goto</span> done;
+<a name="l00644"></a>00644
+<a name="l00645"></a>00645 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 4, finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a>);
+<a name="l00646"></a>00646 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00647"></a>00647 <span class="keywordflow">goto</span> done;
+<a name="l00648"></a>00648
+<a name="l00649"></a>00649 r = sqlite3_step(stmt);
+<a name="l00650"></a>00650 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00651"></a>00651 fprintf(stderr, <span class="stringliteral">"ERROR: could not update file info: %s\n"</span>,
+<a name="l00652"></a>00652 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00653"></a>00653 ret = -5;
+<a name="l00654"></a>00654 <span class="keywordflow">goto</span> done;
+<a name="l00655"></a>00655 }
+<a name="l00656"></a>00656
+<a name="l00657"></a>00657 ret = 0;
+<a name="l00658"></a>00658
+<a name="l00659"></a>00659 done:
+<a name="l00660"></a>00660 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00661"></a>00661
+<a name="l00662"></a>00662 <span class="keywordflow">return</span> ret;
+<a name="l00663"></a>00663 }
+<a name="l00664"></a>00664
+<a name="l00665"></a>00665 sqlite3_stmt *
+<a name="l00666"></a><a class="code" href="lightmediascanner__db__private_8h.html#bf21f88ddbe28a8290d0df32af0f079c">00666</a> <a class="code" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lms_db_compile_stmt_insert_file_info</a>(sqlite3 *db)
+<a name="l00667"></a>00667 {
+<a name="l00668"></a>00668 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00669"></a>00669 <span class="stringliteral">"INSERT INTO files (path, mtime, dtime, size) VALUES(?, ?, ?, ?)"</span>);
+<a name="l00670"></a>00670 }
+<a name="l00671"></a>00671
+<a name="l00672"></a>00672 <span class="keywordtype">int</span>
+<a name="l00673"></a><a class="code" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">00673</a> <a class="code" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">lms_db_insert_file_info</a>(sqlite3_stmt *stmt, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00674"></a>00674 {
+<a name="l00675"></a>00675 <span class="keywordtype">int</span> r, ret;
+<a name="l00676"></a>00676
+<a name="l00677"></a>00677 ret = <a class="code" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lms_db_bind_blob</a>(stmt, 1, finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>, finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>);
+<a name="l00678"></a>00678 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00679"></a>00679 <span class="keywordflow">goto</span> done;
+<a name="l00680"></a>00680
+<a name="l00681"></a>00681 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 2, finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a>);
+<a name="l00682"></a>00682 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00683"></a>00683 <span class="keywordflow">goto</span> done;
+<a name="l00684"></a>00684
+<a name="l00685"></a>00685 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 3, finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>);
+<a name="l00686"></a>00686 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00687"></a>00687 <span class="keywordflow">goto</span> done;
+<a name="l00688"></a>00688
+<a name="l00689"></a>00689 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 4, finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a>);
+<a name="l00690"></a>00690 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00691"></a>00691 <span class="keywordflow">goto</span> done;
+<a name="l00692"></a>00692
+<a name="l00693"></a>00693 r = sqlite3_step(stmt);
+<a name="l00694"></a>00694 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00695"></a>00695 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert file info: %s\n"</span>,
+<a name="l00696"></a>00696 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00697"></a>00697 ret = -5;
+<a name="l00698"></a>00698 <span class="keywordflow">goto</span> done;
+<a name="l00699"></a>00699 }
+<a name="l00700"></a>00700
+<a name="l00701"></a>00701 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = sqlite3_last_insert_rowid(sqlite3_db_handle(stmt));
+<a name="l00702"></a>00702 ret = 0;
+<a name="l00703"></a>00703
+<a name="l00704"></a>00704 done:
+<a name="l00705"></a>00705 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00706"></a>00706
+<a name="l00707"></a>00707 <span class="keywordflow">return</span> ret;
+<a name="l00708"></a>00708 }
+<a name="l00709"></a>00709
+<a name="l00710"></a>00710 sqlite3_stmt *
+<a name="l00711"></a><a class="code" href="lightmediascanner__db__private_8h.html#76941bdbbdb711fff821343e91c2cd97">00711</a> <a class="code" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lms_db_compile_stmt_delete_file_info</a>(sqlite3 *db)
+<a name="l00712"></a>00712 {
+<a name="l00713"></a>00713 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db, <span class="stringliteral">"DELETE FROM files WHERE id = ?"</span>);
+<a name="l00714"></a>00714 }
+<a name="l00715"></a>00715
+<a name="l00716"></a>00716 <span class="keywordtype">int</span>
+<a name="l00717"></a><a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">00717</a> <a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lms_db_delete_file_info</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00718"></a>00718 {
+<a name="l00719"></a>00719 <span class="keywordtype">int</span> r, ret;
+<a name="l00720"></a>00720
+<a name="l00721"></a>00721 ret = <a class="code" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a>(stmt, 1, finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a>);
+<a name="l00722"></a>00722 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00723"></a>00723 <span class="keywordflow">goto</span> done;
+<a name="l00724"></a>00724
+<a name="l00725"></a>00725 r = sqlite3_step(stmt);
+<a name="l00726"></a>00726 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00727"></a>00727 fprintf(stderr, <span class="stringliteral">"ERROR: could not delete file info: %s\n"</span>,
+<a name="l00728"></a>00728 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00729"></a>00729 ret = -2;
+<a name="l00730"></a>00730 <span class="keywordflow">goto</span> done;
+<a name="l00731"></a>00731 }
+<a name="l00732"></a>00732 ret = 0;
+<a name="l00733"></a>00733
+<a name="l00734"></a>00734 done:
+<a name="l00735"></a>00735 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00736"></a>00736
+<a name="l00737"></a>00737 <span class="keywordflow">return</span> ret;
+<a name="l00738"></a>00738 }
+<a name="l00739"></a>00739
+<a name="l00740"></a>00740 sqlite3_stmt *
+<a name="l00741"></a><a class="code" href="lightmediascanner__db__private_8h.html#08c34b5b1b6e927a696ff0ce66562f54">00741</a> <a class="code" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lms_db_compile_stmt_set_file_dtime</a>(sqlite3 *db)
+<a name="l00742"></a>00742 {
+<a name="l00743"></a>00743 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db, <span class="stringliteral">"UPDATE files SET dtime = ? WHERE id = ?"</span>);
+<a name="l00744"></a>00744 }
+<a name="l00745"></a>00745
+<a name="l00746"></a>00746 <span class="keywordtype">int</span>
+<a name="l00747"></a><a class="code" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">00747</a> <a class="code" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lms_db_set_file_dtime</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00748"></a>00748 {
+<a name="l00749"></a>00749 <span class="keywordtype">int</span> r, ret;
+<a name="l00750"></a>00750
+<a name="l00751"></a>00751 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 1, finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>);
+<a name="l00752"></a>00752 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00753"></a>00753 <span class="keywordflow">goto</span> done;
+<a name="l00754"></a>00754
+<a name="l00755"></a>00755 ret = <a class="code" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a>(stmt, 1, finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a>);
+<a name="l00756"></a>00756 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00757"></a>00757 <span class="keywordflow">goto</span> done;
+<a name="l00758"></a>00758
+<a name="l00759"></a>00759 r = sqlite3_step(stmt);
+<a name="l00760"></a>00760 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00761"></a>00761 fprintf(stderr, <span class="stringliteral">"ERROR: could not set file dtime: %s\n"</span>,
+<a name="l00762"></a>00762 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00763"></a>00763 ret = -3;
+<a name="l00764"></a>00764 <span class="keywordflow">goto</span> done;
+<a name="l00765"></a>00765 }
+<a name="l00766"></a>00766
+<a name="l00767"></a>00767 ret = 0;
+<a name="l00768"></a>00768
+<a name="l00769"></a>00769 done:
+<a name="l00770"></a>00770 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00771"></a>00771
+<a name="l00772"></a>00772 <span class="keywordflow">return</span> ret;
+<a name="l00773"></a>00773 }
+<a name="l00774"></a>00774
+<a name="l00775"></a>00775 sqlite3_stmt *
+<a name="l00776"></a><a class="code" href="lightmediascanner__db__private_8h.html#1cc8a80961a0febdd099a028f3da9c30">00776</a> <a class="code" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lms_db_compile_stmt_get_files</a>(sqlite3 *db)
+<a name="l00777"></a>00777 {
+<a name="l00778"></a>00778 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00779"></a>00779 <span class="stringliteral">"SELECT id, path, mtime, dtime, size FROM files WHERE path LIKE ?"</span>);
+<a name="l00780"></a>00780 }
+<a name="l00781"></a>00781
+<a name="l00782"></a>00782 <span class="keywordtype">int</span>
+<a name="l00783"></a><a class="code" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">00783</a> <a class="code" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lms_db_get_files</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">int</span> len)
+<a name="l00784"></a>00784 {
+<a name="l00785"></a>00785 <span class="keywordtype">int</span> ret;
+<a name="l00786"></a>00786
+<a name="l00787"></a>00787 ret = <a class="code" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lms_db_bind_blob</a>(stmt, 1, path, len);
+<a name="l00788"></a>00788 <span class="keywordflow">return</span> ret;
+<a name="l00789"></a>00789 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_common.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_db_common.c File Reference</h1><code>#include "<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>"</code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <stdio.h></code><br>
+<code>#include <string.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_db_common.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__db__common_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405">sqlite3_prepare_v2</a> (sqlite3 *db, const char *sql, int len, sqlite3_stmt **stmt, const char **tail)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">sqlite3_clear_bindings</a> (sqlite3_stmt *stmt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a> (sqlite3 *db, const char *sql)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a> (sqlite3 *db, const char *sql)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a> (sqlite3_stmt *stmt, const char *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a> (sqlite3_stmt *stmt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a> (sqlite3_stmt *stmt, int col, const char *text, int len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lms_db_bind_blob</a> (sqlite3_stmt *stmt, int col, const void *blob, int len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a> (sqlite3_stmt *stmt, int col, int64_t value)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a> (sqlite3_stmt *stmt, int col, int64_t *p_value)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a> (sqlite3_stmt *stmt, int col, int value)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lms_db_bind_double</a> (sqlite3_stmt *stmt, int col, double value)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">lms_db_table_version_get</a> (sqlite3 *db, const char *table)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">lms_db_table_version_set</a> (sqlite3 *db, const char *table, unsigned int version)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558">lms_db_table_update</a> (sqlite3 *db, const char *table, unsigned int current_version, unsigned int last_version, const <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> *updaters)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lms_db_table_update_if_required</a> (sqlite3 *db, const char *table, unsigned int last_version, <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> *updaters)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lms_db_cache_add</a> (struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> *cache, const sqlite3 *db, void *data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a> (struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> *cache, const sqlite3 *db, void *data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lms_db_cache_get</a> (struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> *cache, const sqlite3 *db, void **pdata)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lms_db_create_core_tables_if_required</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lms_db_compile_stmt_begin_transaction</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a> (sqlite3_stmt *stmt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lms_db_compile_stmt_end_transaction</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a> (sqlite3_stmt *stmt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lms_db_compile_stmt_get_file_info</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#c0b7cf0b2eb0f55fbf8a4103bc9569d1">lms_db_get_file_info</a> (sqlite3_stmt *stmt, struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lms_db_compile_stmt_update_file_info</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lms_db_update_file_info</a> (sqlite3_stmt *stmt, const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lms_db_compile_stmt_insert_file_info</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">lms_db_insert_file_info</a> (sqlite3_stmt *stmt, struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lms_db_compile_stmt_delete_file_info</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lms_db_delete_file_info</a> (sqlite3_stmt *stmt, const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lms_db_compile_stmt_set_file_dtime</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lms_db_set_file_dtime</a> (sqlite3_stmt *stmt, const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lms_db_compile_stmt_get_files</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lms_db_get_files</a> (sqlite3_stmt *stmt, const char *path, int len)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="5ff807216285c93325ffaf33361dd6fc"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_begin_transaction" ref="5ff807216285c93325ffaf33361dd6fc" args="(sqlite3_stmt *stmt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_begin_transaction </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00532">532</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="fee26461dbd6c89c82794c94aaeeaef6"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_bind_blob" ref="fee26461dbd6c89c82794c94aaeeaef6" args="(sqlite3_stmt *stmt, int col, const void *blob, int len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_blob </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> <em>blob</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00168">168</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00783">lms_db_get_files()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ae660a876f1e362d1ab2f8c68bdef3f"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_bind_double" ref="4ae660a876f1e362d1ab2f8c68bdef3f" args="(sqlite3_stmt *stmt, int col, double value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_double </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"> <em>value</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00251">251</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="de261036cf3228f0b6a79a9c68687c4f"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_bind_int" ref="de261036cf3228f0b6a79a9c68687c4f" args="(sqlite3_stmt *stmt, int col, int value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_int </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>value</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00232">232</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">lms_db_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">lms_db_update_file_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f2fe78bc45dc33d843313a846db5ce7c"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_bind_int64" ref="f2fe78bc45dc33d843313a846db5ce7c" args="(sqlite3_stmt *stmt, int col, int64_t value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_int64 </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int64_t </td>
+ <td class="paramname"> <em>value</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00191">191</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00717">lms_db_delete_file_info()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">lms_db_set_file_dtime()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="2a0a5d3a27fdee8508b2b0cc59979417"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_bind_int64_or_null" ref="2a0a5d3a27fdee8508b2b0cc59979417" args="(sqlite3_stmt *stmt, int col, int64_t *p_value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_int64_or_null </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int64_t * </td>
+ <td class="paramname"> <em>p_value</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00210">210</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="88c461ae88da3eb47987c5a0b15c5888"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_bind_text" ref="88c461ae88da3eb47987c5a0b15c5888" args="(sqlite3_stmt *stmt, int col, const char *text, int len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_text </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>text</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00145">145</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00270">lms_db_table_version_get()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="19b0458b9d7b76370588156e931a9c04"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_cache_add" ref="19b0458b9d7b76370588156e931a9c04" args="(struct lms_db_cache *cache, const sqlite3 *db, void *data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_cache_add </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> * </td>
+ <td class="paramname"> <em>cache</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">407</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__private_8h-source.html#l00059">lms_db_cache_entry::data</a>, <a class="el" href="lightmediascanner__db__private_8h-source.html#l00058">lms_db_cache_entry::db</a>, <a class="el" href="lightmediascanner__db__private_8h-source.html#l00064">lms_db_cache::entries</a>, and <a class="el" href="lightmediascanner__db__private_8h-source.html#l00063">lms_db_cache::size</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00297">lms_db_audio_new()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00117">lms_db_image_new()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00111">lms_db_playlist_new()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00124">lms_db_video_new()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="296c81e4c64be1c7935ef31038aeb2c0"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_cache_del" ref="296c81e4c64be1c7935ef31038aeb2c0" args="(struct lms_db_cache *cache, const sqlite3 *db, void *data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_cache_del </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> * </td>
+ <td class="paramname"> <em>cache</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00437">437</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__private_8h-source.html#l00059">lms_db_cache_entry::data</a>, <a class="el" href="lightmediascanner__db__private_8h-source.html#l00064">lms_db_cache::entries</a>, and <a class="el" href="lightmediascanner__db__private_8h-source.html#l00063">lms_db_cache::size</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00402">lms_db_audio_free()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00193">lms_db_image_free()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00185">lms_db_playlist_free()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00197">lms_db_video_free()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="e7a672fa5760bae1a669c737648fe7d3"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_cache_get" ref="e7a672fa5760bae1a669c737648fe7d3" args="(struct lms_db_cache *cache, const sqlite3 *db, void **pdata)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_cache_get </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> * </td>
+ <td class="paramname"> <em>cache</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void ** </td>
+ <td class="paramname"> <em>pdata</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00462">462</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__private_8h-source.html#l00059">lms_db_cache_entry::data</a>, and <a class="el" href="lightmediascanner__db__private_8h-source.html#l00064">lms_db_cache::entries</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00297">lms_db_audio_new()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00117">lms_db_image_new()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00111">lms_db_playlist_new()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00124">lms_db_video_new()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="5fddf47521f83929b0c90a481fa01c5b"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt" ref="5fddf47521f83929b0c90a481fa01c5b" args="(sqlite3 *db, const char *sql)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>sql</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">101</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00028">sqlite3_prepare_v2()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00341">lms_db_audio_start()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00526">lms_db_compile_stmt_begin_transaction()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00711">lms_db_compile_stmt_delete_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00553">lms_db_compile_stmt_end_transaction()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00580">lms_db_compile_stmt_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00776">lms_db_compile_stmt_get_files()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00666">lms_db_compile_stmt_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00741">lms_db_compile_stmt_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00622">lms_db_compile_stmt_update_file_info()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00161">lms_db_image_start()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00155">lms_db_playlist_start()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00270">lms_db_table_version_get()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00168">lms_db_video_start()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="1787fdaf148358c7a518e91dfd871ca1"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt_begin_transaction" ref="1787fdaf148358c7a518e91dfd871ca1" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_begin_transaction </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00526">526</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="559925f8e4d5bf61d1bcf44844a95699"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt_delete_file_info" ref="559925f8e4d5bf61d1bcf44844a95699" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_delete_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00711">711</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="bff1aa6077215f3d70d4d5b1a9b7a498"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt_end_transaction" ref="bff1aa6077215f3d70d4d5b1a9b7a498" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_end_transaction </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00553">553</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="b00a624bc01da9b796f7bc6e1d507cf8"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt_get_file_info" ref="b00a624bc01da9b796f7bc6e1d507cf8" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_get_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00580">580</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="73ae2cfd7babf80294cf31f02906223b"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt_get_files" ref="73ae2cfd7babf80294cf31f02906223b" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_get_files </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00776">776</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="9a5886e755eb428ac811956144eee0dc"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt_insert_file_info" ref="9a5886e755eb428ac811956144eee0dc" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_insert_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00666">666</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="1b6950ca9e548670a4cb7fd0ec5220a8"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt_set_file_dtime" ref="1b6950ca9e548670a4cb7fd0ec5220a8" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_set_file_dtime </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00741">741</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="1e6e76cfa9d6faa3c3b8035004eff1a0"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_compile_stmt_update_file_info" ref="1e6e76cfa9d6faa3c3b8035004eff1a0" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_update_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00622">622</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="3798a46baaedc4d466879865456acc94"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_create_core_tables_if_required" ref="3798a46baaedc4d466879865456acc94" args="(sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_create_core_tables_if_required </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00475">475</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="822cae681398710b63c9af149fdacedb"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_create_trigger_if_not_exists" ref="822cae681398710b63c9af149fdacedb" args="(sqlite3 *db, const char *sql)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_create_trigger_if_not_exists </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>sql</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00055">55</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="bb2a9cdbbc7680d1ec85ef3f086b3f63"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_delete_file_info" ref="bb2a9cdbbc7680d1ec85ef3f086b3f63" args="(sqlite3_stmt *stmt, const struct lms_file_info *finfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_delete_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00717">717</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00149">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00191">lms_db_bind_int64()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">lms_db_reset_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="ffa877e4fa751f090e7af8c2025d245c"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_end_transaction" ref="ffa877e4fa751f090e7af8c2025d245c" args="(sqlite3_stmt *stmt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_end_transaction </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00559">559</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="32110a4825e598ca6df329f55b0b62b5"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_finalize_stmt" ref="32110a4825e598ca6df329f55b0b62b5" args="(sqlite3_stmt *stmt, const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_finalize_stmt </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>name</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00113">113</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00402">lms_db_audio_free()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00193">lms_db_image_free()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00185">lms_db_playlist_free()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00270">lms_db_table_version_get()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00197">lms_db_video_free()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="c0b7cf0b2eb0f55fbf8a4103bc9569d1"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_get_file_info" ref="c0b7cf0b2eb0f55fbf8a4103bc9569d1" args="(sqlite3_stmt *stmt, struct lms_file_info *finfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_get_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">587</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00151">lms_file_info::dtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00149">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00168">lms_db_bind_blob()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">lms_db_reset_stmt()</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00150">lms_file_info::mtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00146">lms_file_info::path</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00147">lms_file_info::path_len</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00152">lms_file_info::size</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="df572e74e0821a66ebd16f575b4fb7c4"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_get_files" ref="df572e74e0821a66ebd16f575b4fb7c4" args="(sqlite3_stmt *stmt, const char *path, int len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_get_files </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>path</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00783">783</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00168">lms_db_bind_blob()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="e529ad5c4478d53685c65ec69dc5b1f4"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_insert_file_info" ref="e529ad5c4478d53685c65ec69dc5b1f4" args="(sqlite3_stmt *stmt, struct lms_file_info *finfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_insert_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">673</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00151">lms_file_info::dtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00149">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00168">lms_db_bind_blob()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00232">lms_db_bind_int()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">lms_db_reset_stmt()</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00150">lms_file_info::mtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00146">lms_file_info::path</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00147">lms_file_info::path_len</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00152">lms_file_info::size</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="226c6f7ab2e7923b747b7090357ea419"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_reset_stmt" ref="226c6f7ab2e7923b747b7090357ea419" args="(sqlite3_stmt *stmt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_reset_stmt </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">128</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00036">sqlite3_clear_bindings()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00717">lms_db_delete_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">lms_db_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00270">lms_db_table_version_get()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">lms_db_update_file_info()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="024e3bd9385fd740f75618716c90b04f"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_set_file_dtime" ref="024e3bd9385fd740f75618716c90b04f" args="(sqlite3_stmt *stmt, const struct lms_file_info *finfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_set_file_dtime </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">747</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00151">lms_file_info::dtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00149">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00232">lms_db_bind_int()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00191">lms_db_bind_int64()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">lms_db_reset_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="9bca88ae79959baff3accee8ce10b558"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_table_update" ref="9bca88ae79959baff3accee8ce10b558" args="(sqlite3 *db, const char *table, unsigned int current_version, unsigned int last_version, const lms_db_table_updater_t *updaters)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_table_update </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>table</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>current_version</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>last_version</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> * </td>
+ <td class="paramname"> <em>updaters</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00337">337</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00367">lms_db_table_update_if_required()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="86b766535f9dc7895da7d0f606201700"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_table_update_if_required" ref="86b766535f9dc7895da7d0f606201700" args="(sqlite3 *db, const char *table, unsigned int last_version, lms_db_table_updater_t *updaters)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_table_update_if_required </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>table</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>last_version</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> * </td>
+ <td class="paramname"> <em>updaters</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00367">367</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00337">lms_db_table_update()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00270">lms_db_table_version_get()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="eba3215ee5981a73e9d0fed0a7e079cd"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_table_version_get" ref="eba3215ee5981a73e9d0fed0a7e079cd" args="(sqlite3 *db, const char *table)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_table_version_get </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>table</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00270">270</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00145">lms_db_bind_text()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00113">lms_db_finalize_stmt()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">lms_db_reset_stmt()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00367">lms_db_table_update_if_required()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="46e6e318ea9bb4a7ffdfe40c842da4e7"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_table_version_set" ref="46e6e318ea9bb4a7ffdfe40c842da4e7" args="(sqlite3 *db, const char *table, unsigned int version)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_table_version_set </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>table</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>version</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">304</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00232">lms_db_bind_int()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00145">lms_db_bind_text()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00113">lms_db_finalize_stmt()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">lms_db_reset_stmt()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00337">lms_db_table_update()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="0f727cd41bbb90af2e08b3ee7ca76de9"></a><!-- doxytag: member="lightmediascanner_db_common.c::lms_db_update_file_info" ref="0f727cd41bbb90af2e08b3ee7ca76de9" args="(sqlite3_stmt *stmt, const struct lms_file_info *finfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_update_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">629</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00151">lms_file_info::dtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00149">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00232">lms_db_bind_int()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">lms_db_reset_stmt()</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00150">lms_file_info::mtime</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00152">lms_file_info::size</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="3f8fb8f31c1876b3579956b3d898cd00"></a><!-- doxytag: member="lightmediascanner_db_common.c::sqlite3_clear_bindings" ref="3f8fb8f31c1876b3579956b3d898cd00" args="(sqlite3_stmt *stmt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int sqlite3_clear_bindings </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00036">36</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">lms_db_reset_stmt()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="21da1a6588f354b758211583559ae405"></a><!-- doxytag: member="lightmediascanner_db_common.c::sqlite3_prepare_v2" ref="21da1a6588f354b758211583559ae405" args="(sqlite3 *db, const char *sql, int len, sqlite3_stmt **stmt, const char **tail)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int sqlite3_prepare_v2 </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>sql</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3_stmt ** </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char ** </td>
+ <td class="paramname"> <em>tail</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00028">28</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_set_file_dtime",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_bind_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_bind_int64",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+95892a1d8fb1e89fb1d982f7f74da232
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_update_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_bind_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+182d5b4e72286a72c1d78b5f3b5ecffd
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_begin_transaction",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+13e738f4464a76bd8c9e28877a6e1e3c
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_set_file_dtime",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+b0290321179ccfdf6b868a1401368d8d
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_update_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+6d39a7d391eabe504c0839a7bef2900c
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+62f0680e416b51bf8b87f43cae646e3a
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_table_version_set",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_bind_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_bind_text",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+ Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+ Node1 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+6782cd3f8c47ab0324aae402f15cc92e
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_delete_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+828ab82b5d7649c83e6458a1e260c2a8
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+f1e39ac10262ba4204b000fbfd7c86af
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_get_files",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+80941c09f55fa7c9f4866a3116b5da2b
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_table_update_if_required",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_table_update",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_table_version_set",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_bind_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f"];
+ Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lms_db_bind_text",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888"];
+ Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+ Node3 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+ Node3 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node9 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+ Node1 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="lms_db_table_version_get",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd"];
+ Node11 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
--- /dev/null
+a127017f0d3d7ac779c410c933d392d7
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_insert_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+a16e0583ca842d2f781066f594511cbd
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_table_update",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_table_version_set",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_bind_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f"];
+ Node2 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_bind_text",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888"];
+ Node2 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+ Node2 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+ Node2 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node8 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+3c1164fabd6ff495b98087cb95b52dfd
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db_common.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node5 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node5 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="string.h",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+fefc1430ffcf4f13ec4b2d5aa46db105
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_get_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+30a178024a3fa9cb54b3263f2f21a170
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_delete_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_bind_int64",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+9269e3df30750ad4bb35aa819bd284d2
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_end_transaction",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+acd0d2b716dec99598ca58c2c146c8bf
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_get_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_bind_blob",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+abbd954359928e3ef6a5b53fc9ca0c60
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_get_files",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_bind_blob",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6"];
+}
--- /dev/null
+0ca971b6bc4fe5459c1131cc08a8ea24
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_insert_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_bind_blob",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_bind_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+b56933dddbd09826d9bbb6fe583a44af
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_table_version_get",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_bind_text",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lms_db_finalize_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5"];
+ Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419"];
+ Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+4242509a112bf7b4df9b15d6abf53124
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_image.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_db_image.c</h1><a href="lightmediascanner__db__image_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a>></span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <span class="keyword">struct </span>lms_db_image {
+<a name="l00027"></a>00027 sqlite3 *db;
+<a name="l00028"></a>00028 sqlite3_stmt *insert;
+<a name="l00029"></a>00029 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _references;
+<a name="l00030"></a>00030 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _is_started:1;
+<a name="l00031"></a>00031 };
+<a name="l00032"></a>00032
+<a name="l00033"></a>00033 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structlms__db__cache.html">lms_db_cache</a> _cache = {0, NULL};
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00036"></a>00036 _db_table_updater_images_0(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run) {
+<a name="l00037"></a>00037 <span class="keywordtype">char</span> *errmsg;
+<a name="l00038"></a>00038 <span class="keywordtype">int</span> r, ret;
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 errmsg = NULL;
+<a name="l00041"></a>00041 r = sqlite3_exec(db,
+<a name="l00042"></a>00042 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS images ("</span>
+<a name="l00043"></a>00043 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00044"></a>00044 <span class="stringliteral">"title TEXT, "</span>
+<a name="l00045"></a>00045 <span class="stringliteral">"artist TEXT, "</span>
+<a name="l00046"></a>00046 <span class="stringliteral">"date INTEGER NOT NULL, "</span>
+<a name="l00047"></a>00047 <span class="stringliteral">"width INTEGER NOT NULL, "</span>
+<a name="l00048"></a>00048 <span class="stringliteral">"height INTEGER NOT NULL, "</span>
+<a name="l00049"></a>00049 <span class="stringliteral">"orientation INTEGER NOT NULL, "</span>
+<a name="l00050"></a>00050 <span class="stringliteral">"gps_lat REAL DEFAULT 0.0, "</span>
+<a name="l00051"></a>00051 <span class="stringliteral">"gps_long REAL DEFAULT 0.0, "</span>
+<a name="l00052"></a>00052 <span class="stringliteral">"gps_alt REAL DEFAULT 0.0"</span>
+<a name="l00053"></a>00053 <span class="stringliteral">")"</span>,
+<a name="l00054"></a>00054 NULL, NULL, &errmsg);
+<a name="l00055"></a>00055 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00056"></a>00056 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'images' table: %s\n"</span>, errmsg);
+<a name="l00057"></a>00057 sqlite3_free(errmsg);
+<a name="l00058"></a>00058 <span class="keywordflow">return</span> -1;
+<a name="l00059"></a>00059 }
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061 r = sqlite3_exec(db,
+<a name="l00062"></a>00062 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS images_date_idx ON images ("</span>
+<a name="l00063"></a>00063 <span class="stringliteral">"date"</span>
+<a name="l00064"></a>00064 <span class="stringliteral">")"</span>,
+<a name="l00065"></a>00065 NULL, NULL, &errmsg);
+<a name="l00066"></a>00066 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00067"></a>00067 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'images_date_idx' index: %s\n"</span>,
+<a name="l00068"></a>00068 errmsg);
+<a name="l00069"></a>00069 sqlite3_free(errmsg);
+<a name="l00070"></a>00070 <span class="keywordflow">return</span> -2;
+<a name="l00071"></a>00071 }
+<a name="l00072"></a>00072
+<a name="l00073"></a>00073 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00074"></a>00074 <span class="stringliteral">"delete_images_on_files_deleted "</span>
+<a name="l00075"></a>00075 <span class="stringliteral">"DELETE ON files FOR EACH ROW BEGIN "</span>
+<a name="l00076"></a>00076 <span class="stringliteral">" DELETE FROM images WHERE id = OLD.id; END;"</span>);
+<a name="l00077"></a>00077 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00078"></a>00078 <span class="keywordflow">goto</span> done;
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00081"></a>00081 <span class="stringliteral">"delete_files_on_images_deleted "</span>
+<a name="l00082"></a>00082 <span class="stringliteral">"DELETE ON images FOR EACH ROW BEGIN "</span>
+<a name="l00083"></a>00083 <span class="stringliteral">" DELETE FROM files WHERE id = OLD.id; END;"</span>);
+<a name="l00084"></a>00084
+<a name="l00085"></a>00085 done:
+<a name="l00086"></a>00086 <span class="keywordflow">return</span> ret;
+<a name="l00087"></a>00087 }
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> _db_table_updater_images[] = {
+<a name="l00090"></a>00090 _db_table_updater_images_0
+<a name="l00091"></a>00091 };
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093
+<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00095"></a>00095 _db_create_table_if_required(sqlite3 *db)
+<a name="l00096"></a>00096 {
+<a name="l00097"></a>00097 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lms_db_table_update_if_required</a>(db, <span class="stringliteral">"images"</span>,
+<a name="l00098"></a>00098 <a class="code" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">LMS_ARRAY_SIZE</a>(_db_table_updater_images),
+<a name="l00099"></a>00099 _db_table_updater_images);
+<a name="l00100"></a>00100 }
+<a name="l00101"></a>00101
+<a name="l00116"></a>00116 <a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *
+<a name="l00117"></a><a class="code" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">00117</a> <a class="code" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new</a>(sqlite3 *db)
+<a name="l00118"></a>00118 {
+<a name="l00119"></a>00119 <a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi;
+<a name="l00120"></a>00120 <span class="keywordtype">void</span> *p;
+<a name="l00121"></a>00121
+<a name="l00122"></a>00122 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lms_db_cache_get</a>(&_cache, db, &p) == 0) {
+<a name="l00123"></a>00123 ldi = p;
+<a name="l00124"></a>00124 ldi->_references++;
+<a name="l00125"></a>00125 <span class="keywordflow">return</span> ldi;
+<a name="l00126"></a>00126 }
+<a name="l00127"></a>00127
+<a name="l00128"></a>00128 <span class="keywordflow">if</span> (!db)
+<a name="l00129"></a>00129 <span class="keywordflow">return</span> NULL;
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keywordflow">if</span> (_db_create_table_if_required(db) != 0) {
+<a name="l00132"></a>00132 fprintf(stderr, <span class="stringliteral">"ERROR: could not create table.\n"</span>);
+<a name="l00133"></a>00133 <span class="keywordflow">return</span> NULL;
+<a name="l00134"></a>00134 }
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 ldi = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a>));
+<a name="l00137"></a>00137 ldi->_references = 1;
+<a name="l00138"></a>00138 ldi->db = db;
+<a name="l00139"></a>00139
+<a name="l00140"></a>00140 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lms_db_cache_add</a>(&_cache, db, ldi) != 0) {
+<a name="l00141"></a>00141 <a class="code" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lms_db_image_free</a>(ldi);
+<a name="l00142"></a>00142 <span class="keywordflow">return</span> NULL;
+<a name="l00143"></a>00143 }
+<a name="l00144"></a>00144
+<a name="l00145"></a>00145 <span class="keywordflow">return</span> ldi;
+<a name="l00146"></a>00146 }
+<a name="l00147"></a>00147
+<a name="l00160"></a>00160 <span class="keywordtype">int</span>
+<a name="l00161"></a><a class="code" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">00161</a> <a class="code" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lms_db_image_start</a>(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi)
+<a name="l00162"></a>00162 {
+<a name="l00163"></a>00163 <span class="keywordflow">if</span> (!ldi)
+<a name="l00164"></a>00164 <span class="keywordflow">return</span> -1;
+<a name="l00165"></a>00165 <span class="keywordflow">if</span> (ldi->_is_started)
+<a name="l00166"></a>00166 <span class="keywordflow">return</span> 0;
+<a name="l00167"></a>00167
+<a name="l00168"></a>00168 ldi->insert = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(ldi->db,
+<a name="l00169"></a>00169 <span class="stringliteral">"INSERT OR REPLACE INTO images ("</span>
+<a name="l00170"></a>00170 <span class="stringliteral">"id, title, artist, date, width, height, orientation, "</span>
+<a name="l00171"></a>00171 <span class="stringliteral">"gps_lat, gps_long, gps_alt) VALUES ("</span>
+<a name="l00172"></a>00172 <span class="stringliteral">"?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"</span>);
+<a name="l00173"></a>00173 <span class="keywordflow">if</span> (!ldi->insert)
+<a name="l00174"></a>00174 <span class="keywordflow">return</span> -2;
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 ldi->_is_started = 1;
+<a name="l00177"></a>00177 <span class="keywordflow">return</span> 0;
+<a name="l00178"></a>00178 }
+<a name="l00179"></a>00179
+<a name="l00192"></a>00192 <span class="keywordtype">int</span>
+<a name="l00193"></a><a class="code" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">00193</a> <a class="code" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lms_db_image_free</a>(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi)
+<a name="l00194"></a>00194 {
+<a name="l00195"></a>00195 <span class="keywordtype">int</span> r;
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 <span class="keywordflow">if</span> (!ldi)
+<a name="l00198"></a>00198 <span class="keywordflow">return</span> -1;
+<a name="l00199"></a>00199 <span class="keywordflow">if</span> (ldi->_references == 0) {
+<a name="l00200"></a>00200 fprintf(stderr, <span class="stringliteral">"ERROR: over-called lms_db_image_free(%p)\n"</span>, ldi);
+<a name="l00201"></a>00201 <span class="keywordflow">return</span> -1;
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 ldi->_references--;
+<a name="l00205"></a>00205 <span class="keywordflow">if</span> (ldi->_references > 0)
+<a name="l00206"></a>00206 <span class="keywordflow">return</span> 0;
+<a name="l00207"></a>00207
+<a name="l00208"></a>00208 <span class="keywordflow">if</span> (ldi->insert)
+<a name="l00209"></a>00209 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(ldi->insert, <span class="stringliteral">"insert"</span>);
+<a name="l00210"></a>00210
+<a name="l00211"></a>00211 r = <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(&_cache, ldi->db, ldi);
+<a name="l00212"></a>00212 free(ldi);
+<a name="l00213"></a>00213
+<a name="l00214"></a>00214 <span class="keywordflow">return</span> r;
+<a name="l00215"></a>00215 }
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00218"></a>00218 _db_insert(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__image__info.html">lms_image_info</a> *info)
+<a name="l00219"></a>00219 {
+<a name="l00220"></a>00220 sqlite3_stmt *stmt;
+<a name="l00221"></a>00221 <span class="keywordtype">int</span> r, ret;
+<a name="l00222"></a>00222
+<a name="l00223"></a>00223 stmt = ldi->insert;
+<a name="l00224"></a>00224
+<a name="l00225"></a>00225 ret = <a class="code" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a>(stmt, 1, info-><a class="code" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">id</a>);
+<a name="l00226"></a>00226 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00227"></a>00227 <span class="keywordflow">goto</span> done;
+<a name="l00228"></a>00228
+<a name="l00229"></a>00229 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 2, info-><a class="code" href="structlms__image__info.html#6242d231ae1972fb25bdaeed614d7a63">title</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, info-><a class="code" href="structlms__image__info.html#6242d231ae1972fb25bdaeed614d7a63">title</a>.<a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00230"></a>00230 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00231"></a>00231 <span class="keywordflow">goto</span> done;
+<a name="l00232"></a>00232
+<a name="l00233"></a>00233 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 3, info-><a class="code" href="structlms__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">artist</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, info-><a class="code" href="structlms__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">artist</a>.<a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00234"></a>00234 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00235"></a>00235 <span class="keywordflow">goto</span> done;
+<a name="l00236"></a>00236
+<a name="l00237"></a>00237 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 4, info-><a class="code" href="structlms__image__info.html#150973d3ac9f60f1b74f0a0d08c7f288">date</a>);
+<a name="l00238"></a>00238 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00239"></a>00239 <span class="keywordflow">goto</span> done;
+<a name="l00240"></a>00240
+<a name="l00241"></a>00241 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 5, info-><a class="code" href="structlms__image__info.html#fbd2df9f6f5f290ac02ce4d803677249">width</a>);
+<a name="l00242"></a>00242 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00243"></a>00243 <span class="keywordflow">goto</span> done;
+<a name="l00244"></a>00244
+<a name="l00245"></a>00245 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 6, info-><a class="code" href="structlms__image__info.html#f2ae81781dadf7ecaa307b3bc91e710e">height</a>);
+<a name="l00246"></a>00246 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00247"></a>00247 <span class="keywordflow">goto</span> done;
+<a name="l00248"></a>00248
+<a name="l00249"></a>00249 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 7, info-><a class="code" href="structlms__image__info.html#434330468b69d0f14b344c672d4778af">orientation</a>);
+<a name="l00250"></a>00250 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00251"></a>00251 <span class="keywordflow">goto</span> done;
+<a name="l00252"></a>00252
+<a name="l00253"></a>00253 ret = <a class="code" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lms_db_bind_double</a>(stmt, 8, info-><a class="code" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">gps</a>.<a class="code" href="structlms__gps__info.html#70f152098accf3d46f18bc159e3b4359">latitude</a>);
+<a name="l00254"></a>00254 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00255"></a>00255 <span class="keywordflow">goto</span> done;
+<a name="l00256"></a>00256
+<a name="l00257"></a>00257 ret = <a class="code" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lms_db_bind_double</a>(stmt, 9, info-><a class="code" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">gps</a>.<a class="code" href="structlms__gps__info.html#109202a83eb79b9a10df135600260e1b">longitude</a>);
+<a name="l00258"></a>00258 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00259"></a>00259 <span class="keywordflow">goto</span> done;
+<a name="l00260"></a>00260
+<a name="l00261"></a>00261 ret = <a class="code" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lms_db_bind_double</a>(stmt, 10, info-><a class="code" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">gps</a>.<a class="code" href="structlms__gps__info.html#9b56b5dbae3e5c5722f7331c2bcbd520">altitude</a>);
+<a name="l00262"></a>00262 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00263"></a>00263 <span class="keywordflow">goto</span> done;
+<a name="l00264"></a>00264
+<a name="l00265"></a>00265 r = sqlite3_step(stmt);
+<a name="l00266"></a>00266 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00267"></a>00267 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert image info: %s\n"</span>,
+<a name="l00268"></a>00268 sqlite3_errmsg(ldi->db));
+<a name="l00269"></a>00269 ret = -11;
+<a name="l00270"></a>00270 <span class="keywordflow">goto</span> done;
+<a name="l00271"></a>00271 }
+<a name="l00272"></a>00272
+<a name="l00273"></a>00273 ret = 0;
+<a name="l00274"></a>00274
+<a name="l00275"></a>00275 done:
+<a name="l00276"></a>00276 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 <span class="keywordflow">return</span> ret;
+<a name="l00279"></a>00279 }
+<a name="l00280"></a>00280
+<a name="l00292"></a>00292 <span class="keywordtype">int</span>
+<a name="l00293"></a><a class="code" href="lightmediascanner__db__image_8c.html#f23fcc3d62a0f6592e14eaf1dc9b5833">00293</a> <a class="code" href="group__LMS__DB.html#gbf78dd3b90caa31e8901369211501200">lms_db_image_add</a>(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi, <span class="keyword">struct</span> <a class="code" href="structlms__image__info.html">lms_image_info</a> *info)
+<a name="l00294"></a>00294 {
+<a name="l00295"></a>00295 <span class="keywordflow">if</span> (!ldi)
+<a name="l00296"></a>00296 <span class="keywordflow">return</span> -1;
+<a name="l00297"></a>00297 <span class="keywordflow">if</span> (!info)
+<a name="l00298"></a>00298 <span class="keywordflow">return</span> -2;
+<a name="l00299"></a>00299 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">id</a> < 1)
+<a name="l00300"></a>00300 <span class="keywordflow">return</span> -3;
+<a name="l00301"></a>00301
+<a name="l00302"></a>00302 <span class="keywordflow">return</span> _db_insert(ldi, info);
+<a name="l00303"></a>00303 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_image.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_db_image.c File Reference</h1><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code><br>
+<code>#include "<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>"</code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <stdio.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_db_image.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__db__image_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">lms_db_image_start</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lms_db_image_free</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__image_8c.html#f23fcc3d62a0f6592e14eaf1dc9b5833">lms_db_image_add</a> (<a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi, struct <a class="el" href="structlms__image__info.html">lms_image_info</a> *info)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="f23fcc3d62a0f6592e14eaf1dc9b5833"></a><!-- doxytag: member="lightmediascanner_db_image.c::lms_db_image_add" ref="f23fcc3d62a0f6592e14eaf1dc9b5833" args="(lms_db_image_t *ldi, struct lms_image_info *info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_image_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> * </td>
+ <td class="paramname"> <em>ldi</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__image__info.html">lms_image_info</a> * </td>
+ <td class="paramname"> <em>info</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add image file to DB.<p>
+This is usually called from plugin's <b>parse()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldi</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new()</a>. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>info</em> </td><td>image information to store.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__image_8c-source.html#l00293">293</a> of file <a class="el" href="lightmediascanner__db__image_8c-source.html">lightmediascanner_db_image.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db_8h-source.html#l00068">lms_image_info::id</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db_image.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner_db.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db_8h.html"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node3 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="lightmediascanner_utils.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8h.html"];
+ Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node9 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+0604db1ab18bf73d3cb9e5f77b9d86e4
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_playlist.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_db_playlist.c</h1><a href="lightmediascanner__db__playlist_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a>></span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <span class="keyword">struct </span>lms_db_playlist {
+<a name="l00027"></a>00027 sqlite3 *db;
+<a name="l00028"></a>00028 sqlite3_stmt *insert;
+<a name="l00029"></a>00029 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _references;
+<a name="l00030"></a>00030 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _is_started:1;
+<a name="l00031"></a>00031 };
+<a name="l00032"></a>00032
+<a name="l00033"></a>00033 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structlms__db__cache.html">lms_db_cache</a> _cache = {0, NULL};
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00036"></a>00036 _db_table_updater_playlists_0(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run) {
+<a name="l00037"></a>00037 <span class="keywordtype">char</span> *errmsg;
+<a name="l00038"></a>00038 <span class="keywordtype">int</span> r, ret;
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 errmsg = NULL;
+<a name="l00041"></a>00041 r = sqlite3_exec(db,
+<a name="l00042"></a>00042 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS playlists ("</span>
+<a name="l00043"></a>00043 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00044"></a>00044 <span class="stringliteral">"title TEXT, "</span>
+<a name="l00045"></a>00045 <span class="stringliteral">"n_entries INTEGER NOT NULL"</span>
+<a name="l00046"></a>00046 <span class="stringliteral">")"</span>,
+<a name="l00047"></a>00047 NULL, NULL, &errmsg);
+<a name="l00048"></a>00048 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00049"></a>00049 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'playlists' table: %s\n"</span>,
+<a name="l00050"></a>00050 errmsg);
+<a name="l00051"></a>00051 sqlite3_free(errmsg);
+<a name="l00052"></a>00052 <span class="keywordflow">return</span> -1;
+<a name="l00053"></a>00053 }
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 r = sqlite3_exec(db,
+<a name="l00056"></a>00056 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS playlists_title_idx ON "</span>
+<a name="l00057"></a>00057 <span class="stringliteral">"playlists (title)"</span>,
+<a name="l00058"></a>00058 NULL, NULL, &errmsg);
+<a name="l00059"></a>00059 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00060"></a>00060 fprintf(stderr,
+<a name="l00061"></a>00061 <span class="stringliteral">"ERROR: could not create 'playlists_title_idx' index: %s\n"</span>,
+<a name="l00062"></a>00062 errmsg);
+<a name="l00063"></a>00063 sqlite3_free(errmsg);
+<a name="l00064"></a>00064 <span class="keywordflow">return</span> -2;
+<a name="l00065"></a>00065 }
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00068"></a>00068 <span class="stringliteral">"delete_playlists_on_files_deleted "</span>
+<a name="l00069"></a>00069 <span class="stringliteral">"DELETE ON files FOR EACH ROW BEGIN "</span>
+<a name="l00070"></a>00070 <span class="stringliteral">" DELETE FROM playlists WHERE id = OLD.id; END;"</span>);
+<a name="l00071"></a>00071 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00072"></a>00072 <span class="keywordflow">goto</span> done;
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00075"></a>00075 <span class="stringliteral">"delete_files_on_playlists_deleted "</span>
+<a name="l00076"></a>00076 <span class="stringliteral">"DELETE ON playlists FOR EACH ROW BEGIN "</span>
+<a name="l00077"></a>00077 <span class="stringliteral">" DELETE FROM files WHERE id = OLD.id; END;"</span>);
+<a name="l00078"></a>00078
+<a name="l00079"></a>00079 done:
+<a name="l00080"></a>00080 <span class="keywordflow">return</span> ret;
+<a name="l00081"></a>00081 }
+<a name="l00082"></a>00082
+<a name="l00083"></a>00083 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> _db_table_updater_playlists[] = {
+<a name="l00084"></a>00084 _db_table_updater_playlists_0
+<a name="l00085"></a>00085 };
+<a name="l00086"></a>00086
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00089"></a>00089 _db_create_table_if_required(sqlite3 *db)
+<a name="l00090"></a>00090 {
+<a name="l00091"></a>00091 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lms_db_table_update_if_required</a>(db, <span class="stringliteral">"playlists"</span>,
+<a name="l00092"></a>00092 <a class="code" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">LMS_ARRAY_SIZE</a>(_db_table_updater_playlists),
+<a name="l00093"></a>00093 _db_table_updater_playlists);
+<a name="l00094"></a>00094 }
+<a name="l00095"></a>00095
+<a name="l00110"></a>00110 <a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *
+<a name="l00111"></a><a class="code" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">00111</a> <a class="code" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new</a>(sqlite3 *db)
+<a name="l00112"></a>00112 {
+<a name="l00113"></a>00113 <a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp;
+<a name="l00114"></a>00114 <span class="keywordtype">void</span> *p;
+<a name="l00115"></a>00115
+<a name="l00116"></a>00116 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lms_db_cache_get</a>(&_cache, db, &p) == 0) {
+<a name="l00117"></a>00117 ldp = p;
+<a name="l00118"></a>00118 ldp->_references++;
+<a name="l00119"></a>00119 <span class="keywordflow">return</span> ldp;
+<a name="l00120"></a>00120 }
+<a name="l00121"></a>00121
+<a name="l00122"></a>00122 <span class="keywordflow">if</span> (!db)
+<a name="l00123"></a>00123 <span class="keywordflow">return</span> NULL;
+<a name="l00124"></a>00124
+<a name="l00125"></a>00125 <span class="keywordflow">if</span> (_db_create_table_if_required(db) != 0) {
+<a name="l00126"></a>00126 fprintf(stderr, <span class="stringliteral">"ERROR: could not create table.\n"</span>);
+<a name="l00127"></a>00127 <span class="keywordflow">return</span> NULL;
+<a name="l00128"></a>00128 }
+<a name="l00129"></a>00129
+<a name="l00130"></a>00130 ldp = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a>));
+<a name="l00131"></a>00131 ldp->_references = 1;
+<a name="l00132"></a>00132 ldp->db = db;
+<a name="l00133"></a>00133
+<a name="l00134"></a>00134 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lms_db_cache_add</a>(&_cache, db, ldp) != 0) {
+<a name="l00135"></a>00135 <a class="code" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lms_db_playlist_free</a>(ldp);
+<a name="l00136"></a>00136 <span class="keywordflow">return</span> NULL;
+<a name="l00137"></a>00137 }
+<a name="l00138"></a>00138
+<a name="l00139"></a>00139 <span class="keywordflow">return</span> ldp;
+<a name="l00140"></a>00140 }
+<a name="l00141"></a>00141
+<a name="l00154"></a>00154 <span class="keywordtype">int</span>
+<a name="l00155"></a><a class="code" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">00155</a> <a class="code" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lms_db_playlist_start</a>(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp)
+<a name="l00156"></a>00156 {
+<a name="l00157"></a>00157 <span class="keywordflow">if</span> (!ldp)
+<a name="l00158"></a>00158 <span class="keywordflow">return</span> -1;
+<a name="l00159"></a>00159 <span class="keywordflow">if</span> (ldp->_is_started)
+<a name="l00160"></a>00160 <span class="keywordflow">return</span> 0;
+<a name="l00161"></a>00161
+<a name="l00162"></a>00162 ldp->insert = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(ldp->db,
+<a name="l00163"></a>00163 <span class="stringliteral">"INSERT OR REPLACE INTO playlists (id, title, n_entries) "</span>
+<a name="l00164"></a>00164 <span class="stringliteral">"VALUES (?, ?, ?)"</span>);
+<a name="l00165"></a>00165 <span class="keywordflow">if</span> (!ldp->insert)
+<a name="l00166"></a>00166 <span class="keywordflow">return</span> -2;
+<a name="l00167"></a>00167
+<a name="l00168"></a>00168 ldp->_is_started = 1;
+<a name="l00169"></a>00169 <span class="keywordflow">return</span> 0;
+<a name="l00170"></a>00170 }
+<a name="l00171"></a>00171
+<a name="l00184"></a>00184 <span class="keywordtype">int</span>
+<a name="l00185"></a><a class="code" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">00185</a> <a class="code" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lms_db_playlist_free</a>(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp)
+<a name="l00186"></a>00186 {
+<a name="l00187"></a>00187 <span class="keywordtype">int</span> r;
+<a name="l00188"></a>00188
+<a name="l00189"></a>00189 <span class="keywordflow">if</span> (!ldp)
+<a name="l00190"></a>00190 <span class="keywordflow">return</span> -1;
+<a name="l00191"></a>00191 <span class="keywordflow">if</span> (ldp->_references == 0) {
+<a name="l00192"></a>00192 fprintf(stderr, <span class="stringliteral">"ERROR: over-called lms_db_playlist_free(%p)\n"</span>, ldp);
+<a name="l00193"></a>00193 <span class="keywordflow">return</span> -1;
+<a name="l00194"></a>00194 }
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196 ldp->_references--;
+<a name="l00197"></a>00197 <span class="keywordflow">if</span> (ldp->_references > 0)
+<a name="l00198"></a>00198 <span class="keywordflow">return</span> 0;
+<a name="l00199"></a>00199
+<a name="l00200"></a>00200 <span class="keywordflow">if</span> (ldp->insert)
+<a name="l00201"></a>00201 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(ldp->insert, <span class="stringliteral">"insert"</span>);
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203 r = <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(&_cache, ldp->db, ldp);
+<a name="l00204"></a>00204 free(ldp);
+<a name="l00205"></a>00205
+<a name="l00206"></a>00206 <span class="keywordflow">return</span> r;
+<a name="l00207"></a>00207 }
+<a name="l00208"></a>00208
+<a name="l00209"></a>00209 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00210"></a>00210 _db_insert(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__playlist__info.html">lms_playlist_info</a> *info)
+<a name="l00211"></a>00211 {
+<a name="l00212"></a>00212 sqlite3_stmt *stmt;
+<a name="l00213"></a>00213 <span class="keywordtype">int</span> r, ret;
+<a name="l00214"></a>00214
+<a name="l00215"></a>00215 stmt = ldp->insert;
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 ret = <a class="code" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a>(stmt, 1, info-><a class="code" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">id</a>);
+<a name="l00218"></a>00218 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00219"></a>00219 <span class="keywordflow">goto</span> done;
+<a name="l00220"></a>00220
+<a name="l00221"></a>00221 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 2, info-><a class="code" href="structlms__playlist__info.html#515e63ba413a60d21ee73687151387f0">title</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, info-><a class="code" href="structlms__playlist__info.html#515e63ba413a60d21ee73687151387f0">title</a>.<a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00222"></a>00222 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00223"></a>00223 <span class="keywordflow">goto</span> done;
+<a name="l00224"></a>00224
+<a name="l00225"></a>00225 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 3, info-><a class="code" href="structlms__playlist__info.html#81cc52f5b6ce04cd64cf3884cb774663">n_entries</a>);
+<a name="l00226"></a>00226 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00227"></a>00227 <span class="keywordflow">goto</span> done;
+<a name="l00228"></a>00228
+<a name="l00229"></a>00229 r = sqlite3_step(stmt);
+<a name="l00230"></a>00230 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00231"></a>00231 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert playlist info: %s\n"</span>,
+<a name="l00232"></a>00232 sqlite3_errmsg(ldp->db));
+<a name="l00233"></a>00233 ret = -4;
+<a name="l00234"></a>00234 <span class="keywordflow">goto</span> done;
+<a name="l00235"></a>00235 }
+<a name="l00236"></a>00236
+<a name="l00237"></a>00237 ret = 0;
+<a name="l00238"></a>00238
+<a name="l00239"></a>00239 done:
+<a name="l00240"></a>00240 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00241"></a>00241
+<a name="l00242"></a>00242 <span class="keywordflow">return</span> ret;
+<a name="l00243"></a>00243 }
+<a name="l00244"></a>00244
+<a name="l00256"></a>00256 <span class="keywordtype">int</span>
+<a name="l00257"></a><a class="code" href="lightmediascanner__db__playlist_8c.html#4fe309efb9c2c24b6e2f77fffca81ee4">00257</a> <a class="code" href="group__LMS__DB.html#g8864e532609191f07737c1d23c1bc65f">lms_db_playlist_add</a>(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp, <span class="keyword">struct</span> <a class="code" href="structlms__playlist__info.html">lms_playlist_info</a> *info)
+<a name="l00258"></a>00258 {
+<a name="l00259"></a>00259 <span class="keywordflow">if</span> (!ldp)
+<a name="l00260"></a>00260 <span class="keywordflow">return</span> -1;
+<a name="l00261"></a>00261 <span class="keywordflow">if</span> (!info)
+<a name="l00262"></a>00262 <span class="keywordflow">return</span> -2;
+<a name="l00263"></a>00263 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">id</a> < 1)
+<a name="l00264"></a>00264 <span class="keywordflow">return</span> -3;
+<a name="l00265"></a>00265
+<a name="l00266"></a>00266 <span class="keywordflow">return</span> _db_insert(ldp, info);
+<a name="l00267"></a>00267 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_playlist.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_db_playlist.c File Reference</h1><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code><br>
+<code>#include "<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>"</code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <stdio.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_db_playlist.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__db__playlist_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">lms_db_playlist_start</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lms_db_playlist_free</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__playlist_8c.html#4fe309efb9c2c24b6e2f77fffca81ee4">lms_db_playlist_add</a> (<a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp, struct <a class="el" href="structlms__playlist__info.html">lms_playlist_info</a> *info)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="4fe309efb9c2c24b6e2f77fffca81ee4"></a><!-- doxytag: member="lightmediascanner_db_playlist.c::lms_db_playlist_add" ref="4fe309efb9c2c24b6e2f77fffca81ee4" args="(lms_db_playlist_t *ldp, struct lms_playlist_info *info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_playlist_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> * </td>
+ <td class="paramname"> <em>ldp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__playlist__info.html">lms_playlist_info</a> * </td>
+ <td class="paramname"> <em>info</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add playlist file to DB.<p>
+This is usually called from plugin's <b>parse()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldp</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new()</a>. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>info</em> </td><td>playlist information to store.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00257">257</a> of file <a class="el" href="lightmediascanner__db__playlist_8c-source.html">lightmediascanner_db_playlist.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db_8h-source.html#l00120">lms_playlist_info::id</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db_playlist.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner_db.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db_8h.html"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node3 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="lightmediascanner_utils.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8h.html"];
+ Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node9 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+a2f67a407b791f01ad94c4d48390ffb6
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_private.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_db_private.h</h1><a href="lightmediascanner__db__private_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_DB_PRIVATE_H_</span>
+<a name="l00022"></a><a class="code" href="lightmediascanner__db__private_8h.html#97d5ed207ef5b72f4fba0cab38594bb7">00022</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_DB_PRIVATE_H_ 1</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#ifdef __GNUC__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...) __attribute__((nonnull(__VA_ARGS__)))</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00031"></a><a class="code" href="lightmediascanner__db__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">00031</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include <sqlite3.h></span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include <sys/types.h></span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__plugin_8h.html">lightmediascanner_plugin.h</a>"</span>
+<a name="l00037"></a>00037
+<a name="l00038"></a>00038 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *sql) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00039"></a>00039 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keywordtype">char</span> *name) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00040"></a>00040 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(sqlite3_stmt *stmt) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00041"></a>00041 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, <span class="keyword">const</span> <span class="keywordtype">char</span> *text, <span class="keywordtype">int</span> len) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00042"></a>00042 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lms_db_bind_blob</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, <span class="keyword">const</span> <span class="keywordtype">void</span> *blob, <span class="keywordtype">int</span> len) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00043"></a>00043 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, int64_t value) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00044"></a>00044 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, int64_t *p_value) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00045"></a>00045 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, <span class="keywordtype">int</span> value) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00046"></a>00046 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lms_db_bind_double</a>(sqlite3_stmt *stmt, <span class="keywordtype">int</span> col, <span class="keywordtype">double</span> value) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00047"></a>00047 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *sql) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">lms_db_table_version_get</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00050"></a>00050 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">lms_db_table_version_set</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> version) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00051"></a>00051
+<a name="l00052"></a>00052 <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a>)(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run);
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558">lms_db_table_update</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> last_version, <span class="keyword">const</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> *updaters) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2, 5);
+<a name="l00055"></a>00055 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lms_db_table_update_if_required</a>(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> last_version, <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> *updaters) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2, 4);
+<a name="l00056"></a>00056
+<a name="l00057"></a><a class="code" href="structlms__db__cache__entry.html">00057</a> <span class="keyword">struct </span><a class="code" href="structlms__db__cache__entry.html">lms_db_cache_entry</a> {
+<a name="l00058"></a><a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">00058</a> <span class="keyword">const</span> sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>;
+<a name="l00059"></a><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">00059</a> <span class="keywordtype">void</span> *<a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a>;
+<a name="l00060"></a>00060 };
+<a name="l00061"></a>00061
+<a name="l00062"></a><a class="code" href="structlms__db__cache.html">00062</a> <span class="keyword">struct </span><a class="code" href="structlms__db__cache.html">lms_db_cache</a> {
+<a name="l00063"></a><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">00063</a> <span class="keywordtype">int</span> <a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a>;
+<a name="l00064"></a><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">00064</a> <span class="keyword">struct </span><a class="code" href="structlms__db__cache__entry.html">lms_db_cache_entry</a> *<a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a>;
+<a name="l00065"></a>00065 };
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lms_db_cache_add</a>(<span class="keyword">struct</span> <a class="code" href="structlms__db__cache.html">lms_db_cache</a> *cache, <span class="keyword">const</span> sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>, <span class="keywordtype">void</span> *<a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2, 3);
+<a name="l00068"></a>00068 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(<span class="keyword">struct</span> <a class="code" href="structlms__db__cache.html">lms_db_cache</a> *cache, <span class="keyword">const</span> sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>, <span class="keywordtype">void</span> *<a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2, 3);
+<a name="l00069"></a>00069 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lms_db_cache_get</a>(<span class="keyword">struct</span> <a class="code" href="structlms__db__cache.html">lms_db_cache</a> *cache, <span class="keyword">const</span> sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>, <span class="keywordtype">void</span> **pdata) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2, 3);
+<a name="l00070"></a>00070
+<a name="l00071"></a>00071 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lms_db_create_core_tables_if_required</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00072"></a>00072
+<a name="l00073"></a>00073 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lms_db_compile_stmt_begin_transaction</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00074"></a>00074 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lms_db_compile_stmt_end_transaction</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00075"></a>00075 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lms_db_compile_stmt_get_file_info</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00076"></a>00076 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lms_db_compile_stmt_insert_file_info</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00077"></a>00077 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lms_db_compile_stmt_update_file_info</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00078"></a>00078 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lms_db_compile_stmt_delete_file_info</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00079"></a>00079 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lms_db_compile_stmt_set_file_dtime</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00080"></a>00080 sqlite3_stmt *<a class="code" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lms_db_compile_stmt_get_files</a>(sqlite3 *<a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00081"></a>00081
+<a name="l00082"></a>00082 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(sqlite3_stmt *stmt) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00083"></a>00083 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(sqlite3_stmt *stmt) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00084"></a>00084 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lms_db_update_file_info</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00085"></a>00085 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#c0b7cf0b2eb0f55fbf8a4103bc9569d1">lms_db_get_file_info</a>(sqlite3_stmt *stmt, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00086"></a>00086 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">lms_db_insert_file_info</a>(sqlite3_stmt *stmt, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00087"></a>00087 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lms_db_delete_file_info</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00088"></a>00088 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lms_db_set_file_dtime</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00089"></a>00089 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lms_db_get_files</a>(sqlite3_stmt *stmt, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">int</span> len) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093 <span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_DB_PRIVATE_H_ */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_private.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_db_private.h File Reference</h1><code>#include <sqlite3.h></code><br>
+<code>#include <sys/types.h></code><br>
+<code>#include "<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>"</code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_db_private.h:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__db__private_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__db__cache__entry.html">lms_db_cache_entry</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__db__cache.html">lms_db_cache</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#97d5ed207ef5b72f4fba0cab38594bb7">_LIGHTMEDIASCANNER_DB_PRIVATE_H_</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(...)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#6301bd096100f8adf24d2caff3aa0b75">lms_db_compile_stmt</a> (sqlite3 *db, const char *sql) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt *int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#2660f629fbdf3d4144a6143fee837a27">lms_db_finalize_stmt</a> (sqlite3_stmt *stmt, const char *name) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt *int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#ee78f418f0f3c9ead3023b1453c63556">lms_db_reset_stmt</a> (sqlite3_stmt *stmt) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#14d56e02624ad6130bc59ae9bb950ac3">lms_db_bind_text</a> (sqlite3_stmt *stmt, int col, const char *text, int len) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#7fd514b582578c18a25cdbf6c561243c">lms_db_bind_blob</a> (sqlite3_stmt *stmt, int col, const void *blob, int len) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#bbb18d7cc44f7e363c0f240849d72c31">lms_db_bind_int64</a> (sqlite3_stmt *stmt, int col, int64_t value) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#cd7006f0271b9a47937dc2d2ae5480fe">lms_db_bind_int64_or_null</a> (sqlite3_stmt *stmt, int col, int64_t *p_value) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#37815f859116b46089bea4ba84bb23d2">lms_db_bind_int</a> (sqlite3_stmt *stmt, int col, int value) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#9e78297037179998924354e73ca69349">lms_db_bind_double</a> (sqlite3_stmt *stmt, int col, double value) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#f47d604dd4e11f81be1ad045ee723789">lms_db_create_trigger_if_not_exists</a> (sqlite3 *db, const char *sql) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#23cf7fff49641b39c017bdd076b112a7">lms_db_table_version_get</a> (sqlite3 *db, const char *table) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#1c57f68c64069575a36252816929e335">lms_db_table_version_set</a> (sqlite3 *db, const char *table, unsigned int version) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#3dcf825514196befd0a4575e4afd0b58">lms_db_table_update</a> (sqlite3 *db, const char *table, unsigned int current_version, unsigned int last_version, const <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> *updaters) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#455c0e5d62094b01fc935c5db8f07352">lms_db_table_update_if_required</a> (sqlite3 *db, const char *table, unsigned int last_version, <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> *updaters) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#f2c9e9154fff8b335c4fd5693fe45aa6">lms_db_cache_add</a> (struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> *cache, const sqlite3 *db, void *data) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#e3e18958c74ba988c2bfdf77a3793ceb">lms_db_cache_del</a> (struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> *cache, const sqlite3 *db, void *data) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#ec1ff2c5b629374611336d56871a8c0b">lms_db_cache_get</a> (struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> *cache, const sqlite3 *db, void **pdata) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#13ca09c885535a2968e707120e935268">lms_db_create_core_tables_if_required</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#073c254ca7b4d3f42e1be1854bcc42a3">lms_db_compile_stmt_begin_transaction</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#09feca4fbfde33d5647cdd5cc2de6500">lms_db_compile_stmt_end_transaction</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#327d54a6dac083e356fd609298a0cbd5">lms_db_compile_stmt_get_file_info</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#bf21f88ddbe28a8290d0df32af0f079c">lms_db_compile_stmt_insert_file_info</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#69eb9d9058d9432f7658f9adffb79ed6">lms_db_compile_stmt_update_file_info</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#76941bdbbdb711fff821343e91c2cd97">lms_db_compile_stmt_delete_file_info</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#08c34b5b1b6e927a696ff0ce66562f54">lms_db_compile_stmt_set_file_dtime</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3_stmt * </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#1cc8a80961a0febdd099a028f3da9c30">lms_db_compile_stmt_get_files</a> (sqlite3 *db) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#3a7256cb653542bbf563feeb2aa2d0ea">lms_db_begin_transaction</a> (sqlite3_stmt *stmt) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#8ee7bfba83958b80f717a6ccbad2a84c">lms_db_end_transaction</a> (sqlite3_stmt *stmt) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#9cce62321be32274de720ec946473eeb">lms_db_update_file_info</a> (sqlite3_stmt *stmt, const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#e1df123e8d894a49f740ec6429af8159">lms_db_get_file_info</a> (sqlite3_stmt *stmt, struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#9353bf3cfbe2c0045023658597b0cf1d">lms_db_insert_file_info</a> (sqlite3_stmt *stmt, struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#ec17baec1e001f67334b0265d465fb50">lms_db_delete_file_info</a> (sqlite3_stmt *stmt, const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#0fa3bfe1fa3a01a4dd231b6f818122cb">lms_db_set_file_dtime</a> (sqlite3_stmt *stmt, const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#617b14b976ba1cde9fe639800f2eae71">lms_db_get_files</a> (sqlite3_stmt *stmt, const char *path, int len) GNUC_NON_NULL(1</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> )(sqlite3 *db, const char *table, unsigned int current_version, int is_last_run)</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="97d5ed207ef5b72f4fba0cab38594bb7"></a><!-- doxytag: member="lightmediascanner_db_private.h::_LIGHTMEDIASCANNER_DB_PRIVATE_H_" ref="97d5ed207ef5b72f4fba0cab38594bb7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _LIGHTMEDIASCANNER_DB_PRIVATE_H_ 1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00022">22</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6fe68cac0abf3e2ca61141920414e93a"></a><!-- doxytag: member="lightmediascanner_db_private.h::GNUC_NON_NULL" ref="6fe68cac0abf3e2ca61141920414e93a" args="(...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_NON_NULL </td>
+ <td>(</td>
+ <td class="paramtype"> <em>...</em> </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00031">31</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="3a7256cb653542bbf563feeb2aa2d0ea"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_begin_transaction" ref="3a7256cb653542bbf563feeb2aa2d0ea" args="(sqlite3_stmt *stmt) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_begin_transaction </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00532">532</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="7fd514b582578c18a25cdbf6c561243c"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_bind_blob" ref="7fd514b582578c18a25cdbf6c561243c" args="(sqlite3_stmt *stmt, int col, const void *blob, int len) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_blob </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> <em>blob</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00168">168</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00783">lms_db_get_files()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="9e78297037179998924354e73ca69349"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_bind_double" ref="9e78297037179998924354e73ca69349" args="(sqlite3_stmt *stmt, int col, double value) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_double </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"> <em>value</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00251">251</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="37815f859116b46089bea4ba84bb23d2"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_bind_int" ref="37815f859116b46089bea4ba84bb23d2" args="(sqlite3_stmt *stmt, int col, int value) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_int </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>value</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00232">232</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">lms_db_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">lms_db_update_file_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="bbb18d7cc44f7e363c0f240849d72c31"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_bind_int64" ref="bbb18d7cc44f7e363c0f240849d72c31" args="(sqlite3_stmt *stmt, int col, int64_t value) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_int64 </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int64_t </td>
+ <td class="paramname"> <em>value</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00191">191</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00717">lms_db_delete_file_info()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">lms_db_set_file_dtime()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="cd7006f0271b9a47937dc2d2ae5480fe"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_bind_int64_or_null" ref="cd7006f0271b9a47937dc2d2ae5480fe" args="(sqlite3_stmt *stmt, int col, int64_t *p_value) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_int64_or_null </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int64_t * </td>
+ <td class="paramname"> <em>p_value</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00210">210</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="14d56e02624ad6130bc59ae9bb950ac3"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_bind_text" ref="14d56e02624ad6130bc59ae9bb950ac3" args="(sqlite3_stmt *stmt, int col, const char *text, int len) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_bind_text </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>text</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00145">145</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00270">lms_db_table_version_get()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f2c9e9154fff8b335c4fd5693fe45aa6"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_cache_add" ref="f2c9e9154fff8b335c4fd5693fe45aa6" args="(struct lms_db_cache *cache, const sqlite3 *db, void *data) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_cache_add </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> * </td>
+ <td class="paramname"> <em>cache</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e3e18958c74ba988c2bfdf77a3793ceb"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_cache_del" ref="e3e18958c74ba988c2bfdf77a3793ceb" args="(struct lms_db_cache *cache, const sqlite3 *db, void *data) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int lms_db_cache_del </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> * </td>
+ <td class="paramname"> <em>cache</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>data</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ec1ff2c5b629374611336d56871a8c0b"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_cache_get" ref="ec1ff2c5b629374611336d56871a8c0b" args="(struct lms_db_cache *cache, const sqlite3 *db, void **pdata) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int lms_db_cache_get </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__db__cache.html">lms_db_cache</a> * </td>
+ <td class="paramname"> <em>cache</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void ** </td>
+ <td class="paramname"> <em>pdata</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="6301bd096100f8adf24d2caff3aa0b75"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt" ref="6301bd096100f8adf24d2caff3aa0b75" args="(sqlite3 *db, const char *sql) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>sql</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="073c254ca7b4d3f42e1be1854bcc42a3"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt_begin_transaction" ref="073c254ca7b4d3f42e1be1854bcc42a3" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_begin_transaction </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00526">526</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="76941bdbbdb711fff821343e91c2cd97"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt_delete_file_info" ref="76941bdbbdb711fff821343e91c2cd97" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_delete_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00711">711</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="09feca4fbfde33d5647cdd5cc2de6500"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt_end_transaction" ref="09feca4fbfde33d5647cdd5cc2de6500" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_end_transaction </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00553">553</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="327d54a6dac083e356fd609298a0cbd5"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt_get_file_info" ref="327d54a6dac083e356fd609298a0cbd5" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_get_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00580">580</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="1cc8a80961a0febdd099a028f3da9c30"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt_get_files" ref="1cc8a80961a0febdd099a028f3da9c30" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_get_files </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00776">776</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="bf21f88ddbe28a8290d0df32af0f079c"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt_insert_file_info" ref="bf21f88ddbe28a8290d0df32af0f079c" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_insert_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00666">666</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="08c34b5b1b6e927a696ff0ce66562f54"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt_set_file_dtime" ref="08c34b5b1b6e927a696ff0ce66562f54" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_set_file_dtime </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00741">741</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="69eb9d9058d9432f7658f9adffb79ed6"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_compile_stmt_update_file_info" ref="69eb9d9058d9432f7658f9adffb79ed6" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* lms_db_compile_stmt_update_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00622">622</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00101">lms_db_compile_stmt()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="13ca09c885535a2968e707120e935268"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_create_core_tables_if_required" ref="13ca09c885535a2968e707120e935268" args="(sqlite3 *db) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int lms_db_create_core_tables_if_required </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00475">475</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f47d604dd4e11f81be1ad045ee723789"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_create_trigger_if_not_exists" ref="f47d604dd4e11f81be1ad045ee723789" args="(sqlite3 *db, const char *sql) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_create_trigger_if_not_exists </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>sql</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ec17baec1e001f67334b0265d465fb50"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_delete_file_info" ref="ec17baec1e001f67334b0265d465fb50" args="(sqlite3_stmt *stmt, const struct lms_file_info *finfo) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int lms_db_delete_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="8ee7bfba83958b80f717a6ccbad2a84c"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_end_transaction" ref="8ee7bfba83958b80f717a6ccbad2a84c" args="(sqlite3_stmt *stmt) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_end_transaction </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00559">559</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="2660f629fbdf3d4144a6143fee837a27"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_finalize_stmt" ref="2660f629fbdf3d4144a6143fee837a27" args="(sqlite3_stmt *stmt, const char *name) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* int lms_db_finalize_stmt </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>name</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="e1df123e8d894a49f740ec6429af8159"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_get_file_info" ref="e1df123e8d894a49f740ec6429af8159" args="(sqlite3_stmt *stmt, struct lms_file_info *finfo) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int lms_db_get_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="617b14b976ba1cde9fe639800f2eae71"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_get_files" ref="617b14b976ba1cde9fe639800f2eae71" args="(sqlite3_stmt *stmt, const char *path, int len) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int int int lms_db_get_files </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>path</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9353bf3cfbe2c0045023658597b0cf1d"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_insert_file_info" ref="9353bf3cfbe2c0045023658597b0cf1d" args="(sqlite3_stmt *stmt, struct lms_file_info *finfo) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int lms_db_insert_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ee78f418f0f3c9ead3023b1453c63556"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_reset_stmt" ref="ee78f418f0f3c9ead3023b1453c63556" args="(sqlite3_stmt *stmt) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3_stmt* int int lms_db_reset_stmt </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00128">128</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00036">sqlite3_clear_bindings()</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00717">lms_db_delete_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">lms_db_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00270">lms_db_table_version_get()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00304">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">lms_db_update_file_info()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="0fa3bfe1fa3a01a4dd231b6f818122cb"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_set_file_dtime" ref="0fa3bfe1fa3a01a4dd231b6f818122cb" args="(sqlite3_stmt *stmt, const struct lms_file_info *finfo) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int int lms_db_set_file_dtime </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="3dcf825514196befd0a4575e4afd0b58"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_table_update" ref="3dcf825514196befd0a4575e4afd0b58" args="(sqlite3 *db, const char *table, unsigned int current_version, unsigned int last_version, const lms_db_table_updater_t *updaters) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_table_update </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>table</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>current_version</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>last_version</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> * </td>
+ <td class="paramname"> <em>updaters</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="455c0e5d62094b01fc935c5db8f07352"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_table_update_if_required" ref="455c0e5d62094b01fc935c5db8f07352" args="(sqlite3 *db, const char *table, unsigned int last_version, lms_db_table_updater_t *updaters) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int lms_db_table_update_if_required </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>table</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>last_version</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> * </td>
+ <td class="paramname"> <em>updaters</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="23cf7fff49641b39c017bdd076b112a7"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_table_version_get" ref="23cf7fff49641b39c017bdd076b112a7" args="(sqlite3 *db, const char *table) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int lms_db_table_version_get </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>table</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="1c57f68c64069575a36252816929e335"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_table_version_set" ref="1c57f68c64069575a36252816929e335" args="(sqlite3 *db, const char *table, unsigned int version) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int lms_db_table_version_set </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>table</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>version</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9cce62321be32274de720ec946473eeb"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_update_file_info" ref="9cce62321be32274de720ec946473eeb" args="(sqlite3_stmt *stmt, const struct lms_file_info *finfo) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_update_file_info </td>
+ <td>(</td>
+ <td class="paramtype">sqlite3_stmt * </td>
+ <td class="paramname"> <em>stmt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="31db275bbea4b156c8b4493dac818b73"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_table_updater_t" ref="31db275bbea4b156c8b4493dac818b73" args=")(sqlite3 *db, const char *table, unsigned int current_version, int is_last_run)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int typedef int(* <a class="el" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a>)(sqlite3 *db, const char *table, unsigned int current_version, int is_last_run) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_begin_transaction",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+13e738f4464a76bd8c9e28877a6e1e3c
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_set_file_dtime",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+b0290321179ccfdf6b868a1401368d8d
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_end_transaction",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+acd0d2b716dec99598ca58c2c146c8bf
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_get_files",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+80941c09f55fa7c9f4866a3116b5da2b
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_get_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+30a178024a3fa9cb54b3263f2f21a170
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_update_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+6d39a7d391eabe504c0839a7bef2900c
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_delete_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+828ab82b5d7649c83e6458a1e260c2a8
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db_private.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="src/lib/lightmediascanner_check.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__check_8c.html"];
+ Node1 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="src/lib/lightmediascanner_db_audio.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__audio_8c.html"];
+ Node1 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="src/lib/lightmediascanner_db_common.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html"];
+ Node1 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="src/lib/lightmediascanner_db_image.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__image_8c.html"];
+ Node1 -> Node6 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="src/lib/lightmediascanner_db_playlist.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__playlist_8c.html"];
+ Node1 -> Node7 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="src/lib/lightmediascanner_db_video.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__video_8c.html"];
+ Node1 -> Node8 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="src/lib/lightmediascanner_process.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__process_8c.html"];
+}
--- /dev/null
+bd599d87ccd4ef1044acb8dd3e63aa65
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db_private.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node4 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
--- /dev/null
+8903f3c6c7e9cbd9e421137e634c8f65
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_compile_stmt_insert_file_info",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_compile_stmt",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sqlite3_prepare_v2",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405"];
+}
--- /dev/null
+a16e0583ca842d2f781066f594511cbd
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_db_reset_stmt",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="sqlite3_clear_bindings",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00"];
+}
--- /dev/null
+62f0680e416b51bf8b87f43cae646e3a
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_video.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_db_video.c</h1><a href="lightmediascanner__db__video_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a>></span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00025"></a>00025
+<a name="l00026"></a>00026 <span class="keyword">struct </span>lms_db_video {
+<a name="l00027"></a>00027 sqlite3 *db;
+<a name="l00028"></a>00028 sqlite3_stmt *insert;
+<a name="l00029"></a>00029 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _references;
+<a name="l00030"></a>00030 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _is_started:1;
+<a name="l00031"></a>00031 };
+<a name="l00032"></a>00032
+<a name="l00033"></a>00033 <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structlms__db__cache.html">lms_db_cache</a> _cache = {0, NULL};
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00036"></a>00036 _db_table_updater_videos_0(sqlite3 *db, <span class="keyword">const</span> <span class="keywordtype">char</span> *table, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_version, <span class="keywordtype">int</span> is_last_run) {
+<a name="l00037"></a>00037 <span class="keywordtype">char</span> *errmsg;
+<a name="l00038"></a>00038 <span class="keywordtype">int</span> r, ret;
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 errmsg = NULL;
+<a name="l00041"></a>00041 r = sqlite3_exec(db,
+<a name="l00042"></a>00042 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS videos ("</span>
+<a name="l00043"></a>00043 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00044"></a>00044 <span class="stringliteral">"title TEXT, "</span>
+<a name="l00045"></a>00045 <span class="stringliteral">"artist TEXT"</span>
+<a name="l00046"></a>00046 <span class="stringliteral">")"</span>,
+<a name="l00047"></a>00047 NULL, NULL, &errmsg);
+<a name="l00048"></a>00048 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00049"></a>00049 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'videos' table: %s\n"</span>, errmsg);
+<a name="l00050"></a>00050 sqlite3_free(errmsg);
+<a name="l00051"></a>00051 <span class="keywordflow">return</span> -1;
+<a name="l00052"></a>00052 }
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 r = sqlite3_exec(db,
+<a name="l00055"></a>00055 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS videos_title_idx ON videos ("</span>
+<a name="l00056"></a>00056 <span class="stringliteral">"title"</span>
+<a name="l00057"></a>00057 <span class="stringliteral">")"</span>,
+<a name="l00058"></a>00058 NULL, NULL, &errmsg);
+<a name="l00059"></a>00059 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00060"></a>00060 fprintf(stderr,
+<a name="l00061"></a>00061 <span class="stringliteral">"ERROR: could not create 'videos_title_idx' index: %s\n"</span>,
+<a name="l00062"></a>00062 errmsg);
+<a name="l00063"></a>00063 sqlite3_free(errmsg);
+<a name="l00064"></a>00064 <span class="keywordflow">return</span> -2;
+<a name="l00065"></a>00065 }
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 r = sqlite3_exec(db,
+<a name="l00068"></a>00068 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS videos_artist_idx ON videos ("</span>
+<a name="l00069"></a>00069 <span class="stringliteral">"artist"</span>
+<a name="l00070"></a>00070 <span class="stringliteral">")"</span>,
+<a name="l00071"></a>00071 NULL, NULL, &errmsg);
+<a name="l00072"></a>00072 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00073"></a>00073 fprintf(stderr,
+<a name="l00074"></a>00074 <span class="stringliteral">"ERROR: could not create 'videos_artist_idx' index: %s\n"</span>,
+<a name="l00075"></a>00075 errmsg);
+<a name="l00076"></a>00076 sqlite3_free(errmsg);
+<a name="l00077"></a>00077 <span class="keywordflow">return</span> -3;
+<a name="l00078"></a>00078 }
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00081"></a>00081 <span class="stringliteral">"delete_videos_on_files_deleted "</span>
+<a name="l00082"></a>00082 <span class="stringliteral">"DELETE ON files FOR EACH ROW BEGIN "</span>
+<a name="l00083"></a>00083 <span class="stringliteral">" DELETE FROM videos WHERE id = OLD.id; END;"</span>);
+<a name="l00084"></a>00084 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00085"></a>00085 <span class="keywordflow">goto</span> done;
+<a name="l00086"></a>00086
+<a name="l00087"></a>00087 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00088"></a>00088 <span class="stringliteral">"delete_files_on_videos_deleted "</span>
+<a name="l00089"></a>00089 <span class="stringliteral">"DELETE ON videos FOR EACH ROW BEGIN "</span>
+<a name="l00090"></a>00090 <span class="stringliteral">" DELETE FROM files WHERE id = OLD.id; END;"</span>);
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 done:
+<a name="l00093"></a>00093 <span class="keywordflow">return</span> ret;
+<a name="l00094"></a>00094 }
+<a name="l00095"></a>00095
+<a name="l00096"></a>00096 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#31db275bbea4b156c8b4493dac818b73">lms_db_table_updater_t</a> _db_table_updater_videos[] = {
+<a name="l00097"></a>00097 _db_table_updater_videos_0
+<a name="l00098"></a>00098 };
+<a name="l00099"></a>00099
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00102"></a>00102 _db_create_table_if_required(sqlite3 *db)
+<a name="l00103"></a>00103 {
+<a name="l00104"></a>00104 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lms_db_table_update_if_required</a>(db, <span class="stringliteral">"videos"</span>,
+<a name="l00105"></a>00105 <a class="code" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">LMS_ARRAY_SIZE</a>(_db_table_updater_videos),
+<a name="l00106"></a>00106 _db_table_updater_videos);
+<a name="l00107"></a>00107 }
+<a name="l00108"></a>00108
+<a name="l00123"></a>00123 <a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *
+<a name="l00124"></a><a class="code" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">00124</a> <a class="code" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new</a>(sqlite3 *db)
+<a name="l00125"></a>00125 {
+<a name="l00126"></a>00126 <a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv;
+<a name="l00127"></a>00127 <span class="keywordtype">void</span> *p;
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lms_db_cache_get</a>(&_cache, db, &p) == 0) {
+<a name="l00130"></a>00130 ldv = p;
+<a name="l00131"></a>00131 ldv->_references++;
+<a name="l00132"></a>00132 <span class="keywordflow">return</span> ldv;
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134
+<a name="l00135"></a>00135 <span class="keywordflow">if</span> (!db)
+<a name="l00136"></a>00136 <span class="keywordflow">return</span> NULL;
+<a name="l00137"></a>00137
+<a name="l00138"></a>00138 <span class="keywordflow">if</span> (_db_create_table_if_required(db) != 0) {
+<a name="l00139"></a>00139 fprintf(stderr, <span class="stringliteral">"ERROR: could not create table.\n"</span>);
+<a name="l00140"></a>00140 <span class="keywordflow">return</span> NULL;
+<a name="l00141"></a>00141 }
+<a name="l00142"></a>00142
+<a name="l00143"></a>00143 ldv = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a>));
+<a name="l00144"></a>00144 ldv->_references = 1;
+<a name="l00145"></a>00145 ldv->db = db;
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lms_db_cache_add</a>(&_cache, db, ldv) != 0) {
+<a name="l00148"></a>00148 <a class="code" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lms_db_video_free</a>(ldv);
+<a name="l00149"></a>00149 <span class="keywordflow">return</span> NULL;
+<a name="l00150"></a>00150 }
+<a name="l00151"></a>00151
+<a name="l00152"></a>00152 <span class="keywordflow">return</span> ldv;
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154
+<a name="l00167"></a>00167 <span class="keywordtype">int</span>
+<a name="l00168"></a><a class="code" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">00168</a> <a class="code" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lms_db_video_start</a>(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv)
+<a name="l00169"></a>00169 {
+<a name="l00170"></a>00170 <span class="keywordflow">if</span> (!ldv)
+<a name="l00171"></a>00171 <span class="keywordflow">return</span> -1;
+<a name="l00172"></a>00172 <span class="keywordflow">if</span> (ldv->_is_started)
+<a name="l00173"></a>00173 <span class="keywordflow">return</span> 0;
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175 ldv->insert = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(ldv->db,
+<a name="l00176"></a>00176 <span class="stringliteral">"INSERT OR REPLACE INTO videos (id, title, artist) VALUES (?, ?, ?)"</span>);
+<a name="l00177"></a>00177 <span class="keywordflow">if</span> (!ldv->insert)
+<a name="l00178"></a>00178 <span class="keywordflow">return</span> -2;
+<a name="l00179"></a>00179
+<a name="l00180"></a>00180 ldv->_is_started = 1;
+<a name="l00181"></a>00181 <span class="keywordflow">return</span> 0;
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183
+<a name="l00196"></a>00196 <span class="keywordtype">int</span>
+<a name="l00197"></a><a class="code" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">00197</a> <a class="code" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lms_db_video_free</a>(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv)
+<a name="l00198"></a>00198 {
+<a name="l00199"></a>00199 <span class="keywordtype">int</span> r;
+<a name="l00200"></a>00200
+<a name="l00201"></a>00201 <span class="keywordflow">if</span> (!ldv)
+<a name="l00202"></a>00202 <span class="keywordflow">return</span> -1;
+<a name="l00203"></a>00203 <span class="keywordflow">if</span> (ldv->_references == 0) {
+<a name="l00204"></a>00204 fprintf(stderr, <span class="stringliteral">"ERROR: over-called lms_db_video_free(%p)\n"</span>, ldv);
+<a name="l00205"></a>00205 <span class="keywordflow">return</span> -1;
+<a name="l00206"></a>00206 }
+<a name="l00207"></a>00207
+<a name="l00208"></a>00208 ldv->_references--;
+<a name="l00209"></a>00209 <span class="keywordflow">if</span> (ldv->_references > 0)
+<a name="l00210"></a>00210 <span class="keywordflow">return</span> 0;
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 <span class="keywordflow">if</span> (ldv->insert)
+<a name="l00213"></a>00213 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(ldv->insert, <span class="stringliteral">"insert"</span>);
+<a name="l00214"></a>00214
+<a name="l00215"></a>00215 r = <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(&_cache, ldv->db, ldv);
+<a name="l00216"></a>00216 free(ldv);
+<a name="l00217"></a>00217
+<a name="l00218"></a>00218 <span class="keywordflow">return</span> r;
+<a name="l00219"></a>00219 }
+<a name="l00220"></a>00220
+<a name="l00221"></a>00221 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00222"></a>00222 _db_insert(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__video__info.html">lms_video_info</a> *info)
+<a name="l00223"></a>00223 {
+<a name="l00224"></a>00224 sqlite3_stmt *stmt;
+<a name="l00225"></a>00225 <span class="keywordtype">int</span> r, ret;
+<a name="l00226"></a>00226
+<a name="l00227"></a>00227 stmt = ldv->insert;
+<a name="l00228"></a>00228
+<a name="l00229"></a>00229 ret = <a class="code" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lms_db_bind_int64</a>(stmt, 1, info-><a class="code" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">id</a>);
+<a name="l00230"></a>00230 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00231"></a>00231 <span class="keywordflow">goto</span> done;
+<a name="l00232"></a>00232
+<a name="l00233"></a>00233 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 2, info-><a class="code" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">title</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, info-><a class="code" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">title</a>.<a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00234"></a>00234 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00235"></a>00235 <span class="keywordflow">goto</span> done;
+<a name="l00236"></a>00236
+<a name="l00237"></a>00237 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 3, info-><a class="code" href="structlms__video__info.html#c0bfe0cf4fe29e3c24a6df4248c7640e">artist</a>.<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, info-><a class="code" href="structlms__video__info.html#c0bfe0cf4fe29e3c24a6df4248c7640e">artist</a>.<a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00238"></a>00238 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00239"></a>00239 <span class="keywordflow">goto</span> done;
+<a name="l00240"></a>00240
+<a name="l00241"></a>00241 r = sqlite3_step(stmt);
+<a name="l00242"></a>00242 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00243"></a>00243 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert video info: %s\n"</span>,
+<a name="l00244"></a>00244 sqlite3_errmsg(ldv->db));
+<a name="l00245"></a>00245 ret = -4;
+<a name="l00246"></a>00246 <span class="keywordflow">goto</span> done;
+<a name="l00247"></a>00247 }
+<a name="l00248"></a>00248
+<a name="l00249"></a>00249 ret = 0;
+<a name="l00250"></a>00250
+<a name="l00251"></a>00251 done:
+<a name="l00252"></a>00252 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00253"></a>00253
+<a name="l00254"></a>00254 <span class="keywordflow">return</span> ret;
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256
+<a name="l00268"></a>00268 <span class="keywordtype">int</span>
+<a name="l00269"></a><a class="code" href="lightmediascanner__db__video_8c.html#700adc9c25a70e5cd1d77812324b748e">00269</a> <a class="code" href="group__LMS__DB.html#gb07d1e7fe962486b6e9d00581e8aac19">lms_db_video_add</a>(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv, <span class="keyword">struct</span> <a class="code" href="structlms__video__info.html">lms_video_info</a> *info)
+<a name="l00270"></a>00270 {
+<a name="l00271"></a>00271 <span class="keywordflow">if</span> (!ldv)
+<a name="l00272"></a>00272 <span class="keywordflow">return</span> -1;
+<a name="l00273"></a>00273 <span class="keywordflow">if</span> (!info)
+<a name="l00274"></a>00274 <span class="keywordflow">return</span> -2;
+<a name="l00275"></a>00275 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">id</a> < 1)
+<a name="l00276"></a>00276 <span class="keywordflow">return</span> -3;
+<a name="l00277"></a>00277
+<a name="l00278"></a>00278 <span class="keywordflow">return</span> _db_insert(ldv, info);
+<a name="l00279"></a>00279 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_db_video.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_db_video.c File Reference</h1><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code><br>
+<code>#include "<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>"</code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <stdio.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_db_video.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__db__video_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new</a> (sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lms_db_video_start</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lms_db_video_free</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__db__video_8c.html#700adc9c25a70e5cd1d77812324b748e">lms_db_video_add</a> (<a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv, struct <a class="el" href="structlms__video__info.html">lms_video_info</a> *info)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="700adc9c25a70e5cd1d77812324b748e"></a><!-- doxytag: member="lightmediascanner_db_video.c::lms_db_video_add" ref="700adc9c25a70e5cd1d77812324b748e" args="(lms_db_video_t *ldv, struct lms_video_info *info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_db_video_add </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> * </td>
+ <td class="paramname"> <em>ldv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__video__info.html">lms_video_info</a> * </td>
+ <td class="paramname"> <em>info</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add video file to DB.<p>
+This is usually called from plugin's <b>parse()</b> callback.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>ldv</em> </td><td>handle returned by <a class="el" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new()</a>. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>info</em> </td><td>video information to store.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__video_8c-source.html#l00269">269</a> of file <a class="el" href="lightmediascanner__db__video_8c-source.html">lightmediascanner_db_video.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__db_8h-source.html#l00106">lms_video_info::id</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_db_video.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner_db.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db_8h.html"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node3 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node2 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="lightmediascanner_utils.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8h.html"];
+ Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node9 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+bbea3248e170fe8440018cf1110c3ef7
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_plugin.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_plugin.h</h1><a href="lightmediascanner__plugin_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00133"></a>00133 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_PLUGIN_H_</span>
+<a name="l00134"></a><a class="code" href="lightmediascanner__plugin_8h.html#25abdf2375defcfc83bf95ef930fc739">00134</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_PLUGIN_H_ 1</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span>
+<a name="l00136"></a>00136 <span class="preprocessor">#include <<a class="code" href="lightmediascanner_8h.html">lightmediascanner.h</a>></span>
+<a name="l00137"></a>00137 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__charset__conv_8h.html">lightmediascanner_charset_conv.h</a>></span>
+<a name="l00138"></a>00138 <span class="preprocessor">#include <sqlite3.h></span>
+<a name="l00139"></a>00139 <span class="preprocessor">#include <sys/types.h></span>
+<a name="l00140"></a>00140
+<a name="l00141"></a>00141 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00143"></a>00143 <span class="preprocessor">#endif</span>
+<a name="l00144"></a>00144 <span class="preprocessor"></span>
+<a name="l00145"></a><a class="code" href="structlms__file__info.html">00145</a> <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> {
+<a name="l00146"></a><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">00146</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>;
+<a name="l00147"></a><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">00147</a> <span class="keywordtype">int</span> <a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>;
+<a name="l00148"></a><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">00148</a> <span class="keywordtype">int</span> <a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a>;
+<a name="l00149"></a><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">00149</a> int64_t <a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a>;
+<a name="l00150"></a><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">00150</a> time_t <a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a>;
+<a name="l00151"></a><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">00151</a> time_t <a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>;
+<a name="l00152"></a><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">00152</a> <span class="keywordtype">size_t</span> <a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a>;
+<a name="l00153"></a>00153 };
+<a name="l00154"></a>00154
+<a name="l00155"></a><a class="code" href="structlms__context.html">00155</a> <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> {
+<a name="l00156"></a><a class="code" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">00156</a> sqlite3 *<a class="code" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">db</a>;
+<a name="l00157"></a><a class="code" href="structlms__context.html#a5ce50393bbe62f6357934a1d9ce5a61">00157</a> <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *<a class="code" href="structlms__context.html#a5ce50393bbe62f6357934a1d9ce5a61">cs_conv</a>;
+<a name="l00158"></a>00158 };
+<a name="l00159"></a>00159
+<a name="l00160"></a><a class="code" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">00160</a> <span class="keyword">typedef</span> <span class="keywordtype">void</span> *(*lms_plugin_match_fn_t)(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">int</span> len, <span class="keywordtype">int</span> base);
+<a name="l00161"></a><a class="code" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">00161</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lms_plugin_parse_fn_t</a>)(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p, <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> *ctxt, <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo, <span class="keywordtype">void</span> *match);
+<a name="l00162"></a><a class="code" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">00162</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lms_plugin_close_fn_t</a>)(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p);
+<a name="l00163"></a><a class="code" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">00163</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lms_plugin_setup_fn_t</a>)(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p, <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> *ctxt);
+<a name="l00164"></a><a class="code" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">00164</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lms_plugin_start_fn_t</a>)(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p, <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> *ctxt);
+<a name="l00165"></a><a class="code" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">00165</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lms_plugin_finish_fn_t</a>)(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p, <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> *ctxt);
+<a name="l00166"></a>00166
+<a name="l00167"></a><a class="code" href="structlms__plugin.html">00167</a> <span class="keyword">struct </span><a class="code" href="structlms__plugin.html">lms_plugin</a> {
+<a name="l00168"></a><a class="code" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">00168</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">name</a>;
+<a name="l00169"></a><a class="code" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">00169</a> <a class="code" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">lms_plugin_match_fn_t</a> <a class="code" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">match</a>;
+<a name="l00170"></a><a class="code" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">00170</a> <a class="code" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lms_plugin_parse_fn_t</a> <a class="code" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">parse</a>;
+<a name="l00171"></a><a class="code" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">00171</a> <a class="code" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lms_plugin_close_fn_t</a> <a class="code" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">close</a>;
+<a name="l00172"></a><a class="code" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">00172</a> <a class="code" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lms_plugin_setup_fn_t</a> <a class="code" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">setup</a>;
+<a name="l00173"></a><a class="code" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">00173</a> <a class="code" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lms_plugin_start_fn_t</a> <a class="code" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">start</a>;
+<a name="l00174"></a><a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">00174</a> <a class="code" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lms_plugin_finish_fn_t</a> <a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">finish</a>;
+<a name="l00175"></a>00175 };
+<a name="l00176"></a>00176
+<a name="l00177"></a><a class="code" href="structlms__plugin__info.html">00177</a> <span class="keyword">struct </span><a class="code" href="structlms__plugin__info.html">lms_plugin_info</a> {
+<a name="l00178"></a><a class="code" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">00178</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">name</a>;
+<a name="l00179"></a><a class="code" href="structlms__plugin__info.html#d5fd907e4bcc553eb9474aa132435c9c">00179</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *<a class="code" href="structlms__plugin__info.html#d5fd907e4bcc553eb9474aa132435c9c">categories</a>;
+<a name="l00180"></a><a class="code" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">00180</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">description</a>;
+<a name="l00181"></a><a class="code" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">00181</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">version</a>;
+<a name="l00182"></a><a class="code" href="structlms__plugin__info.html#5dd799fc0e3dd7e798f053ecf773e59a">00182</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *<a class="code" href="structlms__plugin__info.html#5dd799fc0e3dd7e798f053ecf773e59a">authors</a>;
+<a name="l00183"></a><a class="code" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">00183</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">uri</a>;
+<a name="l00184"></a>00184 };
+<a name="l00185"></a>00185
+<a name="l00186"></a>00186
+<a name="l00187"></a>00187 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00188"></a>00188 <span class="preprocessor"></span>}
+<a name="l00189"></a>00189 <span class="preprocessor">#endif</span>
+<a name="l00190"></a>00190 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_PLUGIN_H_ */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_plugin.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_plugin.h File Reference</h1><code>#include <<a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>></code><br>
+<code>#include <<a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>></code><br>
+<code>#include <sqlite3.h></code><br>
+<code>#include <sys/types.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_plugin.h:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__plugin_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__file__info.html">lms_file_info</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__context.html">lms_context</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin.html">lms_plugin</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin__info.html">lms_plugin_info</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__plugin_8h.html#25abdf2375defcfc83bf95ef930fc739">_LIGHTMEDIASCANNER_PLUGIN_H_</a> 1</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">lms_plugin_match_fn_t</a> )(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, const char *path, int len, int base)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lms_plugin_parse_fn_t</a> )(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, struct <a class="el" href="structlms__context.html">lms_context</a> *ctxt, const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo, void *match)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lms_plugin_close_fn_t</a> )(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lms_plugin_setup_fn_t</a> )(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, struct <a class="el" href="structlms__context.html">lms_context</a> *ctxt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lms_plugin_start_fn_t</a> )(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, struct <a class="el" href="structlms__context.html">lms_context</a> *ctxt)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lms_plugin_finish_fn_t</a> )(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, struct <a class="el" href="structlms__context.html">lms_context</a> *ctxt)</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="25abdf2375defcfc83bf95ef930fc739"></a><!-- doxytag: member="lightmediascanner_plugin.h::_LIGHTMEDIASCANNER_PLUGIN_H_" ref="25abdf2375defcfc83bf95ef930fc739" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _LIGHTMEDIASCANNER_PLUGIN_H_ 1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00134">134</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="44576c68c208c78f34f41fcd6c7c2c4b"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_close_fn_t" ref="44576c68c208c78f34f41fcd6c7c2c4b" args=")(lms_plugin_t *p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lms_plugin_close_fn_t</a>)(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00162">162</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="c72facc8d4fa98f660fd064c80d5b321"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_finish_fn_t" ref="c72facc8d4fa98f660fd064c80d5b321" args=")(lms_plugin_t *p, struct lms_context *ctxt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lms_plugin_finish_fn_t</a>)(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, struct <a class="el" href="structlms__context.html">lms_context</a> *ctxt) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00165">165</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="558e8f031ecb3e6b8adf7d98f3e4fcd6"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_match_fn_t" ref="558e8f031ecb3e6b8adf7d98f3e4fcd6" args=")(lms_plugin_t *p, const char *path, int len, int base)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void*(* <a class="el" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">lms_plugin_match_fn_t</a>)(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, const char *path, int len, int base) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00160">160</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="649350fd7015fa63ca86c43906c3f175"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_parse_fn_t" ref="649350fd7015fa63ca86c43906c3f175" args=")(lms_plugin_t *p, struct lms_context *ctxt, const struct lms_file_info *finfo, void *match)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lms_plugin_parse_fn_t</a>)(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, struct <a class="el" href="structlms__context.html">lms_context</a> *ctxt, const struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo, void *match) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00161">161</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6bfa82e6e83e85747048f41dfb334acd"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_setup_fn_t" ref="6bfa82e6e83e85747048f41dfb334acd" args=")(lms_plugin_t *p, struct lms_context *ctxt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lms_plugin_setup_fn_t</a>)(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, struct <a class="el" href="structlms__context.html">lms_context</a> *ctxt) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00163">163</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="875d300da41e72865452c6ae44687b77"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_start_fn_t" ref="875d300da41e72865452c6ae44687b77" args=")(lms_plugin_t *p, struct lms_context *ctxt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lms_plugin_start_fn_t</a>)(<a class="el" href="structlms__plugin.html">lms_plugin_t</a> *p, struct <a class="el" href="structlms__context.html">lms_context</a> *ctxt) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00164">164</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_plugin.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="src/lib/lightmediascanner_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html"];
+ Node2 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="src/lib/lightmediascanner.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html"];
+ Node2 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="src/lib/lightmediascanner_check.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__check_8c.html"];
+ Node2 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="src/lib/lightmediascanner_process.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__process_8c.html"];
+ Node1 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node6 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="src/lib/lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node6 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 -> Node7 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="src/lib/lightmediascanner_db_audio.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__audio_8c.html"];
+ Node6 -> Node8 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="src/lib/lightmediascanner_db_common.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html"];
+ Node6 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="src/lib/lightmediascanner_db_image.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__image_8c.html"];
+ Node6 -> Node10 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="src/lib/lightmediascanner_db_playlist.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__playlist_8c.html"];
+ Node6 -> Node11 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="src/lib/lightmediascanner_db_video.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__video_8c.html"];
+ Node6 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node12 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="src/lib/lightmediascanner_db.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db_8h.html"];
+ Node12 -> Node7 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node10 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node11 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
--- /dev/null
+a9906b5c2132f42633db5a1ade84d1e1
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_plugin.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+747005cef72865cbb967e30eec0a986c
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_private.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_private.h</h1><a href="lightmediascanner__private_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_PRIVATE_H_</span>
+<a name="l00022"></a><a class="code" href="lightmediascanner__private_8h.html#c9783e2105f145aa71f541e0825707ed">00022</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_PRIVATE_H_ 1</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#ifdef __GNUC__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...) __attribute__((nonnull(__VA_ARGS__)))</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00031"></a><a class="code" href="lightmediascanner__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">00031</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "<a class="code" href="lightmediascanner_8h.html">lightmediascanner.h</a>"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__plugin_8h.html">lightmediascanner_plugin.h</a>"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__charset__conv_8h.html">lightmediascanner_charset_conv.h</a>"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include <sys/types.h></span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include <poll.h></span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include <limits.h></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include <sqlite3.h></span>
+<a name="l00041"></a>00041
+<a name="l00042"></a><a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">00042</a> <span class="preprocessor">#define PATH_SIZE PATH_MAX</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a><a class="code" href="structfds.html">00044</a> <span class="keyword">struct </span><a class="code" href="structfds.html">fds</a> {
+<a name="l00045"></a><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">00045</a> <span class="keywordtype">int</span> <a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>;
+<a name="l00046"></a><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">00046</a> <span class="keywordtype">int</span> <a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>;
+<a name="l00047"></a>00047 };
+<a name="l00048"></a>00048
+<a name="l00049"></a><a class="code" href="structcinfo.html">00049</a> <span class="keyword">struct </span><a class="code" href="structcinfo.html">cinfo</a> {
+<a name="l00050"></a><a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">00050</a> <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>;
+<a name="l00051"></a>00051 };
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="comment">/* info to be carried along lms_process() and lms_check() */</span>
+<a name="l00054"></a><a class="code" href="structpinfo.html">00054</a> <span class="keyword">struct </span><a class="code" href="structpinfo.html">pinfo</a> {
+<a name="l00055"></a><a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">00055</a> <span class="keyword">struct </span><a class="code" href="structcinfo.html">cinfo</a> <a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>;
+<a name="l00056"></a><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">00056</a> pid_t <a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>;
+<a name="l00057"></a><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">00057</a> <span class="keyword">struct </span><a class="code" href="structfds.html">fds</a> <a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>;
+<a name="l00058"></a><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">00058</a> <span class="keyword">struct </span><a class="code" href="structfds.html">fds</a> <a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>;
+<a name="l00059"></a><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">00059</a> <span class="keyword">struct </span>pollfd <a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>;
+<a name="l00060"></a>00060 };
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="comment">/* same as struct pinfo for single process versions */</span>
+<a name="l00063"></a><a class="code" href="structsinfo.html">00063</a> <span class="keyword">struct </span><a class="code" href="structsinfo.html">sinfo</a> {
+<a name="l00064"></a><a class="code" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">00064</a> <span class="keyword">struct </span><a class="code" href="structcinfo.html">cinfo</a> <a class="code" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">common</a>;
+<a name="l00065"></a><a class="code" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">00065</a> <span class="keyword">struct </span><a class="code" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">db</a> *<a class="code" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">db</a>;
+<a name="l00066"></a><a class="code" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">00066</a> <span class="keywordtype">void</span> **<a class="code" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">parser_match</a>;
+<a name="l00067"></a><a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">00067</a> <span class="keywordtype">int</span> <a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a>;
+<a name="l00068"></a>00068 };
+<a name="l00069"></a>00069
+<a name="l00070"></a><a class="code" href="structparser.html">00070</a> <span class="keyword">struct </span><a class="code" href="structparser.html">parser</a> {
+<a name="l00071"></a><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">00071</a> <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *<a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>;
+<a name="l00072"></a><a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">00072</a> <span class="keywordtype">void</span> *<a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a>;
+<a name="l00073"></a><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">00073</a> <span class="keywordtype">char</span> *<a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>;
+<a name="l00074"></a>00074 };
+<a name="l00075"></a>00075
+<a name="l00076"></a><a class="code" href="structlms.html">00076</a> <span class="keyword">struct </span><a class="code" href="structlms.html">lms</a> {
+<a name="l00077"></a><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">00077</a> <span class="keyword">struct </span><a class="code" href="structparser.html">parser</a> *<a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>;
+<a name="l00078"></a><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">00078</a> <span class="keywordtype">int</span> <a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>;
+<a name="l00079"></a><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">00079</a> <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *<a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a>;
+<a name="l00080"></a><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">00080</a> <span class="keywordtype">char</span> *<a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>;
+<a name="l00081"></a><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">00081</a> <span class="keywordtype">int</span> <a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>;
+<a name="l00082"></a>00082 <span class="keyword">struct </span>{
+<a name="l00083"></a><a class="code" href="structlms.html#94615d22fba40d580a8a0055d28221c4">00083</a> <a class="code" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> <a class="code" href="structlms.html#94615d22fba40d580a8a0055d28221c4">cb</a>;
+<a name="l00084"></a><a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">00084</a> <span class="keywordtype">void</span> *<a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a>;
+<a name="l00085"></a><a class="code" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">00085</a> <a class="code" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> <a class="code" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">free_data</a>;
+<a name="l00086"></a>00086 } <a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>;
+<a name="l00087"></a><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">00087</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>;
+<a name="l00088"></a><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">00088</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>:1;
+<a name="l00089"></a><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">00089</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a>:1;
+<a name="l00090"></a>00090 };
+<a name="l00091"></a>00091
+<a name="l00092"></a><a class="code" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">00092</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">process_file_callback_t</a>)(<span class="keyword">struct </span><a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keywordtype">int</span> base, <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *name);
+<a name="l00093"></a><a class="code" href="lightmediascanner__private_8h.html#818aa1ae6bb03151823bbd9b56bd0801">00093</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__private_8h.html#818aa1ae6bb03151823bbd9b56bd0801">check_row_callback_t</a>)(<span class="keywordtype">void</span> *db_ptr, <span class="keyword">struct </span><a class="code" href="structcinfo.html">cinfo</a> *info);
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lms_parser_del_int</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keywordtype">int</span> i) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00096"></a>00096 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lms_create_pipes</a>(<span class="keyword">struct</span> <a class="code" href="structpinfo.html">pinfo</a> *<a class="code" href="structpinfo.html">pinfo</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00097"></a>00097 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lms_close_pipes</a>(<span class="keyword">struct</span> <a class="code" href="structpinfo.html">pinfo</a> *<a class="code" href="structpinfo.html">pinfo</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00098"></a>00098 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a>(<span class="keyword">struct</span> <a class="code" href="structpinfo.html">pinfo</a> *<a class="code" href="structpinfo.html">pinfo</a>, <span class="keywordtype">int</span> (*work)(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *<a class="code" href="structfds.html">fds</a>)) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00099"></a>00099 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a>(<span class="keyword">struct</span> pinfo *pinfo, <span class="keywordtype">int</span> (*work)(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *<a class="code" href="structfds.html">fds</a>)) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00100"></a>00100 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave</a>(<span class="keyword">struct</span> pinfo *pinfo, <span class="keywordtype">int</span> (*finish)(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *<a class="code" href="structfds.html">fds</a>)) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00101"></a>00101
+<a name="l00102"></a>00102 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lms_parsers_setup</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00103"></a>00103 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lms_parsers_start</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00104"></a>00104 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00105"></a>00105 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lms_parsers_check_using</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keywordtype">void</span> **parser_match, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2, 3);
+<a name="l00106"></a>00106 <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lms_parsers_run</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db, <span class="keywordtype">void</span> **parser_match, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2, 3, 4);
+<a name="l00107"></a>00107
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109 <span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_PRIVATE_H_ */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_private.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_private.h File Reference</h1><code>#include "<a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>"</code><br>
+<code>#include "<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>"</code><br>
+<code>#include "<a class="el" href="lightmediascanner__charset__conv_8h-source.html">lightmediascanner_charset_conv.h</a>"</code><br>
+<code>#include <sys/types.h></code><br>
+<code>#include <poll.h></code><br>
+<code>#include <limits.h></code><br>
+<code>#include <sqlite3.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_private.h:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__private_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structfds.html">fds</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structcinfo.html">cinfo</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structpinfo.html">pinfo</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structsinfo.html">sinfo</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structparser.html">parser</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html">lms</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#c9783e2105f145aa71f541e0825707ed">_LIGHTMEDIASCANNER_PRIVATE_H_</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(...)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a> PATH_MAX</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">process_file_callback_t</a> )(struct <a class="el" href="structcinfo.html">cinfo</a> *info, int base, char *path, const char *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#818aa1ae6bb03151823bbd9b56bd0801">check_row_callback_t</a> )(void *db_ptr, struct <a class="el" href="structcinfo.html">cinfo</a> *info)</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#239fc535d2f20f09eeec9df86aa6ef9b">lms_parser_del_int</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, int i) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lms_create_pipes</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lms_close_pipes</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>, int(*work)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>)) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>, int(*work)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>)) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>, int(*finish)(const struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>)) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lms_parsers_setup</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, sqlite3 *db) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lms_parsers_start</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, sqlite3 *db) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, sqlite3 *db) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lms_parsers_check_using</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, void **parser_match, struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int int int int int int int int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lms_parsers_run</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, sqlite3 *db, void **parser_match, struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo) GNUC_NON_NULL(1</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="c9783e2105f145aa71f541e0825707ed"></a><!-- doxytag: member="lightmediascanner_private.h::_LIGHTMEDIASCANNER_PRIVATE_H_" ref="c9783e2105f145aa71f541e0825707ed" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _LIGHTMEDIASCANNER_PRIVATE_H_ 1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00022">22</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6fe68cac0abf3e2ca61141920414e93a"></a><!-- doxytag: member="lightmediascanner_private.h::GNUC_NON_NULL" ref="6fe68cac0abf3e2ca61141920414e93a" args="(...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_NON_NULL </td>
+ <td>(</td>
+ <td class="paramtype"> <em>...</em> </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00031">31</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="e78bf7e06bbba1c42b740fef55cf20f8"></a><!-- doxytag: member="lightmediascanner_private.h::PATH_SIZE" ref="e78bf7e06bbba1c42b740fef55cf20f8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PATH_SIZE PATH_MAX </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00042">42</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, and <a class="el" href="lightmediascanner__check_8c-source.html#l00949">lms_check_single_process()</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="818aa1ae6bb03151823bbd9b56bd0801"></a><!-- doxytag: member="lightmediascanner_private.h::check_row_callback_t" ref="818aa1ae6bb03151823bbd9b56bd0801" args=")(void *db_ptr, struct cinfo *info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="lightmediascanner__private_8h.html#818aa1ae6bb03151823bbd9b56bd0801">check_row_callback_t</a>)(void *db_ptr, struct <a class="el" href="structcinfo.html">cinfo</a> *info) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00093">93</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="ca9b2668fa08b18c630e16d1f7f702a7"></a><!-- doxytag: member="lightmediascanner_private.h::process_file_callback_t" ref="ca9b2668fa08b18c630e16d1f7f702a7" args=")(struct cinfo *info, int base, char *path, const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">process_file_callback_t</a>)(struct <a class="el" href="structcinfo.html">cinfo</a> *info, int base, char *path, const char *name) </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00092">92</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="8c1aa0a9d9bb796db279caeb97e04eed"></a><!-- doxytag: member="lightmediascanner_private.h::lms_close_pipes" ref="8c1aa0a9d9bb796db279caeb97e04eed" args="(struct pinfo *pinfo) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_close_pipes </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00596">596</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00057">pinfo::master</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00058">pinfo::slave</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01005">lms_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="a5952b7aae2fa795396a5a286c2ee4a4"></a><!-- doxytag: member="lightmediascanner_private.h::lms_create_pipes" ref="a5952b7aae2fa795396a5a286c2ee4a4" args="(struct pinfo *pinfo) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_create_pipes </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00607">607</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00057">pinfo::master</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00059">pinfo::poll</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00045">fds::r</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00058">pinfo::slave</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00046">fds::w</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01005">lms_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="439b3c62e96d472bdb2125a0a04d4fa6"></a><!-- doxytag: member="lightmediascanner_private.h::lms_create_slave" ref="439b3c62e96d472bdb2125a0a04d4fa6" args="(struct pinfo *pinfo, int(*work)(lms_t *lms, struct fds *fds)) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_create_slave </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int(*)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>) </td>
+ <td class="paramname"> <em>work</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01005">lms_process()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00694">lms_restart_slave()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="dd3853bb333e8bee167477933a058ae5"></a><!-- doxytag: member="lightmediascanner_private.h::lms_finish_slave" ref="dd3853bb333e8bee167477933a058ae5" args="(struct pinfo *pinfo, int(*finish)(const struct fds *fds)) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int lms_finish_slave </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int(*)(const struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>) </td>
+ <td class="paramname"> <em>finish</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01005">lms_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="239fc535d2f20f09eeec9df86aa6ef9b"></a><!-- doxytag: member="lightmediascanner_private.h::lms_parser_del_int" ref="239fc535d2f20f09eeec9df86aa6ef9b" args="(lms_t *lms, int i) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_parser_del_int </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> <em>i</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00294">294</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00334">lms_parser_del()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f92504ffd52b8b1d7d90b786af90d1ef"></a><!-- doxytag: member="lightmediascanner_private.h::lms_parsers_check_using" ref="f92504ffd52b8b1d7d90b786af90d1ef" args="(lms_t *lms, void **parser_match, struct lms_file_info *finfo) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int int int int lms_parsers_check_using </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void ** </td>
+ <td class="paramname"> <em>parser_match</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="74adcb264b3092f3ae9249de93f9130f"></a><!-- doxytag: member="lightmediascanner_private.h::lms_parsers_finish" ref="74adcb264b3092f3ae9249de93f9130f" args="(lms_t *lms, sqlite3 *db) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int int int lms_parsers_finish </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f61d9ef6ae2e576705bbd445db919e6c"></a><!-- doxytag: member="lightmediascanner_private.h::lms_parsers_run" ref="f61d9ef6ae2e576705bbd445db919e6c" args="(lms_t *lms, sqlite3 *db, void **parser_match, struct lms_file_info *finfo) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int int int int int lms_parsers_run </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void ** </td>
+ <td class="paramname"> <em>parser_match</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="028ef9d19863e8d0ebac1b84b1cb9174"></a><!-- doxytag: member="lightmediascanner_private.h::lms_parsers_setup" ref="028ef9d19863e8d0ebac1b84b1cb9174" args="(lms_t *lms, sqlite3 *db) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int lms_parsers_setup </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="2c1f40ac6080c682c2f71172cc76f7e0"></a><!-- doxytag: member="lightmediascanner_private.h::lms_parsers_start" ref="2c1f40ac6080c682c2f71172cc76f7e0" args="(lms_t *lms, sqlite3 *db) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int int int int lms_parsers_start </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="dd61370f42f0c32e3b9d5c86303c3c58"></a><!-- doxytag: member="lightmediascanner_private.h::lms_restart_slave" ref="dd61370f42f0c32e3b9d5c86303c3c58" args="(struct pinfo *pinfo, int(*work)(lms_t *lms, struct fds *fds)) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int int lms_restart_slave </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int(*)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>) </td>
+ <td class="paramname"> <em>work</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_private.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="src/lib/lightmediascanner.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html"];
+ Node1 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="src/lib/lightmediascanner_check.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__check_8c.html"];
+ Node1 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="src/lib/lightmediascanner_process.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__process_8c.html"];
+}
--- /dev/null
+321c443a6793dc8fa261fafa2e6e818a
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_private.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node3 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="poll.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="limits.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
--- /dev/null
+4c8a5273f93a6b473542884ff86f68fe
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_process.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_process.c</h1><a href="lightmediascanner__process_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include "config.h"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#endif</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span>
+<a name="l00025"></a><a class="code" href="lightmediascanner__process_8c.html#369266c24eacffb87046522897a570d5">00025</a> <span class="preprocessor">#define _GNU_SOURCE</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#include <sys/wait.h></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include <sys/stat.h></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include <unistd.h></span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include <dirent.h></span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include <signal.h></span>
+<a name="l00031"></a>00031
+<a name="l00032"></a>00032 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include <string.h></span>
+<a name="l00035"></a>00035
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="lightmediascanner_8h.html">lightmediascanner.h</a>"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__private_8h.html">lightmediascanner_private.h</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 <span class="keyword">struct </span>db {
+<a name="l00041"></a>00041 sqlite3 *handle;
+<a name="l00042"></a>00042 sqlite3_stmt *transaction_begin;
+<a name="l00043"></a>00043 sqlite3_stmt *transaction_commit;
+<a name="l00044"></a>00044 sqlite3_stmt *get_file_info;
+<a name="l00045"></a>00045 sqlite3_stmt *insert_file_info;
+<a name="l00046"></a>00046 sqlite3_stmt *update_file_info;
+<a name="l00047"></a>00047 sqlite3_stmt *delete_file_info;
+<a name="l00048"></a>00048 sqlite3_stmt *set_file_dtime;
+<a name="l00049"></a>00049 };
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 <span class="comment">/***********************************************************************</span>
+<a name="l00052"></a>00052 <span class="comment"> * Master-Slave communication.</span>
+<a name="l00053"></a>00053 <span class="comment"> ***********************************************************************/</span>
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00056"></a>00056 _master_send_path(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *master, <span class="keywordtype">int</span> plen, <span class="keywordtype">int</span> dlen, <span class="keyword">const</span> <span class="keywordtype">char</span> *p)
+<a name="l00057"></a>00057 {
+<a name="l00058"></a>00058 <span class="keywordtype">int</span> lengths[2];
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 lengths[0] = plen;
+<a name="l00061"></a>00061 lengths[1] = dlen;
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="keywordflow">if</span> (write(master-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>, lengths, <span class="keyword">sizeof</span>(lengths)) < 0) {
+<a name="l00064"></a>00064 perror(<span class="stringliteral">"write"</span>);
+<a name="l00065"></a>00065 <span class="keywordflow">return</span> -1;
+<a name="l00066"></a>00066 }
+<a name="l00067"></a>00067
+<a name="l00068"></a>00068 <span class="keywordflow">if</span> (write(master-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>, p, plen) < 0) {
+<a name="l00069"></a>00069 perror(<span class="stringliteral">"write"</span>);
+<a name="l00070"></a>00070 <span class="keywordflow">return</span> -1;
+<a name="l00071"></a>00071 }
+<a name="l00072"></a>00072
+<a name="l00073"></a>00073 <span class="keywordflow">return</span> 0;
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075
+<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00077"></a>00077 _master_send_finish(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *master)
+<a name="l00078"></a>00078 {
+<a name="l00079"></a>00079 <span class="keyword">const</span> <span class="keywordtype">int</span> lengths[2] = {-1, -1};
+<a name="l00080"></a>00080
+<a name="l00081"></a>00081 <span class="keywordflow">if</span> (write(master-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>, lengths, <span class="keyword">sizeof</span>(lengths)) < 0) {
+<a name="l00082"></a>00082 perror(<span class="stringliteral">"write"</span>);
+<a name="l00083"></a>00083 <span class="keywordflow">return</span> -1;
+<a name="l00084"></a>00084 }
+<a name="l00085"></a>00085 <span class="keywordflow">return</span> 0;
+<a name="l00086"></a>00086 }
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00089"></a>00089 _master_recv_reply(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *master, <span class="keyword">struct</span> pollfd *pfd, <span class="keywordtype">int</span> *reply, <span class="keywordtype">int</span> timeout)
+<a name="l00090"></a>00090 {
+<a name="l00091"></a>00091 <span class="keywordtype">int</span> r;
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093 r = poll(pfd, 1, timeout);
+<a name="l00094"></a>00094 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00095"></a>00095 perror(<span class="stringliteral">"poll"</span>);
+<a name="l00096"></a>00096 <span class="keywordflow">return</span> -1;
+<a name="l00097"></a>00097 }
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099 <span class="keywordflow">if</span> (r == 0)
+<a name="l00100"></a>00100 <span class="keywordflow">return</span> 1;
+<a name="l00101"></a>00101
+<a name="l00102"></a>00102 <span class="keywordflow">if</span> (read(master-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>, reply, <span class="keyword">sizeof</span>(*reply)) != <span class="keyword">sizeof</span>(*reply)) {
+<a name="l00103"></a>00103 perror(<span class="stringliteral">"read"</span>);
+<a name="l00104"></a>00104 <span class="keywordflow">return</span> -2;
+<a name="l00105"></a>00105 }
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <span class="keywordflow">return</span> 0;
+<a name="l00108"></a>00108 }
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00111"></a>00111 _slave_send_reply(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *slave, <span class="keywordtype">int</span> reply)
+<a name="l00112"></a>00112 {
+<a name="l00113"></a>00113 <span class="keywordflow">if</span> (write(slave-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>, &reply, <span class="keyword">sizeof</span>(reply)) == 0) {
+<a name="l00114"></a>00114 perror(<span class="stringliteral">"write"</span>);
+<a name="l00115"></a>00115 <span class="keywordflow">return</span> -1;
+<a name="l00116"></a>00116 }
+<a name="l00117"></a>00117 <span class="keywordflow">return</span> 0;
+<a name="l00118"></a>00118 }
+<a name="l00119"></a>00119
+<a name="l00120"></a>00120 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00121"></a>00121 _slave_recv_path(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *slave, <span class="keywordtype">int</span> *plen, <span class="keywordtype">int</span> *dlen, <span class="keywordtype">char</span> *path)
+<a name="l00122"></a>00122 {
+<a name="l00123"></a>00123 <span class="keywordtype">int</span> lengths[2], r;
+<a name="l00124"></a>00124
+<a name="l00125"></a>00125 r = read(slave-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>, lengths, <span class="keyword">sizeof</span>(lengths));
+<a name="l00126"></a>00126 <span class="keywordflow">if</span> (r != <span class="keyword">sizeof</span>(lengths)) {
+<a name="l00127"></a>00127 perror(<span class="stringliteral">"read"</span>);
+<a name="l00128"></a>00128 <span class="keywordflow">return</span> -1;
+<a name="l00129"></a>00129 }
+<a name="l00130"></a>00130 *plen = lengths[0];
+<a name="l00131"></a>00131 *dlen = lengths[1];
+<a name="l00132"></a>00132
+<a name="l00133"></a>00133 <span class="keywordflow">if</span> (*plen == -1)
+<a name="l00134"></a>00134 <span class="keywordflow">return</span> 0;
+<a name="l00135"></a>00135
+<a name="l00136"></a>00136 <span class="keywordflow">if</span> (*plen > <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>) {
+<a name="l00137"></a>00137 fprintf(stderr, <span class="stringliteral">"ERROR: path too long (%d/%d)\n"</span>, *plen, <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>);
+<a name="l00138"></a>00138 <span class="keywordflow">return</span> -2;
+<a name="l00139"></a>00139 }
+<a name="l00140"></a>00140
+<a name="l00141"></a>00141 r = read(slave-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>, path, *plen);
+<a name="l00142"></a>00142 <span class="keywordflow">if</span> (r != *plen) {
+<a name="l00143"></a>00143 fprintf(stderr, <span class="stringliteral">"ERROR: could not read whole path %d/%d\n"</span>, r, *plen);
+<a name="l00144"></a>00144 <span class="keywordflow">return</span> -3;
+<a name="l00145"></a>00145 }
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 path[*plen] = 0;
+<a name="l00148"></a>00148 <span class="keywordflow">return</span> 0;
+<a name="l00149"></a>00149 }
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151
+<a name="l00152"></a>00152 <span class="comment">/***********************************************************************</span>
+<a name="l00153"></a>00153 <span class="comment"> * Slave-side.</span>
+<a name="l00154"></a>00154 <span class="comment"> ***********************************************************************/</span>
+<a name="l00155"></a>00155
+<a name="l00156"></a>00156 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00157"></a>00157 _db_compile_all_stmts(<span class="keyword">struct</span> db *db)
+<a name="l00158"></a>00158 {
+<a name="l00159"></a>00159 sqlite3 *handle;
+<a name="l00160"></a>00160
+<a name="l00161"></a>00161 handle = db->handle;
+<a name="l00162"></a>00162 db->transaction_begin = <a class="code" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lms_db_compile_stmt_begin_transaction</a>(handle);
+<a name="l00163"></a>00163 <span class="keywordflow">if</span> (!db->transaction_begin)
+<a name="l00164"></a>00164 <span class="keywordflow">return</span> -1;
+<a name="l00165"></a>00165
+<a name="l00166"></a>00166 db->transaction_commit = <a class="code" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lms_db_compile_stmt_end_transaction</a>(handle);
+<a name="l00167"></a>00167 <span class="keywordflow">if</span> (!db->transaction_commit)
+<a name="l00168"></a>00168 <span class="keywordflow">return</span> -2;
+<a name="l00169"></a>00169
+<a name="l00170"></a>00170 db->get_file_info = <a class="code" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lms_db_compile_stmt_get_file_info</a>(handle);
+<a name="l00171"></a>00171 <span class="keywordflow">if</span> (!db->get_file_info)
+<a name="l00172"></a>00172 <span class="keywordflow">return</span> -4;
+<a name="l00173"></a>00173
+<a name="l00174"></a>00174 db->insert_file_info = <a class="code" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lms_db_compile_stmt_insert_file_info</a>(handle);
+<a name="l00175"></a>00175 <span class="keywordflow">if</span> (!db->insert_file_info)
+<a name="l00176"></a>00176 <span class="keywordflow">return</span> -5;
+<a name="l00177"></a>00177
+<a name="l00178"></a>00178 db->update_file_info = <a class="code" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lms_db_compile_stmt_update_file_info</a>(handle);
+<a name="l00179"></a>00179 <span class="keywordflow">if</span> (!db->update_file_info)
+<a name="l00180"></a>00180 <span class="keywordflow">return</span> -6;
+<a name="l00181"></a>00181
+<a name="l00182"></a>00182 db->delete_file_info = <a class="code" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lms_db_compile_stmt_delete_file_info</a>(handle);
+<a name="l00183"></a>00183 <span class="keywordflow">if</span> (!db->delete_file_info)
+<a name="l00184"></a>00184 <span class="keywordflow">return</span> -6;
+<a name="l00185"></a>00185
+<a name="l00186"></a>00186 db->set_file_dtime = <a class="code" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lms_db_compile_stmt_set_file_dtime</a>(handle);
+<a name="l00187"></a>00187 <span class="keywordflow">if</span> (!db->set_file_dtime)
+<a name="l00188"></a>00188 <span class="keywordflow">return</span> -7;
+<a name="l00189"></a>00189
+<a name="l00190"></a>00190 <span class="keywordflow">return</span> 0;
+<a name="l00191"></a>00191 }
+<a name="l00192"></a>00192
+<a name="l00193"></a>00193 <span class="keyword">static</span> <span class="keyword">struct </span>db *
+<a name="l00194"></a>00194 _db_open(<span class="keyword">const</span> <span class="keywordtype">char</span> *db_path)
+<a name="l00195"></a>00195 {
+<a name="l00196"></a>00196 <span class="keyword">struct </span>db *db;
+<a name="l00197"></a>00197
+<a name="l00198"></a>00198 db = calloc(1, <span class="keyword">sizeof</span>(*db));
+<a name="l00199"></a>00199 <span class="keywordflow">if</span> (!db) {
+<a name="l00200"></a>00200 perror(<span class="stringliteral">"calloc"</span>);
+<a name="l00201"></a>00201 <span class="keywordflow">return</span> NULL;
+<a name="l00202"></a>00202 }
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 <span class="keywordflow">if</span> (sqlite3_open(db_path, &db->handle) != SQLITE_OK) {
+<a name="l00205"></a>00205 fprintf(stderr, <span class="stringliteral">"ERROR: could not open DB \"%s\": %s\n"</span>,
+<a name="l00206"></a>00206 db_path, sqlite3_errmsg(db->handle));
+<a name="l00207"></a>00207 <span class="keywordflow">goto</span> error;
+<a name="l00208"></a>00208 }
+<a name="l00209"></a>00209
+<a name="l00210"></a>00210 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lms_db_create_core_tables_if_required</a>(db->handle) != 0) {
+<a name="l00211"></a>00211 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup tables and indexes.\n"</span>);
+<a name="l00212"></a>00212 <span class="keywordflow">goto</span> error;
+<a name="l00213"></a>00213 }
+<a name="l00214"></a>00214
+<a name="l00215"></a>00215 <span class="keywordflow">return</span> db;
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 error:
+<a name="l00218"></a>00218 sqlite3_close(db->handle);
+<a name="l00219"></a>00219 free(db);
+<a name="l00220"></a>00220 <span class="keywordflow">return</span> NULL;
+<a name="l00221"></a>00221 }
+<a name="l00222"></a>00222
+<a name="l00223"></a>00223 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00224"></a>00224 _db_close(<span class="keyword">struct</span> db *db)
+<a name="l00225"></a>00225 {
+<a name="l00226"></a>00226 <span class="keywordflow">if</span> (db->transaction_begin)
+<a name="l00227"></a>00227 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->transaction_begin, <span class="stringliteral">"transaction_begin"</span>);
+<a name="l00228"></a>00228
+<a name="l00229"></a>00229 <span class="keywordflow">if</span> (db->transaction_commit)
+<a name="l00230"></a>00230 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->transaction_commit, <span class="stringliteral">"transaction_commit"</span>);
+<a name="l00231"></a>00231
+<a name="l00232"></a>00232 <span class="keywordflow">if</span> (db->get_file_info)
+<a name="l00233"></a>00233 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->get_file_info, <span class="stringliteral">"get_file_info"</span>);
+<a name="l00234"></a>00234
+<a name="l00235"></a>00235 <span class="keywordflow">if</span> (db->insert_file_info)
+<a name="l00236"></a>00236 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->insert_file_info, <span class="stringliteral">"insert_file_info"</span>);
+<a name="l00237"></a>00237
+<a name="l00238"></a>00238 <span class="keywordflow">if</span> (db->update_file_info)
+<a name="l00239"></a>00239 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->update_file_info, <span class="stringliteral">"update_file_info"</span>);
+<a name="l00240"></a>00240
+<a name="l00241"></a>00241 <span class="keywordflow">if</span> (db->delete_file_info)
+<a name="l00242"></a>00242 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->delete_file_info, <span class="stringliteral">"delete_file_info"</span>);
+<a name="l00243"></a>00243
+<a name="l00244"></a>00244 <span class="keywordflow">if</span> (db->set_file_dtime)
+<a name="l00245"></a>00245 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(db->set_file_dtime, <span class="stringliteral">"set_file_dtime"</span>);
+<a name="l00246"></a>00246
+<a name="l00247"></a>00247 <span class="keywordflow">if</span> (sqlite3_close(db->handle) != SQLITE_OK) {
+<a name="l00248"></a>00248 fprintf(stderr, <span class="stringliteral">"ERROR: clould not close DB: %s\n"</span>,
+<a name="l00249"></a>00249 sqlite3_errmsg(db->handle));
+<a name="l00250"></a>00250 <span class="keywordflow">return</span> -1;
+<a name="l00251"></a>00251 }
+<a name="l00252"></a>00252 free(db);
+<a name="l00253"></a>00253
+<a name="l00254"></a>00254 <span class="keywordflow">return</span> 0;
+<a name="l00255"></a>00255 }
+<a name="l00256"></a>00256
+<a name="l00257"></a>00257 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00258"></a>00258 _retrieve_file_status(<span class="keyword">struct</span> db *db, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00259"></a>00259 {
+<a name="l00260"></a>00260 <span class="keyword">struct </span>stat st;
+<a name="l00261"></a>00261 <span class="keywordtype">int</span> r;
+<a name="l00262"></a>00262
+<a name="l00263"></a>00263 <span class="keywordflow">if</span> (stat(finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>, &st) != 0) {
+<a name="l00264"></a>00264 perror(<span class="stringliteral">"stat"</span>);
+<a name="l00265"></a>00265 <span class="keywordflow">return</span> -1;
+<a name="l00266"></a>00266 }
+<a name="l00267"></a>00267
+<a name="l00268"></a>00268 r = <a class="code" href="lightmediascanner__db__common_8c.html#c0b7cf0b2eb0f55fbf8a4103bc9569d1">lms_db_get_file_info</a>(db->get_file_info, finfo);
+<a name="l00269"></a>00269 <span class="keywordflow">if</span> (r == 0) {
+<a name="l00270"></a>00270 <span class="keywordflow">if</span> (st.st_mtime <= finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> && finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> == st.st_size)
+<a name="l00271"></a>00271 <span class="keywordflow">return</span> 0;
+<a name="l00272"></a>00272 <span class="keywordflow">else</span> {
+<a name="l00273"></a>00273 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = st.st_mtime;
+<a name="l00274"></a>00274 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = st.st_size;
+<a name="l00275"></a>00275 <span class="keywordflow">return</span> 1;
+<a name="l00276"></a>00276 }
+<a name="l00277"></a>00277 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == 1) {
+<a name="l00278"></a>00278 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = st.st_mtime;
+<a name="l00279"></a>00279 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = st.st_size;
+<a name="l00280"></a>00280 <span class="keywordflow">return</span> 1;
+<a name="l00281"></a>00281 } <span class="keywordflow">else</span>
+<a name="l00282"></a>00282 <span class="keywordflow">return</span> -2;
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284
+<a name="l00285"></a>00285 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00286"></a>00286 _ctxt_init(<span class="keyword">struct</span> <a class="code" href="structlms__context.html">lms_context</a> *ctxt, <span class="keyword">const</span> <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db)
+<a name="l00287"></a>00287 {
+<a name="l00288"></a>00288 ctxt-><a class="code" href="structlms__context.html#a5ce50393bbe62f6357934a1d9ce5a61">cs_conv</a> = lms-><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a>;
+<a name="l00289"></a>00289 ctxt-><a class="code" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">db</a> = db;
+<a name="l00290"></a>00290 }
+<a name="l00291"></a>00291
+<a name="l00292"></a>00292 <span class="keywordtype">int</span>
+<a name="l00293"></a><a class="code" href="lightmediascanner__process_8c.html#c321bebfc5c24cbbac30031202c460e9">00293</a> <a class="code" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lms_parsers_setup</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db)
+<a name="l00294"></a>00294 {
+<a name="l00295"></a>00295 <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> ctxt;
+<a name="l00296"></a>00296 <span class="keywordtype">int</span> i;
+<a name="l00297"></a>00297
+<a name="l00298"></a>00298 _ctxt_init(&ctxt, lms, db);
+<a name="l00299"></a>00299
+<a name="l00300"></a>00300 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++) {
+<a name="l00301"></a>00301 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *plugin;
+<a name="l00302"></a>00302 <span class="keywordtype">int</span> r;
+<a name="l00303"></a>00303
+<a name="l00304"></a>00304 plugin = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>[i].<a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>;
+<a name="l00305"></a>00305 r = plugin-><a class="code" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">setup</a>(plugin, &ctxt);
+<a name="l00306"></a>00306 <span class="keywordflow">if</span> (r != 0) {
+<a name="l00307"></a>00307 fprintf(stderr, <span class="stringliteral">"ERROR: parser \"%s\" failed to setup: %d.\n"</span>,
+<a name="l00308"></a>00308 plugin-><a class="code" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">name</a>, r);
+<a name="l00309"></a>00309 plugin-><a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">finish</a>(plugin, &ctxt);
+<a name="l00310"></a>00310 <a class="code" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lms_parser_del_int</a>(lms, i);
+<a name="l00311"></a>00311 i--; <span class="comment">/* cancel i++ */</span>
+<a name="l00312"></a>00312 }
+<a name="l00313"></a>00313 }
+<a name="l00314"></a>00314
+<a name="l00315"></a>00315 <span class="keywordflow">return</span> 0;
+<a name="l00316"></a>00316 }
+<a name="l00317"></a>00317
+<a name="l00318"></a>00318 <span class="keywordtype">int</span>
+<a name="l00319"></a><a class="code" href="lightmediascanner__process_8c.html#6e02f78f026b2ad282184476dca13e45">00319</a> <a class="code" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lms_parsers_start</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db)
+<a name="l00320"></a>00320 {
+<a name="l00321"></a>00321 <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> ctxt;
+<a name="l00322"></a>00322 <span class="keywordtype">int</span> i;
+<a name="l00323"></a>00323
+<a name="l00324"></a>00324 _ctxt_init(&ctxt, lms, db);
+<a name="l00325"></a>00325
+<a name="l00326"></a>00326 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++) {
+<a name="l00327"></a>00327 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *plugin;
+<a name="l00328"></a>00328 <span class="keywordtype">int</span> r;
+<a name="l00329"></a>00329
+<a name="l00330"></a>00330 plugin = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>[i].<a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>;
+<a name="l00331"></a>00331 r = plugin-><a class="code" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">start</a>(plugin, &ctxt);
+<a name="l00332"></a>00332 <span class="keywordflow">if</span> (r != 0) {
+<a name="l00333"></a>00333 fprintf(stderr, <span class="stringliteral">"ERROR: parser \"%s\" failed to start: %d.\n"</span>,
+<a name="l00334"></a>00334 plugin-><a class="code" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">name</a>, r);
+<a name="l00335"></a>00335 plugin-><a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">finish</a>(plugin, &ctxt);
+<a name="l00336"></a>00336 <a class="code" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lms_parser_del_int</a>(lms, i);
+<a name="l00337"></a>00337 i--; <span class="comment">/* cancel i++ */</span>
+<a name="l00338"></a>00338 }
+<a name="l00339"></a>00339 }
+<a name="l00340"></a>00340
+<a name="l00341"></a>00341 <span class="keywordflow">return</span> 0;
+<a name="l00342"></a>00342 }
+<a name="l00343"></a>00343
+<a name="l00344"></a>00344 <span class="keywordtype">int</span>
+<a name="l00345"></a><a class="code" href="lightmediascanner__process_8c.html#d002464442b08826a1da920bdf4957b7">00345</a> <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db)
+<a name="l00346"></a>00346 {
+<a name="l00347"></a>00347 <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> ctxt;
+<a name="l00348"></a>00348 <span class="keywordtype">int</span> i;
+<a name="l00349"></a>00349
+<a name="l00350"></a>00350 _ctxt_init(&ctxt, lms, db);
+<a name="l00351"></a>00351
+<a name="l00352"></a>00352 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++) {
+<a name="l00353"></a>00353 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *plugin;
+<a name="l00354"></a>00354 <span class="keywordtype">int</span> r;
+<a name="l00355"></a>00355
+<a name="l00356"></a>00356 plugin = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>[i].<a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>;
+<a name="l00357"></a>00357 r = plugin-><a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">finish</a>(plugin, &ctxt);
+<a name="l00358"></a>00358 <span class="keywordflow">if</span> (r != 0)
+<a name="l00359"></a>00359 fprintf(stderr, <span class="stringliteral">"ERROR: parser \"%s\" failed to finish: %d.\n"</span>,
+<a name="l00360"></a>00360 plugin-><a class="code" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">name</a>, r);
+<a name="l00361"></a>00361 }
+<a name="l00362"></a>00362
+<a name="l00363"></a>00363 <span class="keywordflow">return</span> 0;
+<a name="l00364"></a>00364 }
+<a name="l00365"></a>00365
+<a name="l00366"></a>00366 <span class="keywordtype">int</span>
+<a name="l00367"></a><a class="code" href="lightmediascanner__process_8c.html#f2e95cea50ce24774d2f5ed7d8c8f41c">00367</a> <a class="code" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lms_parsers_check_using</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keywordtype">void</span> **parser_match, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00368"></a>00368 {
+<a name="l00369"></a>00369 <span class="keywordtype">int</span> used, i;
+<a name="l00370"></a>00370
+<a name="l00371"></a>00371 used = 0;
+<a name="l00372"></a>00372 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++) {
+<a name="l00373"></a>00373 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *plugin;
+<a name="l00374"></a>00374 <span class="keywordtype">void</span> *r;
+<a name="l00375"></a>00375
+<a name="l00376"></a>00376 plugin = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>[i].<a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>;
+<a name="l00377"></a>00377 r = plugin-><a class="code" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">match</a>(plugin, finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>, finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>, finfo-><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a>);
+<a name="l00378"></a>00378 parser_match[i] = r;
+<a name="l00379"></a>00379 <span class="keywordflow">if</span> (r)
+<a name="l00380"></a>00380 used = 1;
+<a name="l00381"></a>00381 }
+<a name="l00382"></a>00382
+<a name="l00383"></a>00383 <span class="keywordflow">return</span> used;
+<a name="l00384"></a>00384 }
+<a name="l00385"></a>00385
+<a name="l00386"></a>00386 <span class="keywordtype">int</span>
+<a name="l00387"></a><a class="code" href="lightmediascanner__process_8c.html#4ab78dfbf29822d91472d18dd7424e77">00387</a> <a class="code" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lms_parsers_run</a>(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, sqlite3 *db, <span class="keywordtype">void</span> **parser_match, <span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00388"></a>00388 {
+<a name="l00389"></a>00389 <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> ctxt;
+<a name="l00390"></a>00390 <span class="keywordtype">int</span> i, failed, available;
+<a name="l00391"></a>00391
+<a name="l00392"></a>00392 _ctxt_init(&ctxt, lms, db);
+<a name="l00393"></a>00393
+<a name="l00394"></a>00394 failed = 0;
+<a name="l00395"></a>00395 available = 0;
+<a name="l00396"></a>00396 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++) {
+<a name="l00397"></a>00397 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *plugin;
+<a name="l00398"></a>00398
+<a name="l00399"></a>00399 plugin = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>[i].<a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>;
+<a name="l00400"></a>00400 <span class="keywordflow">if</span> (parser_match[i]) {
+<a name="l00401"></a>00401 <span class="keywordtype">int</span> r;
+<a name="l00402"></a>00402
+<a name="l00403"></a>00403 available++;
+<a name="l00404"></a>00404 r = plugin-><a class="code" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">parse</a>(plugin, &ctxt, finfo, parser_match[i]);
+<a name="l00405"></a>00405 <span class="keywordflow">if</span> (r != 0)
+<a name="l00406"></a>00406 failed++;
+<a name="l00407"></a>00407 }
+<a name="l00408"></a>00408 }
+<a name="l00409"></a>00409
+<a name="l00410"></a>00410 <span class="keywordflow">if</span> (!failed)
+<a name="l00411"></a>00411 <span class="keywordflow">return</span> 0;
+<a name="l00412"></a>00412 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (failed == available)
+<a name="l00413"></a>00413 <span class="keywordflow">return</span> -1;
+<a name="l00414"></a>00414 <span class="keywordflow">else</span>
+<a name="l00415"></a>00415 <span class="keywordflow">return</span> 1; <span class="comment">/* non critical */</span>
+<a name="l00416"></a>00416 }
+<a name="l00417"></a>00417
+<a name="l00418"></a>00418 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00419"></a>00419 _db_and_parsers_setup(<a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keyword">struct</span> db **db_ret, <span class="keywordtype">void</span> ***parser_match_ret)
+<a name="l00420"></a>00420 {
+<a name="l00421"></a>00421 <span class="keywordtype">void</span> **parser_match;
+<a name="l00422"></a>00422 <span class="keyword">struct </span>db *db;
+<a name="l00423"></a>00423 <span class="keywordtype">int</span> r = 0;
+<a name="l00424"></a>00424
+<a name="l00425"></a>00425 db = _db_open(lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00426"></a>00426 <span class="keywordflow">if</span> (!db) {
+<a name="l00427"></a>00427 r = -1;
+<a name="l00428"></a>00428 <span class="keywordflow">return</span> r;
+<a name="l00429"></a>00429 }
+<a name="l00430"></a>00430
+<a name="l00431"></a>00431 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lms_parsers_setup</a>(lms, db->handle) != 0) {
+<a name="l00432"></a>00432 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup parsers.\n"</span>);
+<a name="l00433"></a>00433 r = -2;
+<a name="l00434"></a>00434 <span class="keywordflow">goto</span> err;
+<a name="l00435"></a>00435 }
+<a name="l00436"></a>00436
+<a name="l00437"></a>00437 <span class="keywordflow">if</span> (_db_compile_all_stmts(db) != 0) {
+<a name="l00438"></a>00438 fprintf(stderr, <span class="stringliteral">"ERROR: could not compile statements.\n"</span>);
+<a name="l00439"></a>00439 r = -3;
+<a name="l00440"></a>00440 <span class="keywordflow">goto</span> err;
+<a name="l00441"></a>00441 }
+<a name="l00442"></a>00442
+<a name="l00443"></a>00443 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lms_parsers_start</a>(lms, db->handle) != 0) {
+<a name="l00444"></a>00444 fprintf(stderr, <span class="stringliteral">"ERROR: could not start parsers.\n"</span>);
+<a name="l00445"></a>00445 r = -4;
+<a name="l00446"></a>00446 <span class="keywordflow">goto</span> err;
+<a name="l00447"></a>00447 }
+<a name="l00448"></a>00448 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> < 1) {
+<a name="l00449"></a>00449 fprintf(stderr, <span class="stringliteral">"ERROR: no parser could be started, exit.\n"</span>);
+<a name="l00450"></a>00450 r = -5;
+<a name="l00451"></a>00451 <span class="keywordflow">goto</span> err;
+<a name="l00452"></a>00452 }
+<a name="l00453"></a>00453
+<a name="l00454"></a>00454 parser_match = malloc(lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> * <span class="keyword">sizeof</span>(*parser_match));
+<a name="l00455"></a>00455 <span class="keywordflow">if</span> (!parser_match) {
+<a name="l00456"></a>00456 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00457"></a>00457 r = -6;
+<a name="l00458"></a>00458 <span class="keywordflow">goto</span> err;
+<a name="l00459"></a>00459 }
+<a name="l00460"></a>00460
+<a name="l00461"></a>00461 *parser_match_ret = parser_match;
+<a name="l00462"></a>00462 *db_ret = db;
+<a name="l00463"></a>00463 <span class="keywordflow">return</span> r;
+<a name="l00464"></a>00464
+<a name="l00465"></a>00465 err:
+<a name="l00466"></a>00466 <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(lms, db->handle);
+<a name="l00467"></a>00467 _db_close(db);
+<a name="l00468"></a>00468 <span class="keywordflow">return</span> r;
+<a name="l00469"></a>00469 }
+<a name="l00470"></a>00470
+<a name="l00471"></a>00471 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00472"></a>00472 _db_and_parsers_process_file(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">struct</span> db *db, <span class="keywordtype">void</span> **parser_match, <span class="keywordtype">char</span> *path, <span class="keywordtype">int</span> path_len, <span class="keywordtype">int</span> path_base)
+<a name="l00473"></a>00473 {
+<a name="l00474"></a>00474 <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> finfo;
+<a name="l00475"></a>00475 <span class="keywordtype">int</span> used, r;
+<a name="l00476"></a>00476
+<a name="l00477"></a>00477 finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a> = path;
+<a name="l00478"></a>00478 finfo.<a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> = path_len;
+<a name="l00479"></a>00479 finfo.<a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a> = path_base;
+<a name="l00480"></a>00480
+<a name="l00481"></a>00481 r = _retrieve_file_status(db, &finfo);
+<a name="l00482"></a>00482 <span class="keywordflow">if</span> (r == 0) {
+<a name="l00483"></a>00483 <span class="keywordflow">if</span> (finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>) {
+<a name="l00484"></a>00484 finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = 0;
+<a name="l00485"></a>00485 <a class="code" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lms_db_set_file_dtime</a>(db->set_file_dtime, &finfo);
+<a name="l00486"></a>00486 }
+<a name="l00487"></a>00487 <span class="keywordflow">return</span> r;
+<a name="l00488"></a>00488 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r < 0) {
+<a name="l00489"></a>00489 fprintf(stderr, <span class="stringliteral">"ERROR: could not detect file status.\n"</span>);
+<a name="l00490"></a>00490 <span class="keywordflow">return</span> r;
+<a name="l00491"></a>00491 }
+<a name="l00492"></a>00492
+<a name="l00493"></a>00493 used = <a class="code" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lms_parsers_check_using</a>(lms, parser_match, &finfo);
+<a name="l00494"></a>00494 <span class="keywordflow">if</span> (!used)
+<a name="l00495"></a>00495 <span class="keywordflow">return</span> 2;
+<a name="l00496"></a>00496
+<a name="l00497"></a>00497 finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = 0;
+<a name="l00498"></a>00498 <span class="keywordflow">if</span> (finfo.<a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> > 0)
+<a name="l00499"></a>00499 r = <a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lms_db_update_file_info</a>(db->update_file_info, &finfo);
+<a name="l00500"></a>00500 <span class="keywordflow">else</span>
+<a name="l00501"></a>00501 r = <a class="code" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">lms_db_insert_file_info</a>(db->insert_file_info, &finfo);
+<a name="l00502"></a>00502 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00503"></a>00503 fprintf(stderr, <span class="stringliteral">"ERROR: could not register path in DB\n"</span>);
+<a name="l00504"></a>00504 <span class="keywordflow">return</span> r;
+<a name="l00505"></a>00505 }
+<a name="l00506"></a>00506
+<a name="l00507"></a>00507 r = <a class="code" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lms_parsers_run</a>(lms, db->handle, parser_match, &finfo);
+<a name="l00508"></a>00508 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00509"></a>00509 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00510"></a>00510 getpid(), finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>);
+<a name="l00511"></a>00511 <a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lms_db_delete_file_info</a>(db->delete_file_info, &finfo);
+<a name="l00512"></a>00512 }
+<a name="l00513"></a>00513
+<a name="l00514"></a>00514 <span class="keywordflow">return</span> r;
+<a name="l00515"></a>00515 }
+<a name="l00516"></a>00516
+<a name="l00517"></a>00517 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00518"></a>00518 _slave_work(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *<a class="code" href="structfds.html">fds</a>)
+<a name="l00519"></a>00519 {
+<a name="l00520"></a>00520 <span class="keywordtype">int</span> r, len, <a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a>, counter;
+<a name="l00521"></a>00521 <span class="keywordtype">char</span> path[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>];
+<a name="l00522"></a>00522 <span class="keywordtype">void</span> **parser_match;
+<a name="l00523"></a>00523 <span class="keyword">struct </span>db *db;
+<a name="l00524"></a>00524
+<a name="l00525"></a>00525 r = _db_and_parsers_setup(lms, &db, &parser_match);
+<a name="l00526"></a>00526 <span class="keywordflow">if</span> (r < 0)
+<a name="l00527"></a>00527 <span class="keywordflow">return</span> r;
+<a name="l00528"></a>00528
+<a name="l00529"></a>00529 counter = 0;
+<a name="l00530"></a>00530 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00531"></a>00531
+<a name="l00532"></a>00532 <span class="keywordflow">while</span> (((r = _slave_recv_path(fds, &len, &base, path)) == 0) && len > 0) {
+<a name="l00533"></a>00533 r = _db_and_parsers_process_file(
+<a name="l00534"></a>00534 lms, db, parser_match, path, len, base);
+<a name="l00535"></a>00535
+<a name="l00536"></a>00536 _slave_send_reply(fds, r);
+<a name="l00537"></a>00537 counter++;
+<a name="l00538"></a>00538 <span class="keywordflow">if</span> (counter > lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>) {
+<a name="l00539"></a>00539 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00540"></a>00540 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00541"></a>00541 counter = 0;
+<a name="l00542"></a>00542 }
+<a name="l00543"></a>00543 }
+<a name="l00544"></a>00544
+<a name="l00545"></a>00545 free(parser_match);
+<a name="l00546"></a>00546 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00547"></a>00547 <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(lms, db->handle);
+<a name="l00548"></a>00548 _db_close(db);
+<a name="l00549"></a>00549
+<a name="l00550"></a>00550 <span class="keywordflow">return</span> r;
+<a name="l00551"></a>00551 }
+<a name="l00552"></a>00552
+<a name="l00553"></a>00553
+<a name="l00554"></a>00554 <span class="comment">/***********************************************************************</span>
+<a name="l00555"></a>00555 <span class="comment"> * Master-side.</span>
+<a name="l00556"></a>00556 <span class="comment"> ***********************************************************************/</span>
+<a name="l00557"></a>00557
+<a name="l00558"></a>00558 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00559"></a>00559 _consume_garbage(<span class="keyword">struct</span> pollfd *pfd)
+<a name="l00560"></a>00560 {
+<a name="l00561"></a>00561 <span class="keywordtype">int</span> r;
+<a name="l00562"></a>00562
+<a name="l00563"></a>00563 <span class="keywordflow">while</span> ((r = poll(pfd, 1, 0)) > 0) {
+<a name="l00564"></a>00564 <span class="keywordflow">if</span> (pfd->revents & (POLLERR | POLLHUP | POLLNVAL))
+<a name="l00565"></a>00565 <span class="keywordflow">return</span> 0;
+<a name="l00566"></a>00566 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfd->revents & POLLIN) {
+<a name="l00567"></a>00567 <span class="keywordtype">char</span> c;
+<a name="l00568"></a>00568
+<a name="l00569"></a>00569 read(pfd->fd, &c, <span class="keyword">sizeof</span>(c));
+<a name="l00570"></a>00570 }
+<a name="l00571"></a>00571 }
+<a name="l00572"></a>00572
+<a name="l00573"></a>00573 <span class="keywordflow">return</span> r;
+<a name="l00574"></a>00574 }
+<a name="l00575"></a>00575
+<a name="l00576"></a>00576 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00577"></a>00577 _close_fds(<span class="keyword">struct</span> fds *fds)
+<a name="l00578"></a>00578 {
+<a name="l00579"></a>00579 <span class="keywordtype">int</span> r;
+<a name="l00580"></a>00580
+<a name="l00581"></a>00581 r = 0;
+<a name="l00582"></a>00582 <span class="keywordflow">if</span> (close(fds-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>) != 0) {
+<a name="l00583"></a>00583 r--;
+<a name="l00584"></a>00584 perror(<span class="stringliteral">"close"</span>);
+<a name="l00585"></a>00585 }
+<a name="l00586"></a>00586
+<a name="l00587"></a>00587 <span class="keywordflow">if</span> (close(fds-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>) != 0) {
+<a name="l00588"></a>00588 r--;
+<a name="l00589"></a>00589 perror(<span class="stringliteral">"close"</span>);
+<a name="l00590"></a>00590 }
+<a name="l00591"></a>00591
+<a name="l00592"></a>00592 <span class="keywordflow">return</span> r;
+<a name="l00593"></a>00593 }
+<a name="l00594"></a>00594
+<a name="l00595"></a>00595 <span class="keywordtype">int</span>
+<a name="l00596"></a><a class="code" href="lightmediascanner__process_8c.html#6b68b00b80a98a178c7d69b962267a11">00596</a> <a class="code" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lms_close_pipes</a>(<span class="keyword">struct</span> <a class="code" href="structpinfo.html">pinfo</a> *<a class="code" href="structpinfo.html">pinfo</a>)
+<a name="l00597"></a>00597 {
+<a name="l00598"></a>00598 <span class="keywordtype">int</span> r;
+<a name="l00599"></a>00599
+<a name="l00600"></a>00600 r = _close_fds(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>);
+<a name="l00601"></a>00601 r += _close_fds(&pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>);
+<a name="l00602"></a>00602
+<a name="l00603"></a>00603 <span class="keywordflow">return</span> r;
+<a name="l00604"></a>00604 }
+<a name="l00605"></a>00605
+<a name="l00606"></a>00606 <span class="keywordtype">int</span>
+<a name="l00607"></a><a class="code" href="lightmediascanner__process_8c.html#c2e1320b9770e0f522451b13f82efc2b">00607</a> <a class="code" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lms_create_pipes</a>(<span class="keyword">struct</span> <a class="code" href="structpinfo.html">pinfo</a> *<a class="code" href="structpinfo.html">pinfo</a>)
+<a name="l00608"></a>00608 {
+<a name="l00609"></a>00609 <span class="keywordtype">int</span> fds[2];
+<a name="l00610"></a>00610
+<a name="l00611"></a>00611 <span class="keywordflow">if</span> (pipe(fds) != 0) {
+<a name="l00612"></a>00612 perror(<span class="stringliteral">"pipe"</span>);
+<a name="l00613"></a>00613 <span class="keywordflow">return</span> -1;
+<a name="l00614"></a>00614 }
+<a name="l00615"></a>00615 pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>.<a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a> = fds[0];
+<a name="l00616"></a>00616 pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>.<a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a> = fds[1];
+<a name="l00617"></a>00617
+<a name="l00618"></a>00618 <span class="keywordflow">if</span> (pipe(fds) != 0) {
+<a name="l00619"></a>00619 perror(<span class="stringliteral">"pipe"</span>);
+<a name="l00620"></a>00620 close(pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>.<a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>);
+<a name="l00621"></a>00621 close(pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>.<a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>);
+<a name="l00622"></a>00622 <span class="keywordflow">return</span> -1;
+<a name="l00623"></a>00623 }
+<a name="l00624"></a>00624 pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>.<a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a> = fds[0];
+<a name="l00625"></a>00625 pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>.<a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a> = fds[1];
+<a name="l00626"></a>00626
+<a name="l00627"></a>00627 pinfo-><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>.fd = pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>.<a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>;
+<a name="l00628"></a>00628 pinfo-><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>.events = POLLIN;
+<a name="l00629"></a>00629
+<a name="l00630"></a>00630 <span class="keywordflow">return</span> 0;
+<a name="l00631"></a>00631 }
+<a name="l00632"></a>00632
+<a name="l00633"></a>00633 <span class="keywordtype">int</span>
+<a name="l00634"></a><a class="code" href="lightmediascanner__process_8c.html#e92fe8fe90d93d5ad9a42387a4b2fc6e">00634</a> <a class="code" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a>(<span class="keyword">struct</span> <a class="code" href="structpinfo.html">pinfo</a> *<a class="code" href="structpinfo.html">pinfo</a>, <span class="keywordtype">int</span> (*work)(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">struct</span> fds *fds))
+<a name="l00635"></a>00635 {
+<a name="l00636"></a>00636 <span class="keywordtype">int</span> r;
+<a name="l00637"></a>00637
+<a name="l00638"></a>00638 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> = fork();
+<a name="l00639"></a>00639 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> == -1) {
+<a name="l00640"></a>00640 perror(<span class="stringliteral">"fork"</span>);
+<a name="l00641"></a>00641 <span class="keywordflow">return</span> -1;
+<a name="l00642"></a>00642 }
+<a name="l00643"></a>00643
+<a name="l00644"></a>00644 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> > 0)
+<a name="l00645"></a>00645 <span class="keywordflow">return</span> 0;
+<a name="l00646"></a>00646
+<a name="l00647"></a>00647 _close_fds(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>);
+<a name="l00648"></a>00648 nice(19);
+<a name="l00649"></a>00649 r = work(pinfo-><a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>, &pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>);
+<a name="l00650"></a>00650 <a class="code" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lms_free</a>(pinfo-><a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>);
+<a name="l00651"></a>00651 _exit(r);
+<a name="l00652"></a>00652 <span class="keywordflow">return</span> r; <span class="comment">/* shouldn't reach anyway... */</span>
+<a name="l00653"></a>00653 }
+<a name="l00654"></a>00654
+<a name="l00655"></a>00655 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00656"></a>00656 _waitpid(pid_t pid)
+<a name="l00657"></a>00657 {
+<a name="l00658"></a>00658 <span class="keywordtype">int</span> status;
+<a name="l00659"></a>00659 pid_t r;
+<a name="l00660"></a>00660
+<a name="l00661"></a>00661 r = waitpid(pid, &status, 0);
+<a name="l00662"></a>00662 <span class="keywordflow">if</span> (r > -1)
+<a name="l00663"></a>00663 <span class="keywordflow">return</span> 0;
+<a name="l00664"></a>00664 <span class="keywordflow">else</span>
+<a name="l00665"></a>00665 perror(<span class="stringliteral">"waitpid"</span>);
+<a name="l00666"></a>00666
+<a name="l00667"></a>00667 <span class="keywordflow">return</span> r;
+<a name="l00668"></a>00668 }
+<a name="l00669"></a>00669
+<a name="l00670"></a>00670 <span class="keywordtype">int</span>
+<a name="l00671"></a><a class="code" href="lightmediascanner__process_8c.html#9f980636d608c6af99477ba37e196050">00671</a> <a class="code" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave</a>(<span class="keyword">struct</span> pinfo *pinfo, <span class="keywordtype">int</span> (*finish)(<span class="keyword">const</span> <span class="keyword">struct</span> fds *fds))
+<a name="l00672"></a>00672 {
+<a name="l00673"></a>00673 <span class="keywordtype">int</span> r;
+<a name="l00674"></a>00674
+<a name="l00675"></a>00675 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> <= 0)
+<a name="l00676"></a>00676 <span class="keywordflow">return</span> 0;
+<a name="l00677"></a>00677
+<a name="l00678"></a>00678 r = finish(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>);
+<a name="l00679"></a>00679 <span class="keywordflow">if</span> (r == 0)
+<a name="l00680"></a>00680 r = _waitpid(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00681"></a>00681 <span class="keywordflow">else</span> {
+<a name="l00682"></a>00682 r = kill(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>, SIGKILL);
+<a name="l00683"></a>00683 <span class="keywordflow">if</span> (r < 0)
+<a name="l00684"></a>00684 perror(<span class="stringliteral">"kill"</span>);
+<a name="l00685"></a>00685 <span class="keywordflow">else</span>
+<a name="l00686"></a>00686 r =_waitpid(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00687"></a>00687 }
+<a name="l00688"></a>00688 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> = 0;
+<a name="l00689"></a>00689
+<a name="l00690"></a>00690 <span class="keywordflow">return</span> r;
+<a name="l00691"></a>00691 }
+<a name="l00692"></a>00692
+<a name="l00693"></a>00693 <span class="keywordtype">int</span>
+<a name="l00694"></a><a class="code" href="lightmediascanner__process_8c.html#9bf510645947b478dab39f633bbd35f3">00694</a> <a class="code" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a>(<span class="keyword">struct</span> pinfo *pinfo, <span class="keywordtype">int</span> (*work)(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">struct</span> fds *fds))
+<a name="l00695"></a>00695 {
+<a name="l00696"></a>00696 <span class="keywordtype">int</span> status;
+<a name="l00697"></a>00697
+<a name="l00698"></a>00698 <span class="keywordflow">if</span> (waitpid(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>, &status, WNOHANG) > 0) {
+<a name="l00699"></a>00699 <span class="keywordflow">if</span> (WIFEXITED(status)) {
+<a name="l00700"></a>00700 <span class="keywordtype">int</span> code;
+<a name="l00701"></a>00701
+<a name="l00702"></a>00702 code = WEXITSTATUS(status);
+<a name="l00703"></a>00703 <span class="keywordflow">if</span> (code != 0) {
+<a name="l00704"></a>00704 fprintf(stderr, <span class="stringliteral">"ERROR: slave returned %d, exit.\n"</span>, code);
+<a name="l00705"></a>00705 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> = 0;
+<a name="l00706"></a>00706 <span class="keywordflow">return</span> -1;
+<a name="l00707"></a>00707 }
+<a name="l00708"></a>00708 } <span class="keywordflow">else</span> {
+<a name="l00709"></a>00709 <span class="keywordflow">if</span> (WIFSIGNALED(status)) {
+<a name="l00710"></a>00710 <span class="keywordtype">int</span> code;
+<a name="l00711"></a>00711
+<a name="l00712"></a>00712 code = WTERMSIG(status);
+<a name="l00713"></a>00713 fprintf(stderr, <span class="stringliteral">"ERROR: slave was terminated by signal %d.\n"</span>,
+<a name="l00714"></a>00714 code);
+<a name="l00715"></a>00715 }
+<a name="l00716"></a>00716 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> = 0;
+<a name="l00717"></a>00717 <span class="keywordflow">return</span> -1;
+<a name="l00718"></a>00718 }
+<a name="l00719"></a>00719 }
+<a name="l00720"></a>00720
+<a name="l00721"></a>00721 <span class="keywordflow">if</span> (kill(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>, SIGKILL))
+<a name="l00722"></a>00722 perror(<span class="stringliteral">"kill"</span>);
+<a name="l00723"></a>00723
+<a name="l00724"></a>00724 <span class="keywordflow">if</span> (waitpid(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>, &status, 0) < 0)
+<a name="l00725"></a>00725 perror(<span class="stringliteral">"waitpid"</span>);
+<a name="l00726"></a>00726
+<a name="l00727"></a>00727 _consume_garbage(&pinfo-><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>);
+<a name="l00728"></a>00728 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a>(pinfo, work);
+<a name="l00729"></a>00729 }
+<a name="l00730"></a>00730
+<a name="l00731"></a>00731 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00732"></a>00732 _strcat(<span class="keywordtype">int</span> base, <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
+<a name="l00733"></a>00733 {
+<a name="l00734"></a>00734 <span class="keywordtype">int</span> new_len, name_len;
+<a name="l00735"></a>00735
+<a name="l00736"></a>00736 name_len = strlen(name);
+<a name="l00737"></a>00737 new_len = base + name_len;
+<a name="l00738"></a>00738
+<a name="l00739"></a>00739 <span class="keywordflow">if</span> (new_len >= <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>) {
+<a name="l00740"></a>00740 path[base] = <span class="charliteral">'\0'</span>;
+<a name="l00741"></a>00741 fprintf(stderr,
+<a name="l00742"></a>00742 <span class="stringliteral">"ERROR: path concatenation too long %d of %d "</span>
+<a name="l00743"></a>00743 <span class="stringliteral">"available: \"%s\" + \"%s\"\n"</span>, new_len, <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>,
+<a name="l00744"></a>00744 path, name);
+<a name="l00745"></a>00745 <span class="keywordflow">return</span> -1;
+<a name="l00746"></a>00746 }
+<a name="l00747"></a>00747
+<a name="l00748"></a>00748 memcpy(path + base, name, name_len + 1);
+<a name="l00749"></a>00749
+<a name="l00750"></a>00750 <span class="keywordflow">return</span> new_len;
+<a name="l00751"></a>00751 }
+<a name="l00752"></a>00752
+<a name="l00753"></a>00753 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
+<a name="l00754"></a>00754 _report_progress(<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keywordtype">int</span> path_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370">lms_progress_status_t</a> status)
+<a name="l00755"></a>00755 {
+<a name="l00756"></a>00756 <a class="code" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> cb;
+<a name="l00757"></a>00757 <a class="code" href="structlms.html">lms_t</a> *lms = info-><a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>;
+<a name="l00758"></a>00758
+<a name="l00759"></a>00759 cb = lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#94615d22fba40d580a8a0055d28221c4">cb</a>;
+<a name="l00760"></a>00760 <span class="keywordflow">if</span> (!cb)
+<a name="l00761"></a>00761 <span class="keywordflow">return</span>;
+<a name="l00762"></a>00762
+<a name="l00763"></a>00763 cb(lms, path, path_len, status, lms-><a class="code" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a>.<a class="code" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a>);
+<a name="l00764"></a>00764 }
+<a name="l00765"></a>00765
+<a name="l00766"></a>00766 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00767"></a>00767 _process_file(<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keywordtype">int</span> base, <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
+<a name="l00768"></a>00768 {
+<a name="l00769"></a>00769 <span class="keyword">struct </span>pinfo *pinfo = (<span class="keyword">struct </span>pinfo *)info;
+<a name="l00770"></a>00770 <span class="keywordtype">int</span> new_len, reply, r;
+<a name="l00771"></a>00771
+<a name="l00772"></a>00772 new_len = _strcat(base, path, name);
+<a name="l00773"></a>00773 <span class="keywordflow">if</span> (new_len < 0)
+<a name="l00774"></a>00774 <span class="keywordflow">return</span> -1;
+<a name="l00775"></a>00775
+<a name="l00776"></a>00776 <span class="keywordflow">if</span> (_master_send_path(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>, new_len, base, path) != 0)
+<a name="l00777"></a>00777 <span class="keywordflow">return</span> -2;
+<a name="l00778"></a>00778
+<a name="l00779"></a>00779 r = _master_recv_reply(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>, &pinfo-><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>, &reply,
+<a name="l00780"></a>00780 pinfo-><a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>);
+<a name="l00781"></a>00781 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00782"></a>00782 _report_progress(info, path, new_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d8c2349ce6dbac01c8be42c29c6c7082">LMS_PROGRESS_STATUS_ERROR_COMM</a>);
+<a name="l00783"></a>00783 <span class="keywordflow">return</span> -3;
+<a name="l00784"></a>00784 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == 1) {
+<a name="l00785"></a>00785 fprintf(stderr, <span class="stringliteral">"ERROR: slave took too long, restart %d\n"</span>,
+<a name="l00786"></a>00786 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00787"></a>00787 _report_progress(info, path, new_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d237015217a2e3f16670fa70738730cd0b152">LMS_PROGRESS_STATUS_KILLED</a>);
+<a name="l00788"></a>00788 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a>(pinfo, _slave_work) != 0)
+<a name="l00789"></a>00789 <span class="keywordflow">return</span> -4;
+<a name="l00790"></a>00790 <span class="keywordflow">return</span> 1;
+<a name="l00791"></a>00791 } <span class="keywordflow">else</span> {
+<a name="l00792"></a>00792 <span class="keywordflow">if</span> (reply < 0) {
+<a name="l00793"></a>00793 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00794"></a>00794 getpid(), path);
+<a name="l00795"></a>00795 _report_progress(
+<a name="l00796"></a>00796 info, path, new_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">LMS_PROGRESS_STATUS_ERROR_PARSE</a>);
+<a name="l00797"></a>00797 <span class="keywordflow">return</span> (-reply) << 8;
+<a name="l00798"></a>00798 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (reply == 2)
+<a name="l00799"></a>00799 _report_progress(info, path, new_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c">LMS_PROGRESS_STATUS_SKIPPED</a>);
+<a name="l00800"></a>00800 <span class="keywordflow">else</span>
+<a name="l00801"></a>00801 _report_progress(
+<a name="l00802"></a>00802 info, path, new_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">LMS_PROGRESS_STATUS_PROCESSED</a>);
+<a name="l00803"></a>00803 <span class="keywordflow">return</span> reply;
+<a name="l00804"></a>00804 }
+<a name="l00805"></a>00805 }
+<a name="l00806"></a>00806
+<a name="l00807"></a>00807 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00808"></a>00808 _process_file_single_process(<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keywordtype">int</span> base, <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
+<a name="l00809"></a>00809 {
+<a name="l00810"></a>00810 <span class="keyword">struct </span><a class="code" href="structsinfo.html">sinfo</a> *<a class="code" href="structsinfo.html">sinfo</a> = (<span class="keyword">struct </span>sinfo *)info;
+<a name="l00811"></a>00811 <span class="keywordtype">int</span> new_len, r;
+<a name="l00812"></a>00812
+<a name="l00813"></a>00813 <span class="keywordtype">void</span> **parser_match = sinfo-><a class="code" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">parser_match</a>;
+<a name="l00814"></a>00814 <span class="keyword">struct </span>db *db = sinfo-><a class="code" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">db</a>;
+<a name="l00815"></a>00815 <a class="code" href="structlms.html">lms_t</a> *lms = sinfo-><a class="code" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>;
+<a name="l00816"></a>00816
+<a name="l00817"></a>00817 new_len = _strcat(base, path, name);
+<a name="l00818"></a>00818 <span class="keywordflow">if</span> (new_len < 0)
+<a name="l00819"></a>00819 <span class="keywordflow">return</span> -1;
+<a name="l00820"></a>00820
+<a name="l00821"></a>00821 r = _db_and_parsers_process_file(
+<a name="l00822"></a>00822 lms, db, parser_match, path, new_len, base);
+<a name="l00823"></a>00823 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00824"></a>00824 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00825"></a>00825 getpid(), path);
+<a name="l00826"></a>00826 _report_progress(info, path, new_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370ac34bba1176659b7d01c29ffe0b67c82">LMS_PROGRESS_STATUS_ERROR_PARSE</a>);
+<a name="l00827"></a>00827 <span class="keywordflow">return</span> (-r) << 8;
+<a name="l00828"></a>00828 } <span class="keywordflow">else</span> {
+<a name="l00829"></a>00829 sinfo-><a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a>++;
+<a name="l00830"></a>00830 <span class="keywordflow">if</span> (sinfo-><a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a> > lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>) {
+<a name="l00831"></a>00831 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00832"></a>00832 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00833"></a>00833 sinfo-><a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a> = 0;
+<a name="l00834"></a>00834 }
+<a name="l00835"></a>00835
+<a name="l00836"></a>00836 <span class="keywordflow">if</span> (r == 2)
+<a name="l00837"></a>00837 _report_progress(info, path, new_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d23704d4c093ecf32b2eba688a42908aa338c">LMS_PROGRESS_STATUS_SKIPPED</a>);
+<a name="l00838"></a>00838 <span class="keywordflow">else</span>
+<a name="l00839"></a>00839 _report_progress(
+<a name="l00840"></a>00840 info, path, new_len, <a class="code" href="lightmediascanner_8h.html#52b270a30c58810720ae0650f64d2370d058b5f0e26e414942e96b806d3a7c70">LMS_PROGRESS_STATUS_PROCESSED</a>);
+<a name="l00841"></a>00841 <span class="keywordflow">return</span> r;
+<a name="l00842"></a>00842 }
+<a name="l00843"></a>00843 }
+<a name="l00844"></a>00844
+<a name="l00845"></a>00845 <span class="keyword">static</span> <span class="keywordtype">int</span> _process_dir(<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keywordtype">int</span> base, <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <a class="code" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">process_file_callback_t</a> process_file);
+<a name="l00846"></a>00846
+<a name="l00847"></a>00847 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00848"></a>00848 _process_unknown(<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keywordtype">int</span> base, <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <a class="code" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">process_file_callback_t</a> process_file)
+<a name="l00849"></a>00849 {
+<a name="l00850"></a>00850 <span class="keyword">struct </span>stat st;
+<a name="l00851"></a>00851 <span class="keywordtype">int</span> new_len;
+<a name="l00852"></a>00852
+<a name="l00853"></a>00853 new_len = _strcat(base, path, name);
+<a name="l00854"></a>00854 <span class="keywordflow">if</span> (new_len < 0)
+<a name="l00855"></a>00855 <span class="keywordflow">return</span> -1;
+<a name="l00856"></a>00856
+<a name="l00857"></a>00857 <span class="keywordflow">if</span> (stat(path, &st) != 0) {
+<a name="l00858"></a>00858 perror(<span class="stringliteral">"stat"</span>);
+<a name="l00859"></a>00859 <span class="keywordflow">return</span> -2;
+<a name="l00860"></a>00860 }
+<a name="l00861"></a>00861
+<a name="l00862"></a>00862 <span class="keywordflow">if</span> (S_ISREG(st.st_mode))
+<a name="l00863"></a>00863 <span class="keywordflow">return</span> process_file(info, base, path, name);
+<a name="l00864"></a>00864 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISDIR(st.st_mode))
+<a name="l00865"></a>00865 <span class="keywordflow">return</span> _process_dir(info, base, path, name, process_file);
+<a name="l00866"></a>00866 <span class="keywordflow">else</span> {
+<a name="l00867"></a>00867 fprintf(stderr,
+<a name="l00868"></a>00868 <span class="stringliteral">"INFO: %s is neither a directory nor a regular file.\n"</span>, path);
+<a name="l00869"></a>00869 <span class="keywordflow">return</span> -3;
+<a name="l00870"></a>00870 }
+<a name="l00871"></a>00871 }
+<a name="l00872"></a>00872
+<a name="l00873"></a>00873 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00874"></a>00874 _process_dir(<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keywordtype">int</span> base, <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <a class="code" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">process_file_callback_t</a> process_file)
+<a name="l00875"></a>00875 {
+<a name="l00876"></a>00876 <a class="code" href="structlms.html">lms_t</a> *lms = info-><a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>;
+<a name="l00877"></a>00877 <span class="keyword">struct </span>dirent *de;
+<a name="l00878"></a>00878 <span class="keywordtype">int</span> new_len, r;
+<a name="l00879"></a>00879 DIR *dir;
+<a name="l00880"></a>00880
+<a name="l00881"></a>00881 new_len = _strcat(base, path, name);
+<a name="l00882"></a>00882 <span class="keywordflow">if</span> (new_len < 0)
+<a name="l00883"></a>00883 <span class="keywordflow">return</span> -1;
+<a name="l00884"></a>00884 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (new_len + 1 >= <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>) {
+<a name="l00885"></a>00885 fprintf(stderr, <span class="stringliteral">"ERROR: path too long\n"</span>);
+<a name="l00886"></a>00886 <span class="keywordflow">return</span> 2;
+<a name="l00887"></a>00887 }
+<a name="l00888"></a>00888
+<a name="l00889"></a>00889 dir = opendir(path);
+<a name="l00890"></a>00890 <span class="keywordflow">if</span> (dir == NULL) {
+<a name="l00891"></a>00891 perror(<span class="stringliteral">"opendir"</span>);
+<a name="l00892"></a>00892 <span class="keywordflow">return</span> 3;
+<a name="l00893"></a>00893 }
+<a name="l00894"></a>00894
+<a name="l00895"></a>00895 path[new_len] = <span class="charliteral">'/'</span>;
+<a name="l00896"></a>00896 new_len++;
+<a name="l00897"></a>00897
+<a name="l00898"></a>00898 r = 0;
+<a name="l00899"></a>00899 <span class="keywordflow">while</span> ((de = readdir(dir)) != NULL && !lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a>) {
+<a name="l00900"></a>00900 <span class="keywordflow">if</span> (de->d_name[0] == <span class="charliteral">'.'</span>)
+<a name="l00901"></a>00901 <span class="keywordflow">continue</span>;
+<a name="l00902"></a>00902 <span class="keywordflow">if</span> (de->d_type == DT_REG) {
+<a name="l00903"></a>00903 <span class="keywordflow">if</span> (process_file(info, new_len, path, de->d_name) < 0) {
+<a name="l00904"></a>00904 fprintf(stderr,
+<a name="l00905"></a>00905 <span class="stringliteral">"ERROR: unrecoverable error parsing file, "</span>
+<a name="l00906"></a>00906 <span class="stringliteral">"exit \"%s\".\n"</span>, path);
+<a name="l00907"></a>00907 path[new_len - 1] = <span class="charliteral">'\0'</span>;
+<a name="l00908"></a>00908 r = -4;
+<a name="l00909"></a>00909 <span class="keywordflow">goto</span> end;
+<a name="l00910"></a>00910 }
+<a name="l00911"></a>00911 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (de->d_type == DT_DIR) {
+<a name="l00912"></a>00912 <span class="keywordflow">if</span> (_process_dir(
+<a name="l00913"></a>00913 info, new_len, path, de->d_name, process_file) < 0) {
+<a name="l00914"></a>00914 fprintf(stderr,
+<a name="l00915"></a>00915 <span class="stringliteral">"ERROR: unrecoverable error parsing dir, "</span>
+<a name="l00916"></a>00916 <span class="stringliteral">"exit \"%s\".\n"</span>, path);
+<a name="l00917"></a>00917 path[new_len - 1] = <span class="charliteral">'\0'</span>;
+<a name="l00918"></a>00918 r = -5;
+<a name="l00919"></a>00919 <span class="keywordflow">goto</span> end;
+<a name="l00920"></a>00920 }
+<a name="l00921"></a>00921 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (de->d_type == DT_UNKNOWN) {
+<a name="l00922"></a>00922 <span class="keywordflow">if</span> (_process_unknown(
+<a name="l00923"></a>00923 info, new_len, path, de->d_name, process_file) < 0) {
+<a name="l00924"></a>00924 fprintf(stderr,
+<a name="l00925"></a>00925 <span class="stringliteral">"ERROR: unrecoverable error parsing DT_UNKNOWN, "</span>
+<a name="l00926"></a>00926 <span class="stringliteral">"exit \"%s\".\n"</span>, path);
+<a name="l00927"></a>00927 path[new_len - 1] = <span class="charliteral">'\0'</span>;
+<a name="l00928"></a>00928 r = -6;
+<a name="l00929"></a>00929 <span class="keywordflow">goto</span> end;
+<a name="l00930"></a>00930 }
+<a name="l00931"></a>00931 }
+<a name="l00932"></a>00932 }
+<a name="l00933"></a>00933
+<a name="l00934"></a>00934 end:
+<a name="l00935"></a>00935 closedir(dir);
+<a name="l00936"></a>00936 <span class="keywordflow">return</span> r;
+<a name="l00937"></a>00937 }
+<a name="l00938"></a>00938
+<a name="l00939"></a>00939 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00940"></a>00940 _lms_process_check_valid(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *path)
+<a name="l00941"></a>00941 {
+<a name="l00942"></a>00942 <span class="keywordflow">if</span> (!lms)
+<a name="l00943"></a>00943 <span class="keywordflow">return</span> -1;
+<a name="l00944"></a>00944
+<a name="l00945"></a>00945 <span class="keywordflow">if</span> (!path)
+<a name="l00946"></a>00946 <span class="keywordflow">return</span> -2;
+<a name="l00947"></a>00947
+<a name="l00948"></a>00948 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>) {
+<a name="l00949"></a>00949 fprintf(stderr, <span class="stringliteral">"ERROR: is already processing.\n"</span>);
+<a name="l00950"></a>00950 <span class="keywordflow">return</span> -3;
+<a name="l00951"></a>00951 }
+<a name="l00952"></a>00952
+<a name="l00953"></a>00953 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00954"></a>00954 fprintf(stderr, <span class="stringliteral">"ERROR: no plugins registered.\n"</span>);
+<a name="l00955"></a>00955 <span class="keywordflow">return</span> -4;
+<a name="l00956"></a>00956 }
+<a name="l00957"></a>00957
+<a name="l00958"></a>00958 <span class="keywordflow">return</span> 0;
+<a name="l00959"></a>00959 }
+<a name="l00960"></a>00960
+<a name="l00961"></a>00961 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00962"></a>00962 _process_trigger(<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *info, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path, <a class="code" href="lightmediascanner__private_8h.html#ca9b2668fa08b18c630e16d1f7f702a7">process_file_callback_t</a> process_file)
+<a name="l00963"></a>00963 {
+<a name="l00964"></a>00964 <span class="keywordtype">char</span> path[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>], *bname;
+<a name="l00965"></a>00965 <a class="code" href="structlms.html">lms_t</a> *lms = info-><a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>;
+<a name="l00966"></a>00966 <span class="keywordtype">int</span> len;
+<a name="l00967"></a>00967 <span class="keywordtype">int</span> r;
+<a name="l00968"></a>00968
+<a name="l00969"></a>00969 <span class="keywordflow">if</span> (realpath(top_path, path) == NULL) {
+<a name="l00970"></a>00970 perror(<span class="stringliteral">"realpath"</span>);
+<a name="l00971"></a>00971 <span class="keywordflow">return</span> -1;
+<a name="l00972"></a>00972 }
+<a name="l00973"></a>00973
+<a name="l00974"></a>00974 <span class="comment">/* search '/' backwards, split dirname and basename, note realpath usage */</span>
+<a name="l00975"></a>00975 len = strlen(path);
+<a name="l00976"></a>00976 <span class="keywordflow">for</span> (; len >= 0 && path[len] != <span class="charliteral">'/'</span>; len--);
+<a name="l00977"></a>00977 len++;
+<a name="l00978"></a>00978 bname = strdup(path + len);
+<a name="l00979"></a>00979 <span class="keywordflow">if</span> (bname == NULL) {
+<a name="l00980"></a>00980 perror(<span class="stringliteral">"strdup"</span>);
+<a name="l00981"></a>00981 <span class="keywordflow">return</span> -2;
+<a name="l00982"></a>00982 }
+<a name="l00983"></a>00983
+<a name="l00984"></a>00984 lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 1;
+<a name="l00985"></a>00985 lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a> = 0;
+<a name="l00986"></a>00986 r = _process_dir(info, len, path, bname, process_file);
+<a name="l00987"></a>00987 lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 0;
+<a name="l00988"></a>00988 lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a> = 0;
+<a name="l00989"></a>00989 free(bname);
+<a name="l00990"></a>00990
+<a name="l00991"></a>00991 <span class="keywordflow">return</span> r;
+<a name="l00992"></a>00992 }
+<a name="l00993"></a>00993
+<a name="l01004"></a>01004 <span class="keywordtype">int</span>
+<a name="l01005"></a><a class="code" href="lightmediascanner__process_8c.html#c2f07fb73717514237862c98dbf023b2">01005</a> <a class="code" href="lightmediascanner_8h.html#7d2b81cfe07a8cce4c2bef705e7529f4">lms_process</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path)
+<a name="l01006"></a>01006 {
+<a name="l01007"></a>01007 <span class="keyword">struct </span>pinfo pinfo;
+<a name="l01008"></a>01008 <span class="keywordtype">int</span> r;
+<a name="l01009"></a>01009
+<a name="l01010"></a>01010 r = _lms_process_check_valid(lms, top_path);
+<a name="l01011"></a>01011 <span class="keywordflow">if</span> (r < 0)
+<a name="l01012"></a>01012 <span class="keywordflow">return</span> r;
+<a name="l01013"></a>01013
+<a name="l01014"></a>01014 pinfo.<a class="code" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a> = lms;
+<a name="l01015"></a>01015
+<a name="l01016"></a>01016 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lms_create_pipes</a>(&pinfo) != 0) {
+<a name="l01017"></a>01017 r = -1;
+<a name="l01018"></a>01018 <span class="keywordflow">goto</span> end;
+<a name="l01019"></a>01019 }
+<a name="l01020"></a>01020
+<a name="l01021"></a>01021 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a>(&pinfo, _slave_work) != 0) {
+<a name="l01022"></a>01022 r = -2;
+<a name="l01023"></a>01023 <span class="keywordflow">goto</span> close_pipes;
+<a name="l01024"></a>01024 }
+<a name="l01025"></a>01025
+<a name="l01026"></a>01026 r = _process_trigger((<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *)&pinfo, top_path, _process_file);
+<a name="l01027"></a>01027
+<a name="l01028"></a>01028 <a class="code" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave</a>(&pinfo, _master_send_finish);
+<a name="l01029"></a>01029 close_pipes:
+<a name="l01030"></a>01030 <a class="code" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lms_close_pipes</a>(&pinfo);
+<a name="l01031"></a>01031 end:
+<a name="l01032"></a>01032 <span class="keywordflow">return</span> r;
+<a name="l01033"></a>01033 }
+<a name="l01034"></a>01034
+<a name="l01046"></a>01046 <span class="keywordtype">int</span>
+<a name="l01047"></a><a class="code" href="lightmediascanner__process_8c.html#5db83cefb7a50bbecea9de26a6ef1c2c">01047</a> <a class="code" href="lightmediascanner_8h.html#c5eda23c23b2ea76f001ac994c2ba9e2">lms_process_single_process</a>(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">const</span> <span class="keywordtype">char</span> *top_path)
+<a name="l01048"></a>01048 {
+<a name="l01049"></a>01049 <span class="keyword">struct </span>sinfo sinfo;
+<a name="l01050"></a>01050 <span class="keywordtype">int</span> r;
+<a name="l01051"></a>01051
+<a name="l01052"></a>01052 r = _lms_process_check_valid(lms, top_path);
+<a name="l01053"></a>01053 <span class="keywordflow">if</span> (r < 0)
+<a name="l01054"></a>01054 <span class="keywordflow">return</span> r;
+<a name="l01055"></a>01055
+<a name="l01056"></a>01056 sinfo.<a class="code" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a> = lms;
+<a name="l01057"></a>01057 sinfo.<a class="code" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a> = 0;
+<a name="l01058"></a>01058
+<a name="l01059"></a>01059 r = _db_and_parsers_setup(sinfo.<a class="code" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">common</a>.<a class="code" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a>, &sinfo.<a class="code" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">db</a>, &sinfo.<a class="code" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">parser_match</a>);
+<a name="l01060"></a>01060 <span class="keywordflow">if</span> (r < 0) {
+<a name="l01061"></a>01061 <span class="keywordflow">if</span> (r == -1)
+<a name="l01062"></a>01062 <span class="keywordflow">return</span> r;
+<a name="l01063"></a>01063 <span class="keywordflow">else</span>
+<a name="l01064"></a>01064 <span class="keywordflow">goto</span> finish;
+<a name="l01065"></a>01065 }
+<a name="l01066"></a>01066
+<a name="l01067"></a>01067 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(sinfo.<a class="code" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">db</a>->transaction_begin);
+<a name="l01068"></a>01068
+<a name="l01069"></a>01069 r = _process_trigger(
+<a name="l01070"></a>01070 (<span class="keyword">struct</span> <a class="code" href="structcinfo.html">cinfo</a> *)&sinfo, top_path, _process_file_single_process);
+<a name="l01071"></a>01071
+<a name="l01072"></a>01072 free(sinfo.parser_match);
+<a name="l01073"></a>01073 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(sinfo.db->transaction_commit);
+<a name="l01074"></a>01074
+<a name="l01075"></a>01075 finish:
+<a name="l01076"></a>01076 <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(lms, sinfo.db->handle);
+<a name="l01077"></a>01077 _db_close(sinfo.db);
+<a name="l01078"></a>01078 <span class="keywordflow">return</span> r;
+<a name="l01079"></a>01079 }
+<a name="l01080"></a>01080
+<a name="l01081"></a>01081 <span class="keywordtype">void</span>
+<a name="l01082"></a><a class="code" href="lightmediascanner__process_8c.html#36d624baae0531c20e716c88a82e0aaf">01082</a> <a class="code" href="lightmediascanner_8h.html#30aa1e83907fc1049d2adccb28eef489">lms_stop_processing</a>(<a class="code" href="structlms.html">lms_t</a> *lms)
+<a name="l01083"></a>01083 {
+<a name="l01084"></a>01084 <span class="keywordflow">if</span> (!lms)
+<a name="l01085"></a>01085 <span class="keywordflow">return</span>;
+<a name="l01086"></a>01086 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>)
+<a name="l01087"></a>01087 <span class="keywordflow">return</span>;
+<a name="l01088"></a>01088
+<a name="l01089"></a>01089 lms-><a class="code" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a> = 1;
+<a name="l01090"></a>01090 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_process.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_process.c File Reference</h1><code>#include <sys/wait.h></code><br>
+<code>#include <sys/stat.h></code><br>
+<code>#include <unistd.h></code><br>
+<code>#include <dirent.h></code><br>
+<code>#include <signal.h></code><br>
+<code>#include <stdio.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <string.h></code><br>
+<code>#include "<a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>"</code><br>
+<code>#include "<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>"</code><br>
+<code>#include "<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>"</code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_process.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__process_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#369266c24eacffb87046522897a570d5">_GNU_SOURCE</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#c321bebfc5c24cbbac30031202c460e9">lms_parsers_setup</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#6e02f78f026b2ad282184476dca13e45">lms_parsers_start</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#d002464442b08826a1da920bdf4957b7">lms_parsers_finish</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, sqlite3 *db)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#f2e95cea50ce24774d2f5ed7d8c8f41c">lms_parsers_check_using</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, void **parser_match, struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#4ab78dfbf29822d91472d18dd7424e77">lms_parsers_run</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, sqlite3 *db, void **parser_match, struct <a class="el" href="structlms__file__info.html">lms_file_info</a> *finfo)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#6b68b00b80a98a178c7d69b962267a11">lms_close_pipes</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#c2e1320b9770e0f522451b13f82efc2b">lms_create_pipes</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#e92fe8fe90d93d5ad9a42387a4b2fc6e">lms_create_slave</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>, int(*work)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#9f980636d608c6af99477ba37e196050">lms_finish_slave</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>, int(*finish)(const struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#9bf510645947b478dab39f633bbd35f3">lms_restart_slave</a> (struct <a class="el" href="structpinfo.html">pinfo</a> *<a class="el" href="structpinfo.html">pinfo</a>, int(*work)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#c2f07fb73717514237862c98dbf023b2">lms_process</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *top_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#5db83cefb7a50bbecea9de26a6ef1c2c">lms_process_single_process</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, const char *top_path)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__process_8c.html#36d624baae0531c20e716c88a82e0aaf">lms_stop_processing</a> (<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>)</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="369266c24eacffb87046522897a570d5"></a><!-- doxytag: member="lightmediascanner_process.c::_GNU_SOURCE" ref="369266c24eacffb87046522897a570d5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _GNU_SOURCE </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00025">25</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="6b68b00b80a98a178c7d69b962267a11"></a><!-- doxytag: member="lightmediascanner_process.c::lms_close_pipes" ref="6b68b00b80a98a178c7d69b962267a11" args="(struct pinfo *pinfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_close_pipes </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00596">596</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00057">pinfo::master</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00058">pinfo::slave</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01005">lms_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="c2e1320b9770e0f522451b13f82efc2b"></a><!-- doxytag: member="lightmediascanner_process.c::lms_create_pipes" ref="c2e1320b9770e0f522451b13f82efc2b" args="(struct pinfo *pinfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_create_pipes </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00607">607</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00057">pinfo::master</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00059">pinfo::poll</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00045">fds::r</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00058">pinfo::slave</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00046">fds::w</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01005">lms_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="e92fe8fe90d93d5ad9a42387a4b2fc6e"></a><!-- doxytag: member="lightmediascanner_process.c::lms_create_slave" ref="e92fe8fe90d93d5ad9a42387a4b2fc6e" args="(struct pinfo *pinfo, int(*work)(lms_t *lms, struct fds *fds))" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_create_slave </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int(*)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>) </td>
+ <td class="paramname"> <em>work</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00634">634</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00056">pinfo::child</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00055">pinfo::common</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00050">cinfo::lms</a>, <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00057">pinfo::master</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00058">pinfo::slave</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="9f980636d608c6af99477ba37e196050"></a><!-- doxytag: member="lightmediascanner_process.c::lms_finish_slave" ref="9f980636d608c6af99477ba37e196050" args="(struct pinfo *pinfo, int(*finish)(const struct fds *fds))" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_finish_slave </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int(*)(const struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>) </td>
+ <td class="paramname"> <em>finish</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00671">671</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00056">pinfo::child</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00057">pinfo::master</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f2e95cea50ce24774d2f5ed7d8c8f41c"></a><!-- doxytag: member="lightmediascanner_process.c::lms_parsers_check_using" ref="f2e95cea50ce24774d2f5ed7d8c8f41c" args="(lms_t *lms, void **parser_match, struct lms_file_info *finfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_parsers_check_using </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void ** </td>
+ <td class="paramname"> <em>parser_match</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00367">367</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00148">lms_file_info::base</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00169">lms_plugin::match</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00146">lms_file_info::path</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00147">lms_file_info::path_len</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00071">parser::plugin</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d002464442b08826a1da920bdf4957b7"></a><!-- doxytag: member="lightmediascanner_process.c::lms_parsers_finish" ref="d002464442b08826a1da920bdf4957b7" args="(lms_t *lms, sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_parsers_finish </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00345">345</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00174">lms_plugin::finish</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00168">lms_plugin::name</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00071">parser::plugin</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="4ab78dfbf29822d91472d18dd7424e77"></a><!-- doxytag: member="lightmediascanner_process.c::lms_parsers_run" ref="4ab78dfbf29822d91472d18dd7424e77" args="(lms_t *lms, sqlite3 *db, void **parser_match, struct lms_file_info *finfo)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_parsers_run </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void ** </td>
+ <td class="paramname"> <em>parser_match</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct <a class="el" href="structlms__file__info.html">lms_file_info</a> * </td>
+ <td class="paramname"> <em>finfo</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00387">387</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00170">lms_plugin::parse</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00071">parser::plugin</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="c321bebfc5c24cbbac30031202c460e9"></a><!-- doxytag: member="lightmediascanner_process.c::lms_parsers_setup" ref="c321bebfc5c24cbbac30031202c460e9" args="(lms_t *lms, sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_parsers_setup </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00293">293</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00174">lms_plugin::finish</a>, <a class="el" href="lightmediascanner_8c-source.html#l00294">lms_parser_del_int()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00168">lms_plugin::name</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00071">parser::plugin</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00172">lms_plugin::setup</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="6e02f78f026b2ad282184476dca13e45"></a><!-- doxytag: member="lightmediascanner_process.c::lms_parsers_start" ref="6e02f78f026b2ad282184476dca13e45" args="(lms_t *lms, sqlite3 *db)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_parsers_start </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">sqlite3 * </td>
+ <td class="paramname"> <em>db</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00319">319</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00174">lms_plugin::finish</a>, <a class="el" href="lightmediascanner_8c-source.html#l00294">lms_parser_del_int()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00078">lms::n_parsers</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00168">lms_plugin::name</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00077">lms::parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00071">parser::plugin</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00173">lms_plugin::start</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="c2f07fb73717514237862c98dbf023b2"></a><!-- doxytag: member="lightmediascanner_process.c::lms_process" ref="c2f07fb73717514237862c98dbf023b2" args="(lms_t *lms, const char *top_path)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_process </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>top_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Process the given directory.<p>
+This will add or update media found in the given directory or its children.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>top_path</em> </td><td>top directory to scan.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l01005">1005</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00055">pinfo::common</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00050">cinfo::lms</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00596">lms_close_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00607">lms_create_pipes()</a>, <a class="el" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave()</a>, and <a class="el" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="5db83cefb7a50bbecea9de26a6ef1c2c"></a><!-- doxytag: member="lightmediascanner_process.c::lms_process_single_process" ref="5db83cefb7a50bbecea9de26a6ef1c2c" args="(lms_t *lms, const char *top_path)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_process_single_process </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>top_path</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Process the given directory *without fork()-ing* into child process.<p>
+This will add or update media found in the given directory or its children. Note that if a <a class="el" href="structparser.html">parser</a> hangs during the process, this call will also hang.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structlms.html">lms</a></em> </td><td>previously allocated Light Media Scanner instance. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>top_path</em> </td><td>top directory to scan.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success 0 is returned. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l01047">1047</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00067">sinfo::commit_counter</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00064">sinfo::common</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">sinfo::db</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00050">cinfo::lms</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00532">lms_db_begin_transaction()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00559">lms_db_end_transaction()</a>, <a class="el" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish()</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00066">sinfo::parser_match</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="9bf510645947b478dab39f633bbd35f3"></a><!-- doxytag: member="lightmediascanner_process.c::lms_restart_slave" ref="9bf510645947b478dab39f633bbd35f3" args="(struct pinfo *pinfo, int(*work)(lms_t *lms, struct fds *fds))" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_restart_slave </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structpinfo.html">pinfo</a> * </td>
+ <td class="paramname"> <em>pinfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int(*)(<a class="el" href="structlms.html">lms_t</a> *<a class="el" href="structlms.html">lms</a>, struct <a class="el" href="structfds.html">fds</a> *<a class="el" href="structfds.html">fds</a>) </td>
+ <td class="paramname"> <em>work</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00694">694</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00056">pinfo::child</a>, <a class="el" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave()</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00059">pinfo::poll</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="36d624baae0531c20e716c88a82e0aaf"></a><!-- doxytag: member="lightmediascanner_process.c::lms_stop_processing" ref="36d624baae0531c20e716c88a82e0aaf" args="(lms_t *lms)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_stop_processing </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structlms.html">lms_t</a> * </td>
+ <td class="paramname"> <em>lms</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l01082">1082</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__private_8h-source.html#l00088">lms::is_processing</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00089">lms::stop_processing</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_process_single_process",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_db_begin_transaction",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_db_end_transaction",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_parsers_finish",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f"];
+}
--- /dev/null
+e62d222ba815168ae862c6476d8ccf84
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_parsers_start",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_parser_del_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf"];
+}
--- /dev/null
+4d753703b39fc0b9548d48d3aacc6cb4
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_restart_slave",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_create_slave",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6"];
+}
--- /dev/null
+a13a076121386b56f1f14200b632b47e
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_process.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="sys/wait.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="sys/stat.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="unistd.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="dirent.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="signal.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="stdio.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node8 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node9 [label="string.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node10 [label="lightmediascanner.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8h.html"];
+ Node1 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 [label="lightmediascanner_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html"];
+ Node11 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 [label="lightmediascanner_plugin.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__plugin_8h.html"];
+ Node12 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node13 [label="lightmediascanner_charset_conv.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__charset__conv_8h.html"];
+ Node12 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node14 [label="sqlite3.h",height=0.2,width=0.4,color="grey75"];
+ Node12 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node15 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+ Node11 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node11 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node16 [label="poll.h",height=0.2,width=0.4,color="grey75"];
+ Node11 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node17 [label="limits.h",height=0.2,width=0.4,color="grey75"];
+ Node11 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node1 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 [label="lightmediascanner_db_private.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__private_8h.html"];
+ Node18 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node18 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}
--- /dev/null
+36f1b89514800aeb2a369e7d8013adcf
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_process",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_close_pipes",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_create_pipes",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="lms_create_slave",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="lms_finish_slave",height=0.2,width=0.4,color="black",URL="$lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5"];
+}
--- /dev/null
+ad645493b242b4b8f663724f5c4297ce
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_parsers_setup",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_parser_del_int",height=0.2,width=0.4,color="black",URL="$lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf"];
+}
--- /dev/null
+60c3b25b0b67be22210d500217851f8a
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_create_slave",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_free",height=0.2,width=0.4,color="black",URL="$group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687"];
+ Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="lms_charset_conv_free",height=0.2,width=0.4,color="black",URL="$group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091"];
+}
--- /dev/null
+78bbb5185b7a4a042ce0f3b10f501274
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_utils.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_utils.c</h1><a href="lightmediascanner__utils_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__utils_8h.html">lightmediascanner_utils.h</a>></span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include <ctype.h></span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include <alloca.h></span>
+<a name="l00025"></a>00025
+<a name="l00033"></a>00033 <span class="keywordtype">void</span>
+<a name="l00034"></a><a class="code" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">00034</a> <a class="code" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">lms_strstrip</a>(<span class="keywordtype">char</span> *str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len)
+<a name="l00035"></a>00035 {
+<a name="l00036"></a>00036 <span class="keywordtype">int</span> i, len;
+<a name="l00037"></a>00037 <span class="keywordtype">char</span> *p;
+<a name="l00038"></a>00038
+<a name="l00039"></a>00039 len = *p_len;
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041 <span class="keywordflow">if</span> (len == 0)
+<a name="l00042"></a>00042 <span class="keywordflow">return</span>;
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044 <span class="keywordflow">if</span> (*str == <span class="charliteral">'\0'</span>) {
+<a name="l00045"></a>00045 *p_len = 0;
+<a name="l00046"></a>00046 <span class="keywordflow">return</span>;
+<a name="l00047"></a>00047 }
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 p = str + len - 1;
+<a name="l00050"></a>00050 <span class="keywordflow">for</span> (i = len - 1; i >= 0; i--) {
+<a name="l00051"></a>00051 <span class="keywordflow">if</span> (isspace(*p) || *p == <span class="charliteral">'\0'</span>) {
+<a name="l00052"></a>00052 *p = <span class="charliteral">'\0'</span>;
+<a name="l00053"></a>00053 len--;
+<a name="l00054"></a>00054 p--;
+<a name="l00055"></a>00055 } <span class="keywordflow">else</span>
+<a name="l00056"></a>00056 <span class="keywordflow">break</span>;
+<a name="l00057"></a>00057 }
+<a name="l00058"></a>00058 <span class="keywordflow">if</span> (len == 0) {
+<a name="l00059"></a>00059 *p_len = 0;
+<a name="l00060"></a>00060 <span class="keywordflow">return</span>;
+<a name="l00061"></a>00061 }
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 p = str;
+<a name="l00064"></a>00064 <span class="keywordflow">for</span> (i = 0; i < len; i++) {
+<a name="l00065"></a>00065 <span class="keywordflow">if</span> (isspace(*p))
+<a name="l00066"></a>00066 p++;
+<a name="l00067"></a>00067 <span class="keywordflow">else</span>
+<a name="l00068"></a>00068 <span class="keywordflow">break</span>;
+<a name="l00069"></a>00069 }
+<a name="l00070"></a>00070 len -= i;
+<a name="l00071"></a>00071 <span class="keywordflow">if</span> (len == 0) {
+<a name="l00072"></a>00072 *str = <span class="charliteral">'\0'</span>;
+<a name="l00073"></a>00073 *p_len = 0;
+<a name="l00074"></a>00074 <span class="keywordflow">return</span>;
+<a name="l00075"></a>00075 }
+<a name="l00076"></a>00076
+<a name="l00077"></a>00077 *p_len = len;
+<a name="l00078"></a>00078
+<a name="l00079"></a>00079 <span class="keywordflow">if</span> (str < p)
+<a name="l00080"></a>00080 <span class="keywordflow">for</span> (; len >= 0; len--, str++, p++)
+<a name="l00081"></a>00081 *str = *p;
+<a name="l00082"></a>00082 }
+<a name="l00083"></a>00083
+<a name="l00093"></a>00093 <span class="keywordtype">void</span>
+<a name="l00094"></a><a class="code" href="lightmediascanner__utils_8c.html#45d15c8bfeddaef0d5b1d0bd9ecc0c79">00094</a> <a class="code" href="lightmediascanner__utils_8c.html#45d15c8bfeddaef0d5b1d0bd9ecc0c79">lms_strstrip_and_free</a>(<span class="keywordtype">char</span> **p_str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len)
+<a name="l00095"></a>00095 {
+<a name="l00096"></a>00096 <span class="keywordflow">if</span> (!*p_str)
+<a name="l00097"></a>00097 <span class="keywordflow">return</span>;
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099 <a class="code" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">lms_strstrip</a>(*p_str, p_len);
+<a name="l00100"></a>00100 <span class="keywordflow">if</span> (*p_len == 0) {
+<a name="l00101"></a>00101 free(*p_str);
+<a name="l00102"></a>00102 *p_str = NULL;
+<a name="l00103"></a>00103 }
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105
+<a name="l00113"></a>00113 <span class="keywordtype">void</span>
+<a name="l00114"></a><a class="code" href="lightmediascanner__utils_8h.html#5a7e5da69500a12f447a77177dbb6e0d">00114</a> <a class="code" href="lightmediascanner__utils_8c.html#9ed157dee5c16f4c62c5ae6e281580cf">lms_string_size_strip_and_free</a>(<span class="keyword">struct</span> <a class="code" href="structlms__string__size.html">lms_string_size</a> *p)
+<a name="l00115"></a>00115 {
+<a name="l00116"></a>00116 <span class="keywordflow">if</span> (!p-><a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>)
+<a name="l00117"></a>00117 <span class="keywordflow">return</span>;
+<a name="l00118"></a>00118
+<a name="l00119"></a>00119 <a class="code" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">lms_strstrip</a>(p-><a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>, &p-><a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>);
+<a name="l00120"></a>00120 <span class="keywordflow">if</span> (p-><a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a> == 0) {
+<a name="l00121"></a>00121 free(p-><a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>);
+<a name="l00122"></a>00122 p-><a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a> = NULL;
+<a name="l00123"></a>00123 }
+<a name="l00124"></a>00124 }
+<a name="l00125"></a>00125
+<a name="l00126"></a>00126
+<a name="l00137"></a>00137 <span class="keywordtype">int</span>
+<a name="l00138"></a><a class="code" href="lightmediascanner__utils_8c.html#71ee8b57cf7c5eba8ec0593e756d2529">00138</a> <a class="code" href="lightmediascanner__utils_8c.html#71ee8b57cf7c5eba8ec0593e756d2529">lms_which_extension</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> name_len, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__string__size.html">lms_string_size</a> *exts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exts_len) {
+<a name="l00139"></a>00139 <span class="keywordtype">int</span> i;
+<a name="l00140"></a>00140 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *exts_pos;
+<a name="l00141"></a>00141 <span class="keyword">const</span> <span class="keywordtype">char</span> *s;
+<a name="l00142"></a>00142
+<a name="l00143"></a>00143 exts_pos = alloca(exts_len * <span class="keyword">sizeof</span>(*exts_pos));
+<a name="l00144"></a>00144 <span class="keywordflow">for</span> (i = 0; i < exts_len; i++)
+<a name="l00145"></a>00145 exts_pos[i] = exts[i].len;
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 <span class="keywordflow">for</span> (s = name + name_len - 1; s >= name; s--) {
+<a name="l00148"></a>00148 <span class="keywordtype">int</span> i, match;
+<a name="l00149"></a>00149 <span class="keywordtype">char</span> c1, c2;
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151 c1 = *s;
+<a name="l00152"></a>00152 <span class="keywordflow">if</span> (c1 >= <span class="charliteral">'a'</span>)
+<a name="l00153"></a>00153 c2 = c1;
+<a name="l00154"></a>00154 <span class="keywordflow">else</span>
+<a name="l00155"></a>00155 c2 = <span class="charliteral">'a'</span> + c1 - <span class="charliteral">'A'</span>;
+<a name="l00156"></a>00156
+<a name="l00157"></a>00157 match = 0;
+<a name="l00158"></a>00158 <span class="keywordflow">for</span> (i = 0; i < exts_len; i++) {
+<a name="l00159"></a>00159 <span class="keywordflow">if</span> (exts_pos[i] > 0) {
+<a name="l00160"></a>00160 <span class="keywordtype">char</span> ce;
+<a name="l00161"></a>00161
+<a name="l00162"></a>00162 ce = exts[i].<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>[exts_pos[i] - 1];
+<a name="l00163"></a>00163 <span class="keywordflow">if</span> (ce == c1 || ce == c2) {
+<a name="l00164"></a>00164 <span class="keywordflow">if</span> (exts_pos[i] == 1)
+<a name="l00165"></a>00165 <span class="keywordflow">return</span> i;
+<a name="l00166"></a>00166 exts_pos[i]--;
+<a name="l00167"></a>00167 match = 1;
+<a name="l00168"></a>00168 } <span class="keywordflow">else</span>
+<a name="l00169"></a>00169 exts_pos[i] = 0;
+<a name="l00170"></a>00170 }
+<a name="l00171"></a>00171 }
+<a name="l00172"></a>00172 <span class="keywordflow">if</span> (!match)
+<a name="l00173"></a>00173 <span class="keywordflow">return</span> -1;
+<a name="l00174"></a>00174 }
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 <span class="keywordflow">return</span> -1;
+<a name="l00177"></a>00177 }
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_utils.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_utils.c File Reference</h1><code>#include <<a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>></code><br>
+<code>#include <ctype.h></code><br>
+<code>#include <stdlib.h></code><br>
+<code>#include <alloca.h></code><br>
+
+<p>
+<div class="dynheader">
+Include dependency graph for lightmediascanner_utils.c:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__utils_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">lms_strstrip</a> (char *str, unsigned int *p_len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8c.html#45d15c8bfeddaef0d5b1d0bd9ecc0c79">lms_strstrip_and_free</a> (char **p_str, unsigned int *p_len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8c.html#9ed157dee5c16f4c62c5ae6e281580cf">lms_string_size_strip_and_free</a> (struct <a class="el" href="structlms__string__size.html">lms_string_size</a> *p)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8c.html#71ee8b57cf7c5eba8ec0593e756d2529">lms_which_extension</a> (const char *name, unsigned int name_len, const struct <a class="el" href="structlms__string__size.html">lms_string_size</a> *exts, unsigned int exts_len)</td></tr>
+
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="9ed157dee5c16f4c62c5ae6e281580cf"></a><!-- doxytag: member="lightmediascanner_utils.c::lms_string_size_strip_and_free" ref="9ed157dee5c16f4c62c5ae6e281580cf" args="(struct lms_string_size *p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_string_size_strip_and_free </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> * </td>
+ <td class="paramname"> <em>p</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<a class="el" href="structlms__string__size.html">lms_string_size</a> version of <a class="el" href="lightmediascanner__utils_8c.html#45d15c8bfeddaef0d5b1d0bd9ecc0c79">lms_strstrip_and_free()</a>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>*p</em> </td><td>pointer to <a class="el" href="structlms__string__size.html">lms_string_size</a> to be stripped.</td></tr>
+ </table>
+</dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>this will call free() on lms_string_size->str if it becomes empty. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8c-source.html#l00114">114</a> of file <a class="el" href="lightmediascanner__utils_8c-source.html">lightmediascanner_utils.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__utils_8h-source.html#l00051">lms_string_size::len</a>, <a class="el" href="lightmediascanner__utils_8c-source.html#l00034">lms_strstrip()</a>, and <a class="el" href="lightmediascanner__utils_8h-source.html#l00050">lms_string_size::str</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="086d2449129976541c66a83984bffbe6"></a><!-- doxytag: member="lightmediascanner_utils.c::lms_strstrip" ref="086d2449129976541c66a83984bffbe6" args="(char *str, unsigned int *p_len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_strstrip </td>
+ <td>(</td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"> <em>str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int * </td>
+ <td class="paramname"> <em>p_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> Strips string, in place.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>str</em> </td><td>string to be stripped. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>p_len</em> </td><td>string length to analyse, also the place where the final size is stored. </td></tr>
+ </table>
+</dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8c-source.html#l00034">34</a> of file <a class="el" href="lightmediascanner__utils_8c-source.html">lightmediascanner_utils.c</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__utils_8c-source.html#l00114">lms_string_size_strip_and_free()</a>, and <a class="el" href="lightmediascanner__utils_8c-source.html#l00094">lms_strstrip_and_free()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="45d15c8bfeddaef0d5b1d0bd9ecc0c79"></a><!-- doxytag: member="lightmediascanner_utils.c::lms_strstrip_and_free" ref="45d15c8bfeddaef0d5b1d0bd9ecc0c79" args="(char **p_str, unsigned int *p_len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void lms_strstrip_and_free </td>
+ <td>(</td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"> <em>p_str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int * </td>
+ <td class="paramname"> <em>p_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+If string exists, strips it, in place, free if *p_len = 0<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>p_str</em> </td><td>pointer to string to be stripped. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>p_len</em> </td><td>string length to analyse, also the place where the final size is stored.</td></tr>
+ </table>
+</dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>this will call free() on *p_str if it becomes empty. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8c-source.html#l00094">94</a> of file <a class="el" href="lightmediascanner__utils_8c-source.html">lightmediascanner_utils.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__utils_8c-source.html#l00034">lms_strstrip()</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="71ee8b57cf7c5eba8ec0593e756d2529"></a><!-- doxytag: member="lightmediascanner_utils.c::lms_which_extension" ref="71ee8b57cf7c5eba8ec0593e756d2529" args="(const char *name, unsigned int name_len, const struct lms_string_size *exts, unsigned int exts_len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int lms_which_extension </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>name_len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const struct <a class="el" href="structlms__string__size.html">lms_string_size</a> * </td>
+ <td class="paramname"> <em>exts</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>exts_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Find out which of the given extensions matches the given name.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>string to analyse. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>name_len</em> </td><td>string length. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>exts</em> </td><td>array of extensions to be checked. </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>exts_len</em> </td><td>number of items in array <code>exts</code> </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>index in <code>exts</code> or -1 if it doesn't match none. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8c-source.html#l00138">138</a> of file <a class="el" href="lightmediascanner__utils_8c-source.html">lightmediascanner_utils.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__utils_8h-source.html#l00050">lms_string_size::str</a>.</p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_strstrip_and_free",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_strstrip",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6"];
+}
--- /dev/null
+edd5d23fa02c2e269c9469f410510507
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_string_size_strip_and_free",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_strstrip",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6"];
+}
--- /dev/null
+c00672260f07c201c197966ed537d380
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_utils.c",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lightmediascanner_utils.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8h.html"];
+ Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="ctype.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="stdlib.h",height=0.2,width=0.4,color="grey75"];
+ Node1 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="alloca.h",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+a1dc263fa97a14958d091ffea4fedd69
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_utils.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<h1>src/lib/lightmediascanner_utils.h</h1><a href="lightmediascanner__utils_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
+<a name="l00021"></a>00021 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_UTILS_H_</span>
+<a name="l00022"></a><a class="code" href="lightmediascanner__utils_8h.html#8ad3460b8bb014878af2cdfd42fcf5c6">00022</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_UTILS_H_ 1</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="preprocessor">#ifdef API</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#undef API</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a>00028 <span class="preprocessor">#ifdef __GNUC__</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ >= 4</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor"># define API __attribute__ ((visibility("default")))</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...) __attribute__((nonnull(__VA_ARGS__)))</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00040"></a><a class="code" href="lightmediascanner__utils_8h.html#d8ce4efaa307683d3d763b37b4711c53">00040</a> <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00041"></a><a class="code" href="lightmediascanner__utils_8h.html#6fe68cac0abf3e2ca61141920414e93a">00041</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>
+<a name="l00048"></a>00048
+<a name="l00049"></a><a class="code" href="structlms__string__size.html">00049</a> <span class="keyword">struct </span><a class="code" href="structlms__string__size.html">lms_string_size</a> {
+<a name="l00050"></a><a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">00050</a> <span class="keywordtype">char</span> *<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>;
+<a name="l00051"></a><a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">00051</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a>;
+<a name="l00052"></a>00052 };
+<a name="l00053"></a>00053
+<a name="l00054"></a><a class="code" href="lightmediascanner__utils_8h.html#786c453d995be000d52360f327a6816b">00054</a> <span class="preprocessor">#define LMS_STATIC_STRING_SIZE(s) {s, sizeof(s) - 1}</span>
+<a name="l00055"></a><a class="code" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">00055</a> <span class="preprocessor"></span><span class="preprocessor">#define LMS_ARRAY_SIZE(a) (sizeof(a) / sizeof(*a))</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span>
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">lms_strstrip</a>(<span class="keywordtype">char</span> *str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00059"></a>00059 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="lightmediascanner__utils_8c.html#45d15c8bfeddaef0d5b1d0bd9ecc0c79">lms_strstrip_and_free</a>(<span class="keywordtype">char</span> **p_str, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *p_len) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00060"></a>00060 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">void</span> <a class="code" href="lightmediascanner__utils_8c.html#9ed157dee5c16f4c62c5ae6e281580cf">lms_string_size_strip_and_free</a>(<span class="keyword">struct</span> <a class="code" href="structlms__string__size.html">lms_string_size</a> *p) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00061"></a>00061 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner__utils_8c.html#71ee8b57cf7c5eba8ec0593e756d2529">lms_which_extension</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> name_len, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlms__string__size.html">lms_string_size</a> *exts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exts_len) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 3);
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span>}
+<a name="l00067"></a>00067 <span class="preprocessor">#endif</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_UTILS_H_ */</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: src/lib/lightmediascanner_utils.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>src/lib/lightmediascanner_utils.h File Reference</h1>
+<p>
+<div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dynsection">
+</div>
+
+<p>
+<a href="lightmediascanner__utils_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__string__size.html">lms_string_size</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#8ad3460b8bb014878af2cdfd42fcf5c6">_LIGHTMEDIASCANNER_UTILS_H_</a> 1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(...)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#786c453d995be000d52360f327a6816b">LMS_STATIC_STRING_SIZE</a>(s) {s, sizeof(s) - 1}</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">LMS_ARRAY_SIZE</a>(a) (sizeof(a) / sizeof(*a))</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#281568969e526a7bdf687da4d1cc75ab">lms_strstrip</a> (char *str, unsigned int *p_len) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void API void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#01cee33e2410ae7081905a4e06d890cc">lms_strstrip_and_free</a> (char **p_str, unsigned int *p_len) GNUC_NON_NULL(1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API void API void API void </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#5a7e5da69500a12f447a77177dbb6e0d">lms_string_size_strip_and_free</a> (struct <a class="el" href="structlms__string__size.html">lms_string_size</a> *p) GNUC_NON_NULL(1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">API int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#7dfc23066442e00fff5cbe77e6f1426e">lms_which_extension</a> (const char *name, unsigned int name_len, const struct <a class="el" href="structlms__string__size.html">lms_string_size</a> *exts, unsigned int exts_len) GNUC_NON_NULL(1</td></tr>
+
+</table>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="8ad3460b8bb014878af2cdfd42fcf5c6"></a><!-- doxytag: member="lightmediascanner_utils.h::_LIGHTMEDIASCANNER_UTILS_H_" ref="8ad3460b8bb014878af2cdfd42fcf5c6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _LIGHTMEDIASCANNER_UTILS_H_ 1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Copyright (C) 2007 by INdT<p>
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<p>
+You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Gustavo Sverzut Barbieri <<a href="mailto:gustavo.barbieri@openbossa.org">gustavo.barbieri@openbossa.org</a>> </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8h-source.html#l00022">22</a> of file <a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d8ce4efaa307683d3d763b37b4711c53"></a><!-- doxytag: member="lightmediascanner_utils.h::API" ref="d8ce4efaa307683d3d763b37b4711c53" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define API </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8h-source.html#l00040">40</a> of file <a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6fe68cac0abf3e2ca61141920414e93a"></a><!-- doxytag: member="lightmediascanner_utils.h::GNUC_NON_NULL" ref="6fe68cac0abf3e2ca61141920414e93a" args="(...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GNUC_NON_NULL </td>
+ <td>(</td>
+ <td class="paramtype"> <em>...</em> </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8h-source.html#l00041">41</a> of file <a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="13a0622cfcc91eec261da4285621bdcc"></a><!-- doxytag: member="lightmediascanner_utils.h::LMS_ARRAY_SIZE" ref="13a0622cfcc91eec261da4285621bdcc" args="(a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LMS_ARRAY_SIZE </td>
+ <td>(</td>
+ <td class="paramtype">a </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td> (sizeof(a) / sizeof(*a))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8h-source.html#l00055">55</a> of file <a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="786c453d995be000d52360f327a6816b"></a><!-- doxytag: member="lightmediascanner_utils.h::LMS_STATIC_STRING_SIZE" ref="786c453d995be000d52360f327a6816b" args="(s)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LMS_STATIC_STRING_SIZE </td>
+ <td>(</td>
+ <td class="paramtype">s </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+ <td> {s, sizeof(s) - 1}</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8h-source.html#l00054">54</a> of file <a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>.</p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="5a7e5da69500a12f447a77177dbb6e0d"></a><!-- doxytag: member="lightmediascanner_utils.h::lms_string_size_strip_and_free" ref="5a7e5da69500a12f447a77177dbb6e0d" args="(struct lms_string_size *p) GNUC_NON_NULL(1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API void API void API void lms_string_size_strip_and_free </td>
+ <td>(</td>
+ <td class="paramtype">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> * </td>
+ <td class="paramname"> <em>p</em> </td>
+ <td> ) </td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<a class="el" href="structlms__string__size.html">lms_string_size</a> version of <a class="el" href="lightmediascanner__utils_8c.html#45d15c8bfeddaef0d5b1d0bd9ecc0c79">lms_strstrip_and_free()</a>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>*p</em> </td><td>pointer to <a class="el" href="structlms__string__size.html">lms_string_size</a> to be stripped.</td></tr>
+ </table>
+</dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>this will call free() on lms_string_size->str if it becomes empty. </dd></dl>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8c-source.html#l00114">114</a> of file <a class="el" href="lightmediascanner__utils_8c-source.html">lightmediascanner_utils.c</a>.</p>
+
+<p>References <a class="el" href="lightmediascanner__utils_8h-source.html#l00051">lms_string_size::len</a>, <a class="el" href="lightmediascanner__utils_8c-source.html#l00034">lms_strstrip()</a>, and <a class="el" href="lightmediascanner__utils_8h-source.html#l00050">lms_string_size::str</a>.</p>
+
+<p>
+<div class="dynheader">
+Here is the call graph for this function:</div>
+<div class="dynsection">
+</div>
+
+</div>
+</div><p>
+<a class="anchor" name="281568969e526a7bdf687da4d1cc75ab"></a><!-- doxytag: member="lightmediascanner_utils.h::lms_strstrip" ref="281568969e526a7bdf687da4d1cc75ab" args="(char *str, unsigned int *p_len) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API void lms_strstrip </td>
+ <td>(</td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"> <em>str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int * </td>
+ <td class="paramname"> <em>p_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="01cee33e2410ae7081905a4e06d890cc"></a><!-- doxytag: member="lightmediascanner_utils.h::lms_strstrip_and_free" ref="01cee33e2410ae7081905a4e06d890cc" args="(char **p_str, unsigned int *p_len) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API void API void lms_strstrip_and_free </td>
+ <td>(</td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"> <em>p_str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int * </td>
+ <td class="paramname"> <em>p_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="7dfc23066442e00fff5cbe77e6f1426e"></a><!-- doxytag: member="lightmediascanner_utils.h::lms_which_extension" ref="7dfc23066442e00fff5cbe77e6f1426e" args="(const char *name, unsigned int name_len, const struct lms_string_size *exts, unsigned int exts_len) GNUC_NON_NULL(1" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">API int lms_which_extension </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>name_len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const struct <a class="el" href="structlms__string__size.html">lms_string_size</a> * </td>
+ <td class="paramname"> <em>exts</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"> <em>exts_len</em></td><td> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ rankdir=LR;
+ Node1 [label="lms_string_size_strip_and_free",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="lms_strstrip",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6"];
+}
--- /dev/null
+c00672260f07c201c197966ed537d380
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="src/lib/lightmediascanner_utils.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node1 -> Node2 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node2 [label="src/lib/lightmediascanner_db.h",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db_8h.html"];
+ Node2 -> Node3 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node3 [label="src/lib/lightmediascanner_db_audio.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__audio_8c.html"];
+ Node2 -> Node4 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node4 [label="src/lib/lightmediascanner_db_image.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__image_8c.html"];
+ Node2 -> Node5 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node5 [label="src/lib/lightmediascanner_db_playlist.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__playlist_8c.html"];
+ Node2 -> Node6 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node6 [label="src/lib/lightmediascanner_db_video.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__db__video_8c.html"];
+ Node1 -> Node7 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+ Node7 [label="src/lib/lightmediascanner_utils.c",height=0.2,width=0.4,color="black",URL="$lightmediascanner__utils_8c.html"];
+}
--- /dev/null
+8923213b8c529c541c691c72abf46ccc
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: Module Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Modules</h1>Here is a list of all modules:<ul>
+<li><a class="el" href="group__LMS__API.html">User-API</a>
+<li><a class="el" href="group__LMS__CHARSET.html">Charset Conversion</a>
+<li><a class="el" href="group__LMS__DB.html">DataBase-API</a>
+<li><a class="el" href="group__LMS__Plugin.html">Plugins-API</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: cinfo Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>cinfo Struct Reference</h1><!-- doxytag: class="cinfo" --><code>#include <<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for cinfo:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structlms.html">lms_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">lms</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00049">49</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="eff7e00325ac7d8674f42f4bfc198b5a"></a><!-- doxytag: member="cinfo::lms" ref="eff7e00325ac7d8674f42f4bfc198b5a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structlms.html">lms_t</a>* <a class="el" href="structcinfo.html#eff7e00325ac7d8674f42f4bfc198b5a">cinfo::lms</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00050">50</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, <a class="el" href="lightmediascanner__check_8c-source.html#l00949">lms_check_single_process()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00634">lms_create_slave()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l01005">lms_process()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{cinfo\n|+ lms\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="lms",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms\n|+ parsers\l+ n_parsers\l+ cs_conv\l+ db_path\l+ slave_timeout\l+ cb\l+ data\l+ free_data\l+ progress\l+ commit_interval\l+ is_processing\l+ stop_processing\l|}",height=0.2,width=0.4,color="black",URL="$structlms.html"];
+ Node3 -> Node2 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="cs_conv",arrowtail="open",fontname="FreeSans"];
+ Node3 [label="{lms_charset_conv\n|+ check\l+ fallback\l+ size\l+ convs\l+ names\l|}",height=0.2,width=0.4,color="grey75"];
+ Node4 -> Node2 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="parsers",arrowtail="open",fontname="FreeSans"];
+ Node4 [label="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}",height=0.2,width=0.4,color="black",URL="$structparser.html"];
+ Node5 -> Node4 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="plugin",arrowtail="open",fontname="FreeSans"];
+ Node5 [label="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}",height=0.2,width=0.4,color="black",URL="$structlms__plugin.html"];
+}
--- /dev/null
+c51900b708126a53f243416c9af586aa
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: fds Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>fds Struct Reference</h1><!-- doxytag: class="fds" --><code>#include <<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfds.html#d13e19697072e306771103286a8316d0">w</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00044">44</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="c49bfa8d58564d4c483eb434b9ff5710"></a><!-- doxytag: member="fds::r" ref="c49bfa8d58564d4c483eb434b9ff5710" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">fds::r</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00045">45</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00607">lms_create_pipes()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d13e19697072e306771103286a8316d0"></a><!-- doxytag: member="fds::w" ref="d13e19697072e306771103286a8316d0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structfds.html#d13e19697072e306771103286a8316d0">fds::w</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00046">46</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00607">lms_create_pipes()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms Struct Reference</h1><!-- doxytag: class="lms" --><code>#include <<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for lms:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structparser.html">parser</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap>struct {</td></tr>
+
+<tr><td class="memItemLeft" nowrap> <a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> <a class="el" href="structlms.html#94615d22fba40d580a8a0055d28221c4">cb</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap> void * <a class="el" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">data</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap> <a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> <a class="el" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">free_data</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap valign="top">} </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">progress</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>:1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms.html#d028e3681568215f6facd7d477c74461">stop_processing</a>:1</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00076">76</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="94615d22fba40d580a8a0055d28221c4"></a><!-- doxytag: member="lms::cb" ref="94615d22fba40d580a8a0055d28221c4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="lightmediascanner_8h.html#117b4bb24ec8fc48fc4e6f0d7fa9ea3a">lms_progress_callback_t</a> <a class="el" href="structlms.html#94615d22fba40d580a8a0055d28221c4">lms::cb</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00083">83</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00195">lms_set_progress_callback()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="1dc82aac2ab3ff643027878bb1aa3cb8"></a><!-- doxytag: member="lms::commit_interval" ref="1dc82aac2ab3ff643027878bb1aa3cb8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">lms::commit_interval</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00087">87</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00449">lms_get_commit_interval()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00121">lms_new()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00472">lms_set_commit_interval()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="eba2db305bafddedf143ff7b9f2396db"></a><!-- doxytag: member="lms::cs_conv" ref="eba2db305bafddedf143ff7b9f2396db" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a>* <a class="el" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">lms::cs_conv</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00079">79</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00496">lms_charset_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00519">lms_charset_del()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00121">lms_new()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="2416f15bfd15aaa5e75606b5a0686362"></a><!-- doxytag: member="lms::data" ref="2416f15bfd15aaa5e75606b5a0686362" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* <a class="el" href="structlms.html#2416f15bfd15aaa5e75606b5a0686362">lms::data</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00084">84</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00195">lms_set_progress_callback()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="02e767169813808f193c23733ba89b4b"></a><!-- doxytag: member="lms::db_path" ref="02e767169813808f193c23733ba89b4b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="structlms.html#02e767169813808f193c23733ba89b4b">lms::db_path</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00080">80</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00385">lms_get_db_path()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00121">lms_new()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="3f04a1830b8ffa69c9da089b7e6fb258"></a><!-- doxytag: member="lms::free_data" ref="3f04a1830b8ffa69c9da089b7e6fb258" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="lightmediascanner_8h.html#55ee3894f334dc5b30431bf94971f110">lms_free_callback_t</a> <a class="el" href="structlms.html#3f04a1830b8ffa69c9da089b7e6fb258">lms::free_data</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00085">85</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00195">lms_set_progress_callback()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="bb03533445b77299e964b2ec02bca039"></a><!-- doxytag: member="lms::is_processing" ref="bb03533445b77299e964b2ec02bca039" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structlms.html#bb03533445b77299e964b2ec02bca039">lms::is_processing</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00088">88</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, <a class="el" href="lightmediascanner__check_8c-source.html#l00949">lms_check_single_process()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00366">lms_is_processing()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00221">lms_parser_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00334">lms_parser_del()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01082">lms_stop_processing()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="9cdd3a937a0a2bd4515e9e888bb519e3"></a><!-- doxytag: member="lms::n_parsers" ref="9cdd3a937a0a2bd4515e9e888bb519e3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">lms::n_parsers</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00078">78</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00221">lms_parser_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00334">lms_parser_del()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00294">lms_parser_del_int()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00345">lms_parsers_finish()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00387">lms_parsers_run()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="52883423c9a1276420ba2bb9b50a138c"></a><!-- doxytag: member="lms::parsers" ref="52883423c9a1276420ba2bb9b50a138c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structparser.html">parser</a>* <a class="el" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">lms::parsers</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00077">77</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00221">lms_parser_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00334">lms_parser_del()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00294">lms_parser_del_int()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00345">lms_parsers_finish()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00387">lms_parsers_run()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="3f4bc299aa74c9255b730e106e0e7a8f"></a><!-- doxytag: member="lms::progress" ref="3f4bc299aa74c9255b730e106e0e7a8f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct { ... } <a class="el" href="structlms.html#3f4bc299aa74c9255b730e106e0e7a8f">lms::progress</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00159">lms_free()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00195">lms_set_progress_callback()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="0f545adf2fc37994b7f55f7ea7aac555"></a><!-- doxytag: member="lms::slave_timeout" ref="0f545adf2fc37994b7f55f7ea7aac555" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">lms::slave_timeout</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00081">81</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00407">lms_get_slave_timeout()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00121">lms_new()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00427">lms_set_slave_timeout()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d028e3681568215f6facd7d477c74461"></a><!-- doxytag: member="lms::stop_processing" ref="d028e3681568215f6facd7d477c74461" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structlms.html#d028e3681568215f6facd7d477c74461">lms::stop_processing</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00089">89</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, <a class="el" href="lightmediascanner__check_8c-source.html#l00949">lms_check_single_process()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01082">lms_stop_processing()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_audio_info Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_audio_info Struct Reference<br>
+<small>
+[<a class="el" href="group__LMS__DB.html">DataBase-API</a>]</small>
+</h1><!-- doxytag: class="lms_audio_info" --><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for lms_audio_info:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">id</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">title</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">artist</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">album</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">genre</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html#7197e471d313274c4e361b2ff9e60e8a">playcnt</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">trackno</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__audio__info.html#932e73ccd8ff946831930be65d1ba2d2">rating</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00086">86</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="caeda14ddf0051e9dd69861171fb66a2"></a><!-- doxytag: member="lms_audio_info::album" ref="caeda14ddf0051e9dd69861171fb66a2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__audio__info.html#caeda14ddf0051e9dd69861171fb66a2">lms_audio_info::album</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00090">90</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6f9fa88539da4867bc34fa1e7c17816c"></a><!-- doxytag: member="lms_audio_info::artist" ref="6f9fa88539da4867bc34fa1e7c17816c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__audio__info.html#6f9fa88539da4867bc34fa1e7c17816c">lms_audio_info::artist</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00089">89</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="72efb9991c5f49eabd62aa61ead91031"></a><!-- doxytag: member="lms_audio_info::genre" ref="72efb9991c5f49eabd62aa61ead91031" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__audio__info.html#72efb9991c5f49eabd62aa61ead91031">lms_audio_info::genre</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00091">91</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="b59ffe210521786be5fe579167b24bc4"></a><!-- doxytag: member="lms_audio_info::id" ref="b59ffe210521786be5fe579167b24bc4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int64_t <a class="el" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">lms_audio_info::id</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00087">87</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00694">lms_db_audio_add()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="7197e471d313274c4e361b2ff9e60e8a"></a><!-- doxytag: member="lms_audio_info::playcnt" ref="7197e471d313274c4e361b2ff9e60e8a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structlms__audio__info.html#7197e471d313274c4e361b2ff9e60e8a">lms_audio_info::playcnt</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00092">92</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="932e73ccd8ff946831930be65d1ba2d2"></a><!-- doxytag: member="lms_audio_info::rating" ref="932e73ccd8ff946831930be65d1ba2d2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned char <a class="el" href="structlms__audio__info.html#932e73ccd8ff946831930be65d1ba2d2">lms_audio_info::rating</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00094">94</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="c87982b6b219add6aff3ce9c25fe00bf"></a><!-- doxytag: member="lms_audio_info::title" ref="c87982b6b219add6aff3ce9c25fe00bf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">lms_audio_info::title</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00088">88</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d372f08ada955f75be8f218d90093242"></a><!-- doxytag: member="lms_audio_info::trackno" ref="d372f08ada955f75be8f218d90093242" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned char <a class="el" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">lms_audio_info::trackno</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00093">93</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{lms_audio_info\n|+ id\l+ title\l+ artist\l+ album\l+ genre\l+ playcnt\l+ trackno\l+ rating\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="title\nartist\nalbum\ngenre",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms_string_size\n|+ str\l+ len\l|}",height=0.2,width=0.4,color="black",URL="$structlms__string__size.html"];
+}
--- /dev/null
+f842b2815e9b81c09db9d42be21f64b5
\ No newline at end of file
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{lms\n|+ parsers\l+ n_parsers\l+ cs_conv\l+ db_path\l+ slave_timeout\l+ cb\l+ data\l+ free_data\l+ progress\l+ commit_interval\l+ is_processing\l+ stop_processing\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="cs_conv",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms_charset_conv\n|+ check\l+ fallback\l+ size\l+ convs\l+ names\l|}",height=0.2,width=0.4,color="grey75"];
+ Node3 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="parsers",arrowtail="open",fontname="FreeSans"];
+ Node3 [label="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}",height=0.2,width=0.4,color="black",URL="$structparser.html"];
+ Node4 -> Node3 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="plugin",arrowtail="open",fontname="FreeSans"];
+ Node4 [label="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}",height=0.2,width=0.4,color="black",URL="$structlms__plugin.html"];
+}
--- /dev/null
+0b9559d9d2cb96f2994788bb76df7bfd
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_context Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_context Struct Reference</h1><!-- doxytag: class="lms_context" --><code>#include <<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for lms_context:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">sqlite3 * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">db</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__context.html#a5ce50393bbe62f6357934a1d9ce5a61">cs_conv</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00155">155</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="a5ce50393bbe62f6357934a1d9ce5a61"></a><!-- doxytag: member="lms_context::cs_conv" ref="a5ce50393bbe62f6357934a1d9ce5a61" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a>* <a class="el" href="structlms__context.html#a5ce50393bbe62f6357934a1d9ce5a61">lms_context::cs_conv</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+charset conversion tool
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00157">157</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="310d38a2fab9ecea67601d0c6a3d8d81"></a><!-- doxytag: member="lms_context::db" ref="310d38a2fab9ecea67601d0c6a3d8d81" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">sqlite3* <a class="el" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">lms_context::db</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+database instance
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00156">156</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{lms_context\n|+ db\l+ cs_conv\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="cs_conv",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms_charset_conv\n|+ check\l+ fallback\l+ size\l+ convs\l+ names\l|}",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+1e2251224dceddec4b9c7df5f598a823
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_db_cache Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_db_cache Struct Reference</h1><!-- doxytag: class="lms_db_cache" --><code>#include <<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for lms_db_cache:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__db__cache__entry.html">lms_db_cache_entry</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00062">62</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="0056bfe95b38863dc9b067d699230690"></a><!-- doxytag: member="lms_db_cache::entries" ref="0056bfe95b38863dc9b067d699230690" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__db__cache__entry.html">lms_db_cache_entry</a>* <a class="el" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">lms_db_cache::entries</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00064">64</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00437">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00462">lms_db_cache_get()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="b325e01e42fd3b0f11d52328522c6414"></a><!-- doxytag: member="lms_db_cache::size" ref="b325e01e42fd3b0f11d52328522c6414" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">lms_db_cache::size</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00063">63</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">lms_db_cache_add()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00437">lms_db_cache_del()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{lms_db_cache\n|+ size\l+ entries\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="entries",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms_db_cache_entry\n|+ db\l+ data\l|}",height=0.2,width=0.4,color="black",URL="$structlms__db__cache__entry.html"];
+}
--- /dev/null
+77e3ebea0d93a6c4d32dd146b123397d
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_db_cache_entry Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_db_cache_entry Struct Reference</h1><!-- doxytag: class="lms_db_cache_entry" --><code>#include <<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const sqlite3 * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00057">57</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="53488063740ff72c830be3103e7150fe"></a><!-- doxytag: member="lms_db_cache_entry::data" ref="53488063740ff72c830be3103e7150fe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* <a class="el" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">lms_db_cache_entry::data</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00059">59</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00437">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00462">lms_db_cache_get()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="01aadf6d9a8161696019d39566b15760"></a><!-- doxytag: member="lms_db_cache_entry::db" ref="01aadf6d9a8161696019d39566b15760" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const sqlite3* <a class="el" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">lms_db_cache_entry::db</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00058">58</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00407">lms_db_cache_add()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_file_info Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_file_info Struct Reference</h1><!-- doxytag: class="lms_file_info" --><code>#include <<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">time_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">time_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00145">145</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="ccc82711360714ff6ccd373fb7a42112"></a><!-- doxytag: member="lms_file_info::base" ref="ccc82711360714ff6ccd373fb7a42112" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">lms_file_info::base</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+index of basename inside path
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00148">148</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="570ae808983e67ae7b22a2fec892cffd"></a><!-- doxytag: member="lms_file_info::dtime" ref="570ae808983e67ae7b22a2fec892cffd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">time_t <a class="el" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">lms_file_info::dtime</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+deletion time
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00151">151</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">lms_db_set_file_dtime()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">lms_db_update_file_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d68ded5c64ae28a4976637f8483e9cfe"></a><!-- doxytag: member="lms_file_info::id" ref="d68ded5c64ae28a4976637f8483e9cfe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int64_t <a class="el" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">lms_file_info::id</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+database id
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00149">149</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00717">lms_db_delete_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00747">lms_db_set_file_dtime()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">lms_db_update_file_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="4aa878eefdde84541021087192b9dacd"></a><!-- doxytag: member="lms_file_info::mtime" ref="4aa878eefdde84541021087192b9dacd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">time_t <a class="el" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">lms_file_info::mtime</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+in-disk modification time
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00150">150</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">lms_db_update_file_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="1fa6966afec95bbb00ee01f345948e44"></a><!-- doxytag: member="lms_file_info::path" ref="1fa6966afec95bbb00ee01f345948e44" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">lms_file_info::path</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+file path
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00146">146</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="9d74df2696cfd0f516e61e9db2b35731"></a><!-- doxytag: member="lms_file_info::path_len" ref="9d74df2696cfd0f516e61e9db2b35731" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">lms_file_info::path_len</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+path length
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00147">147</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="b318b81fc934636a904f5d84efe8c1ee"></a><!-- doxytag: member="lms_file_info::size" ref="b318b81fc934636a904f5d84efe8c1ee" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">size_t <a class="el" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">lms_file_info::size</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+file size in bytes
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00152">152</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00587">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00673">lms_db_insert_file_info()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00629">lms_db_update_file_info()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_gps_info Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_gps_info Struct Reference<br>
+<small>
+[<a class="el" href="group__LMS__DB.html">DataBase-API</a>]</small>
+</h1><!-- doxytag: class="lms_gps_info" --><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__gps__info.html#70f152098accf3d46f18bc159e3b4359">latitude</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__gps__info.html#109202a83eb79b9a10df135600260e1b">longitude</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__gps__info.html#9b56b5dbae3e5c5722f7331c2bcbd520">altitude</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00061">61</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="9b56b5dbae3e5c5722f7331c2bcbd520"></a><!-- doxytag: member="lms_gps_info::altitude" ref="9b56b5dbae3e5c5722f7331c2bcbd520" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double <a class="el" href="structlms__gps__info.html#9b56b5dbae3e5c5722f7331c2bcbd520">lms_gps_info::altitude</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00064">64</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="70f152098accf3d46f18bc159e3b4359"></a><!-- doxytag: member="lms_gps_info::latitude" ref="70f152098accf3d46f18bc159e3b4359" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double <a class="el" href="structlms__gps__info.html#70f152098accf3d46f18bc159e3b4359">lms_gps_info::latitude</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00062">62</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="109202a83eb79b9a10df135600260e1b"></a><!-- doxytag: member="lms_gps_info::longitude" ref="109202a83eb79b9a10df135600260e1b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double <a class="el" href="structlms__gps__info.html#109202a83eb79b9a10df135600260e1b">lms_gps_info::longitude</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00063">63</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_image_info Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_image_info Struct Reference<br>
+<small>
+[<a class="el" href="group__LMS__DB.html">DataBase-API</a>]</small>
+</h1><!-- doxytag: class="lms_image_info" --><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for lms_image_info:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">id</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html#6242d231ae1972fb25bdaeed614d7a63">title</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">artist</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html#150973d3ac9f60f1b74f0a0d08c7f288">date</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html#fbd2df9f6f5f290ac02ce4d803677249">width</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html#f2ae81781dadf7ecaa307b3bc91e710e">height</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html#434330468b69d0f14b344c672d4778af">orientation</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__gps__info.html">lms_gps_info</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">gps</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00067">67</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="ee7b8401f3272a0855ea27a2249a8aab"></a><!-- doxytag: member="lms_image_info::artist" ref="ee7b8401f3272a0855ea27a2249a8aab" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">lms_image_info::artist</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00070">70</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="150973d3ac9f60f1b74f0a0d08c7f288"></a><!-- doxytag: member="lms_image_info::date" ref="150973d3ac9f60f1b74f0a0d08c7f288" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structlms__image__info.html#150973d3ac9f60f1b74f0a0d08c7f288">lms_image_info::date</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00071">71</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="2f003c2cfb937ed5d667a188ba0d54e3"></a><!-- doxytag: member="lms_image_info::gps" ref="2f003c2cfb937ed5d667a188ba0d54e3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__gps__info.html">lms_gps_info</a> <a class="el" href="structlms__image__info.html#2f003c2cfb937ed5d667a188ba0d54e3">lms_image_info::gps</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00075">75</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f2ae81781dadf7ecaa307b3bc91e710e"></a><!-- doxytag: member="lms_image_info::height" ref="f2ae81781dadf7ecaa307b3bc91e710e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned short <a class="el" href="structlms__image__info.html#f2ae81781dadf7ecaa307b3bc91e710e">lms_image_info::height</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00073">73</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="e6af5a9d85600a7694991681d141844b"></a><!-- doxytag: member="lms_image_info::id" ref="e6af5a9d85600a7694991681d141844b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int64_t <a class="el" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">lms_image_info::id</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00068">68</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__image_8c-source.html#l00293">lms_db_image_add()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="434330468b69d0f14b344c672d4778af"></a><!-- doxytag: member="lms_image_info::orientation" ref="434330468b69d0f14b344c672d4778af" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned short <a class="el" href="structlms__image__info.html#434330468b69d0f14b344c672d4778af">lms_image_info::orientation</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00074">74</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6242d231ae1972fb25bdaeed614d7a63"></a><!-- doxytag: member="lms_image_info::title" ref="6242d231ae1972fb25bdaeed614d7a63" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__image__info.html#6242d231ae1972fb25bdaeed614d7a63">lms_image_info::title</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00069">69</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="fbd2df9f6f5f290ac02ce4d803677249"></a><!-- doxytag: member="lms_image_info::width" ref="fbd2df9f6f5f290ac02ce4d803677249" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned short <a class="el" href="structlms__image__info.html#fbd2df9f6f5f290ac02ce4d803677249">lms_image_info::width</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00072">72</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{lms_image_info\n|+ id\l+ title\l+ artist\l+ date\l+ width\l+ height\l+ orientation\l+ gps\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="gps",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms_gps_info\n|+ latitude\l+ longitude\l+ altitude\l|}",height=0.2,width=0.4,color="black",URL="$structlms__gps__info.html"];
+ Node3 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="title\nartist",arrowtail="open",fontname="FreeSans"];
+ Node3 [label="{lms_string_size\n|+ str\l+ len\l|}",height=0.2,width=0.4,color="black",URL="$structlms__string__size.html"];
+}
--- /dev/null
+f13cb7e7d1bb1ff78e8ff47835fb3199
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_parser_info Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_parser_info Struct Reference</h1><!-- doxytag: class="lms_parser_info" --><code>#include <<a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__parser__info.html#5ab9ec0ea57b30e14d5f6f671aac6590">path</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">name</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char *const * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">categories</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">description</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">version</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char *const * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">authors</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">uri</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00198">198</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="c22d79b37c4c2d513eaeb3b618f524bf"></a><!-- doxytag: member="lms_parser_info::authors" ref="c22d79b37c4c2d513eaeb3b618f524bf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* const* <a class="el" href="structlms__parser__info.html#c22d79b37c4c2d513eaeb3b618f524bf">lms_parser_info::authors</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00204">204</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="7ec98aa66587df4215d9d2e1be1efc04"></a><!-- doxytag: member="lms_parser_info::categories" ref="7ec98aa66587df4215d9d2e1be1efc04" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* const* <a class="el" href="structlms__parser__info.html#7ec98aa66587df4215d9d2e1be1efc04">lms_parser_info::categories</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00201">201</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="46ca7f8f9d14332d96c34eec8425f92a"></a><!-- doxytag: member="lms_parser_info::description" ref="46ca7f8f9d14332d96c34eec8425f92a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__parser__info.html#46ca7f8f9d14332d96c34eec8425f92a">lms_parser_info::description</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00202">202</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="8c1195dd47805f8061b3c69691d60029"></a><!-- doxytag: member="lms_parser_info::name" ref="8c1195dd47805f8061b3c69691d60029" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__parser__info.html#8c1195dd47805f8061b3c69691d60029">lms_parser_info::name</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00200">200</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="5ab9ec0ea57b30e14d5f6f671aac6590"></a><!-- doxytag: member="lms_parser_info::path" ref="5ab9ec0ea57b30e14d5f6f671aac6590" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__parser__info.html#5ab9ec0ea57b30e14d5f6f671aac6590">lms_parser_info::path</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00199">199</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="3f567c146a83ca281ae431e060ab55a9"></a><!-- doxytag: member="lms_parser_info::uri" ref="3f567c146a83ca281ae431e060ab55a9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__parser__info.html#3f567c146a83ca281ae431e060ab55a9">lms_parser_info::uri</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00205">205</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="49c7d15bae321ad3c899823f4348cf59"></a><!-- doxytag: member="lms_parser_info::version" ref="49c7d15bae321ad3c899823f4348cf59" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__parser__info.html#49c7d15bae321ad3c899823f4348cf59">lms_parser_info::version</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner_8h-source.html#l00203">203</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_playlist_info Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_playlist_info Struct Reference<br>
+<small>
+[<a class="el" href="group__LMS__DB.html">DataBase-API</a>]</small>
+</h1><!-- doxytag: class="lms_playlist_info" --><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for lms_playlist_info:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">id</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__playlist__info.html#515e63ba413a60d21ee73687151387f0">title</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__playlist__info.html#81cc52f5b6ce04cd64cf3884cb774663">n_entries</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00119">119</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="c1b12bb87ec0bdbc356a6f6ce9b7eebf"></a><!-- doxytag: member="lms_playlist_info::id" ref="c1b12bb87ec0bdbc356a6f6ce9b7eebf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int64_t <a class="el" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">lms_playlist_info::id</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00120">120</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00257">lms_db_playlist_add()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="81cc52f5b6ce04cd64cf3884cb774663"></a><!-- doxytag: member="lms_playlist_info::n_entries" ref="81cc52f5b6ce04cd64cf3884cb774663" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structlms__playlist__info.html#81cc52f5b6ce04cd64cf3884cb774663">lms_playlist_info::n_entries</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00122">122</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="515e63ba413a60d21ee73687151387f0"></a><!-- doxytag: member="lms_playlist_info::title" ref="515e63ba413a60d21ee73687151387f0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__playlist__info.html#515e63ba413a60d21ee73687151387f0">lms_playlist_info::title</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00121">121</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{lms_playlist_info\n|+ id\l+ title\l+ n_entries\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="title",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms_string_size\n|+ str\l+ len\l|}",height=0.2,width=0.4,color="black",URL="$structlms__string__size.html"];
+}
--- /dev/null
+b7a20514412cb022593278aa681c52a1
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_plugin Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_plugin Struct Reference</h1><!-- doxytag: class="lms_plugin" --><code>#include <<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">name</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">lms_plugin_match_fn_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">match</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lms_plugin_parse_fn_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">parse</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lms_plugin_close_fn_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">close</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lms_plugin_setup_fn_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">setup</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lms_plugin_start_fn_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">start</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lms_plugin_finish_fn_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">finish</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00167">167</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="4921b3b79c7ecdddbe9f1a7c9f5019c7"></a><!-- doxytag: member="lms_plugin::close" ref="4921b3b79c7ecdddbe9f1a7c9f5019c7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="lightmediascanner__plugin_8h.html#44576c68c208c78f34f41fcd6c7c2c4b">lms_plugin_close_fn_t</a> <a class="el" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">lms_plugin::close</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+close plugin
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00171">171</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="839d286e12caa0711f3987adb4b803f0"></a><!-- doxytag: member="lms_plugin::finish" ref="839d286e12caa0711f3987adb4b803f0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="lightmediascanner__plugin_8h.html#c72facc8d4fa98f660fd064c80d5b321">lms_plugin_finish_fn_t</a> <a class="el" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">lms_plugin::finish</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+finish plugin
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00174">174</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00345">lms_parsers_finish()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="5b532e6e50911f02fd9e123489c62a0f"></a><!-- doxytag: member="lms_plugin::match" ref="5b532e6e50911f02fd9e123489c62a0f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="lightmediascanner__plugin_8h.html#558e8f031ecb3e6b8adf7d98f3e4fcd6">lms_plugin_match_fn_t</a> <a class="el" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">lms_plugin::match</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+check match
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00169">169</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="2048d92b3d8918a6a2bb2cf39a375e9a"></a><!-- doxytag: member="lms_plugin::name" ref="2048d92b3d8918a6a2bb2cf39a375e9a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">lms_plugin::name</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+plugin name
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00168">168</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00345">lms_parsers_finish()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="0d3361b489eb7c7c4ecc7917c0390b9e"></a><!-- doxytag: member="lms_plugin::parse" ref="0d3361b489eb7c7c4ecc7917c0390b9e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="lightmediascanner__plugin_8h.html#649350fd7015fa63ca86c43906c3f175">lms_plugin_parse_fn_t</a> <a class="el" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">lms_plugin::parse</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+parse matched file
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00170">170</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00387">lms_parsers_run()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="aeff2e030242ffdf3bdc512a5ef6cbec"></a><!-- doxytag: member="lms_plugin::setup" ref="aeff2e030242ffdf3bdc512a5ef6cbec" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="lightmediascanner__plugin_8h.html#6bfa82e6e83e85747048f41dfb334acd">lms_plugin_setup_fn_t</a> <a class="el" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">lms_plugin::setup</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+setup (1st phase init)
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00172">172</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="b3dffd208749a53ad2eb5ffb6d1b7d07"></a><!-- doxytag: member="lms_plugin::start" ref="b3dffd208749a53ad2eb5ffb6d1b7d07" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="lightmediascanner__plugin_8h.html#875d300da41e72865452c6ae44687b77">lms_plugin_start_fn_t</a> <a class="el" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">lms_plugin::start</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+start (2nd phase init)
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00173">173</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_plugin_info Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_plugin_info Struct Reference</h1><!-- doxytag: class="lms_plugin_info" --><code>#include <<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">name</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char *const * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin__info.html#d5fd907e4bcc553eb9474aa132435c9c">categories</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">description</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">version</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char *const * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin__info.html#5dd799fc0e3dd7e798f053ecf773e59a">authors</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">uri</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00177">177</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="5dd799fc0e3dd7e798f053ecf773e59a"></a><!-- doxytag: member="lms_plugin_info::authors" ref="5dd799fc0e3dd7e798f053ecf773e59a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* const* <a class="el" href="structlms__plugin__info.html#5dd799fc0e3dd7e798f053ecf773e59a">lms_plugin_info::authors</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+NULL-terminated author array
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00182">182</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d5fd907e4bcc553eb9474aa132435c9c"></a><!-- doxytag: member="lms_plugin_info::categories" ref="d5fd907e4bcc553eb9474aa132435c9c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* const* <a class="el" href="structlms__plugin__info.html#d5fd907e4bcc553eb9474aa132435c9c">lms_plugin_info::categories</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+NULL-terminated categories array
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00179">179</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="2e1df9478dd1f9dc62e81e208a2ebd3e"></a><!-- doxytag: member="lms_plugin_info::description" ref="2e1df9478dd1f9dc62e81e208a2ebd3e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__plugin__info.html#2e1df9478dd1f9dc62e81e208a2ebd3e">lms_plugin_info::description</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+free text description
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00180">180</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="fad60ec7f8d34b2082b353a03e2cb836"></a><!-- doxytag: member="lms_plugin_info::name" ref="fad60ec7f8d34b2082b353a03e2cb836" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__plugin__info.html#fad60ec7f8d34b2082b353a03e2cb836">lms_plugin_info::name</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+plugin name, should be same as <a class="el" href="structlms__plugin.html">lms_plugin</a>
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00178">178</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="8f5826185c7cb3a4155fca8683b817e2"></a><!-- doxytag: member="lms_plugin_info::uri" ref="8f5826185c7cb3a4155fca8683b817e2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__plugin__info.html#8f5826185c7cb3a4155fca8683b817e2">lms_plugin_info::uri</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+how to find who wrote it (bug reports, etc)
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00183">183</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="032d3fd2490ad7907e1ea27abad59915"></a><!-- doxytag: member="lms_plugin_info::version" ref="032d3fd2490ad7907e1ea27abad59915" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structlms__plugin__info.html#032d3fd2490ad7907e1ea27abad59915">lms_plugin_info::version</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+version string
+<p>Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00181">181</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00699">lms_parser_info()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_string_size Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_string_size Struct Reference</h1><!-- doxytag: class="lms_string_size" --><code>#include <<a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>></code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">len</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8h-source.html#l00049">49</a> of file <a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="fc37b712d71c2010e655bbd4f0a22e96"></a><!-- doxytag: member="lms_string_size::len" ref="fc37b712d71c2010e655bbd4f0a22e96" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structlms__string__size.html#fc37b712d71c2010e655bbd4f0a22e96">lms_string_size::len</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8h-source.html#l00051">51</a> of file <a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__utils_8c-source.html#l00114">lms_string_size_strip_and_free()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="5f4844463b193dadb2286e69200ce8a7"></a><!-- doxytag: member="lms_string_size::str" ref="5f4844463b193dadb2286e69200ce8a7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">lms_string_size::str</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__utils_8h-source.html#l00050">50</a> of file <a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__utils_8c-source.html#l00114">lms_string_size_strip_and_free()</a>, and <a class="el" href="lightmediascanner__utils_8c-source.html#l00138">lms_which_extension()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__utils_8h-source.html">lightmediascanner_utils.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: lms_video_info Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>lms_video_info Struct Reference<br>
+<small>
+[<a class="el" href="group__LMS__DB.html">DataBase-API</a>]</small>
+</h1><!-- doxytag: class="lms_video_info" --><code>#include <<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for lms_video_info:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">id</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">title</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structlms__video__info.html#c0bfe0cf4fe29e3c24a6df4248c7640e">artist</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00105">105</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="c0bfe0cf4fe29e3c24a6df4248c7640e"></a><!-- doxytag: member="lms_video_info::artist" ref="c0bfe0cf4fe29e3c24a6df4248c7640e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__video__info.html#c0bfe0cf4fe29e3c24a6df4248c7640e">lms_video_info::artist</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00108">108</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="12b5bc5f8b13bdcb3ee1e919a1e05822"></a><!-- doxytag: member="lms_video_info::id" ref="12b5bc5f8b13bdcb3ee1e919a1e05822" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int64_t <a class="el" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">lms_video_info::id</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00106">106</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__db__video_8c-source.html#l00269">lms_db_video_add()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f3b8a8168ec317daef65da3b06f72bc0"></a><!-- doxytag: member="lms_video_info::title" ref="f3b8a8168ec317daef65da3b06f72bc0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structlms__string__size.html">lms_string_size</a> <a class="el" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">lms_video_info::title</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__db_8h-source.html#l00107">107</a> of file <a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__db_8h-source.html">lightmediascanner_db.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{lms_video_info\n|+ id\l+ title\l+ artist\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="title\nartist",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms_string_size\n|+ str\l+ len\l|}",height=0.2,width=0.4,color="black",URL="$structlms__string__size.html"];
+}
--- /dev/null
+78962464673adb7a2530d7a11a7ee9cf
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: parser Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>parser Struct Reference</h1><!-- doxytag: class="parser" --><code>#include <<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for parser:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structlms__plugin.html">lms_plugin_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00070">70</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="3dd2a049d1cd9229ec33645e28803e0a"></a><!-- doxytag: member="parser::dl_handle" ref="3dd2a049d1cd9229ec33645e28803e0a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* <a class="el" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">parser::dl_handle</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00072">72</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6c71e3299d4bac660320e7ca935f9b32"></a><!-- doxytag: member="parser::plugin" ref="6c71e3299d4bac660320e7ca935f9b32" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structlms__plugin.html">lms_plugin_t</a>* <a class="el" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">parser::plugin</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00071">71</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00221">lms_parser_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00334">lms_parser_del()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00345">lms_parsers_finish()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00387">lms_parsers_run()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="f29cac42dbdf498606fae3f5b9fc3762"></a><!-- doxytag: member="parser::so_path" ref="f29cac42dbdf498606fae3f5b9fc3762" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">parser::so_path</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00073">73</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00279">lms_parser_find_and_add()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="plugin",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}",height=0.2,width=0.4,color="black",URL="$structlms__plugin.html"];
+}
--- /dev/null
+e7397971eaf726aff289a61b6f99e28e
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: pinfo Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>pinfo Struct Reference</h1><!-- doxytag: class="pinfo" --><code>#include <<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for pinfo:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structcinfo.html">cinfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">common</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">pid_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structfds.html">fds</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structfds.html">fds</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct pollfd </td><td class="memItemRight" valign="bottom"><a class="el" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00054">54</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="d31b28f6373d19531cd208c4c2a71a51"></a><!-- doxytag: member="pinfo::child" ref="d31b28f6373d19531cd208c4c2a71a51" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pid_t <a class="el" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">pinfo::child</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00056">56</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00634">lms_create_slave()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00671">lms_finish_slave()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00694">lms_restart_slave()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="46a4fc606bd47def48714760afcbc18b"></a><!-- doxytag: member="pinfo::common" ref="46a4fc606bd47def48714760afcbc18b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structcinfo.html">cinfo</a> <a class="el" href="structpinfo.html#46a4fc606bd47def48714760afcbc18b">pinfo::common</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00055">55</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00900">lms_check()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00634">lms_create_slave()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01005">lms_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="246dfd29e81101866ccb01cc70224156"></a><!-- doxytag: member="pinfo::master" ref="246dfd29e81101866ccb01cc70224156" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structfds.html">fds</a> <a class="el" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">pinfo::master</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00057">57</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00596">lms_close_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00607">lms_create_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00634">lms_create_slave()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00671">lms_finish_slave()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="ee9c21ae165e7daf968a7ed87c736076"></a><!-- doxytag: member="pinfo::poll" ref="ee9c21ae165e7daf968a7ed87c736076" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct pollfd <a class="el" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">pinfo::poll</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00059">59</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00607">lms_create_pipes()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00694">lms_restart_slave()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="62bbc538af7f9e1d6aa9073458d5cc52"></a><!-- doxytag: member="pinfo::slave" ref="62bbc538af7f9e1d6aa9073458d5cc52" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structfds.html">fds</a> <a class="el" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">pinfo::slave</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00058">58</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00596">lms_close_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00607">lms_create_pipes()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00634">lms_create_slave()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{pinfo\n|+ common\l+ child\l+ master\l+ slave\l+ poll\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="common",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{cinfo\n|+ lms\l|}",height=0.2,width=0.4,color="black",URL="$structcinfo.html"];
+ Node3 -> Node2 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="lms",arrowtail="open",fontname="FreeSans"];
+ Node3 [label="{lms\n|+ parsers\l+ n_parsers\l+ cs_conv\l+ db_path\l+ slave_timeout\l+ cb\l+ data\l+ free_data\l+ progress\l+ commit_interval\l+ is_processing\l+ stop_processing\l|}",height=0.2,width=0.4,color="black",URL="$structlms.html"];
+ Node4 -> Node3 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="cs_conv",arrowtail="open",fontname="FreeSans"];
+ Node4 [label="{lms_charset_conv\n|+ check\l+ fallback\l+ size\l+ convs\l+ names\l|}",height=0.2,width=0.4,color="grey75"];
+ Node5 -> Node3 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="parsers",arrowtail="open",fontname="FreeSans"];
+ Node5 [label="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}",height=0.2,width=0.4,color="black",URL="$structparser.html"];
+ Node6 -> Node5 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="plugin",arrowtail="open",fontname="FreeSans"];
+ Node6 [label="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}",height=0.2,width=0.4,color="black",URL="$structlms__plugin.html"];
+ Node7 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="slave\nmaster",arrowtail="open",fontname="FreeSans"];
+ Node7 [label="{fds\n|+ r\l+ w\l|}",height=0.2,width=0.4,color="black",URL="$structfds.html"];
+}
--- /dev/null
+774bb858e0f8d60477c1f6669828444c
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Light Media Scanner: sinfo Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.8 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>sinfo Struct Reference</h1><!-- doxytag: class="sinfo" --><code>#include <<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>></code>
+<p>
+<div class="dynheader">
+Collaboration diagram for sinfo:</div>
+<div class="dynsection">
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structcinfo.html">cinfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">common</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">db</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">db</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">parser_match</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">commit_counter</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00063">63</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="4dc79e3c97d069939b8ba2d65d85fa1f"></a><!-- doxytag: member="sinfo::commit_counter" ref="4dc79e3c97d069939b8ba2d65d85fa1f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structsinfo.html#4dc79e3c97d069939b8ba2d65d85fa1f">sinfo::commit_counter</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00067">67</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00949">lms_check_single_process()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="aa9d846b49c394348027d31e49c535be"></a><!-- doxytag: member="sinfo::common" ref="aa9d846b49c394348027d31e49c535be" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structcinfo.html">cinfo</a> <a class="el" href="structsinfo.html#aa9d846b49c394348027d31e49c535be">sinfo::common</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00064">64</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00949">lms_check_single_process()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="e15c5adc74f2f712a8becebff37a06d4"></a><!-- doxytag: member="sinfo::db" ref="e15c5adc74f2f712a8becebff37a06d4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">db</a>* <a class="el" href="structsinfo.html#e15c5adc74f2f712a8becebff37a06d4">sinfo::db</a><code> [read]</code> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00065">65</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="453d67e0467608c10700c7217cfe19fd"></a><!-- doxytag: member="sinfo::parser_match" ref="453d67e0467608c10700c7217cfe19fd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void** <a class="el" href="structsinfo.html#453d67e0467608c10700c7217cfe19fd">sinfo::parser_match</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>Definition at line <a class="el" href="lightmediascanner__private_8h-source.html#l00066">66</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.</p>
+
+<p>Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l01047">lms_process_single_process()</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>src/lib/<a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 22 23:56:01 2009 for Light Media Scanner by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+ node [fontname="FreeSans",fontsize="10",shape=record];
+ Node1 [label="{sinfo\n|+ common\l+ db\l+ parser_match\l+ commit_counter\l|}",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+ Node2 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="common",arrowtail="open",fontname="FreeSans"];
+ Node2 [label="{cinfo\n|+ lms\l|}",height=0.2,width=0.4,color="black",URL="$structcinfo.html"];
+ Node3 -> Node2 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="lms",arrowtail="open",fontname="FreeSans"];
+ Node3 [label="{lms\n|+ parsers\l+ n_parsers\l+ cs_conv\l+ db_path\l+ slave_timeout\l+ cb\l+ data\l+ free_data\l+ progress\l+ commit_interval\l+ is_processing\l+ stop_processing\l|}",height=0.2,width=0.4,color="black",URL="$structlms.html"];
+ Node4 -> Node3 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="cs_conv",arrowtail="open",fontname="FreeSans"];
+ Node4 [label="{lms_charset_conv\n|+ check\l+ fallback\l+ size\l+ convs\l+ names\l|}",height=0.2,width=0.4,color="grey75"];
+ Node5 -> Node3 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="parsers",arrowtail="open",fontname="FreeSans"];
+ Node5 [label="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}",height=0.2,width=0.4,color="black",URL="$structparser.html"];
+ Node6 -> Node5 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="plugin",arrowtail="open",fontname="FreeSans"];
+ Node6 [label="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}",height=0.2,width=0.4,color="black",URL="$structlms__plugin.html"];
+ Node7 -> Node1 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="db",arrowtail="open",fontname="FreeSans"];
+ Node7 [label="{db\n|+ handle\l+ transaction_begin\l+ transaction_commit\l+ get_file_info\l+ insert_file_info\l+ update_file_info\l+ delete_file_info\l+ set_file_dtime\l|}",height=0.2,width=0.4,color="grey75"];
+}
--- /dev/null
+4b1285d521896edc3e963f2af3806bbb
\ No newline at end of file
--- /dev/null
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+ float : left;
+ width : 100%;
+ background : url("tab_b.gif") repeat-x bottom;
+ margin-bottom : 4px;
+}
+
+DIV.tabs UL
+{
+ margin : 0px;
+ padding-left : 10px;
+ list-style : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+ display : inline;
+ margin : 0px;
+ padding : 0px;
+}
+
+DIV.tabs FORM
+{
+ float : right;
+}
+
+DIV.tabs A
+{
+ float : left;
+ background : url("tab_r.gif") no-repeat right top;
+ border-bottom : 1px solid #84B0C7;
+ font-size : 80%;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+DIV.tabs A:hover
+{
+ background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+ color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+ float : left;
+ display : block;
+ background : url("tab_l.gif") no-repeat left top;
+ padding : 5px 9px;
+ white-space : nowrap;
+}
+
+DIV.tabs INPUT
+{
+ float : right;
+ display : inline;
+ font-size : 1em;
+}
+
+DIV.tabs TD
+{
+ font-size : 80%;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+ background-position: 0% -150px;
+}
+
+DIV.tabs LI.current A
+{
+ background-position: 100% -150px;
+ border-width : 0px;
+}
+
+DIV.tabs LI.current SPAN
+{
+ background-position: 0% -150px;
+ padding-bottom : 6px;
+}
+
+DIV.navpath
+{
+ background : none;
+ border : none;
+ border-bottom : 1px solid #84B0C7;
+ text-align : center;
+ margin : 2px;
+ padding : 2px;
+}
--- /dev/null
+lightmediascanner lightmediascanner-module.html
+lightmediascanner.LMS_PROGRESS_STATUS_UP_TO_DATE lightmediascanner-module.html#LMS_PROGRESS_STATUS_UP_TO_DATE
+lightmediascanner.LMS_PROGRESS_STATUS_PROCESSED lightmediascanner-module.html#LMS_PROGRESS_STATUS_PROCESSED
+lightmediascanner.LMS_PROGRESS_STATUS_ERROR_PARSE lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_PARSE
+lightmediascanner.__package__ lightmediascanner-module.html#__package__
+lightmediascanner.LMS_PROGRESS_STATUS_KILLED lightmediascanner-module.html#LMS_PROGRESS_STATUS_KILLED
+lightmediascanner.LMS_PROGRESS_STATUS_ERROR_COMM lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_COMM
+lightmediascanner.LMS_PROGRESS_STATUS_SKIPPED lightmediascanner-module.html#LMS_PROGRESS_STATUS_SKIPPED
+lightmediascanner.LMS_PROGRESS_STATUS_DELETED lightmediascanner-module.html#LMS_PROGRESS_STATUS_DELETED
+lightmediascanner.c_lightmediascanner lightmediascanner.c_lightmediascanner-module.html
+lightmediascanner.c_lightmediascanner.parser_info lightmediascanner.c_lightmediascanner-module.html#parser_info
+lightmediascanner.c_lightmediascanner.parsers_list_by_category lightmediascanner.c_lightmediascanner-module.html#parsers_list_by_category
+lightmediascanner.c_lightmediascanner.parser_info_find lightmediascanner.c_lightmediascanner-module.html#parser_info_find
+lightmediascanner.c_lightmediascanner.parsers_list lightmediascanner.c_lightmediascanner-module.html#parsers_list
+lightmediascanner.c_lightmediascanner.__package__ lightmediascanner.c_lightmediascanner-module.html#__package__
+lightmediascanner.c_lightmediascanner.__bootstrap__ lightmediascanner.c_lightmediascanner-module.html#__bootstrap__
+lightmediascanner.c_lightmediascanner.LightMediaScanner lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html
+lightmediascanner.c_lightmediascanner.LightMediaScanner.process lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#process
+lightmediascanner.c_lightmediascanner.LightMediaScanner.set_slave_timeout lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_slave_timeout
+lightmediascanner.c_lightmediascanner.LightMediaScanner.__str__ lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__str__
+lightmediascanner.c_lightmediascanner.LightMediaScanner.commit_interval lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#commit_interval
+lightmediascanner.c_lightmediascanner.LightMediaScanner.parsers lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parsers
+lightmediascanner.c_lightmediascanner.LightMediaScanner.check lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#check
+lightmediascanner.c_lightmediascanner.LightMediaScanner.__init__ lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__init__
+lightmediascanner.c_lightmediascanner.LightMediaScanner.get_commit_interval lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#get_commit_interval
+lightmediascanner.c_lightmediascanner.LightMediaScanner.__new__ lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__new__
+lightmediascanner.c_lightmediascanner.LightMediaScanner.slave_timeout lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#slave_timeout
+lightmediascanner.c_lightmediascanner.LightMediaScanner.process_single_process lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#process_single_process
+lightmediascanner.c_lightmediascanner.LightMediaScanner.stop_processing lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#stop_processing
+lightmediascanner.c_lightmediascanner.LightMediaScanner.set_progress_callback lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_progress_callback
+lightmediascanner.c_lightmediascanner.LightMediaScanner.charset_add lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#charset_add
+lightmediascanner.c_lightmediascanner.LightMediaScanner.get_slave_timeout lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#get_slave_timeout
+lightmediascanner.c_lightmediascanner.LightMediaScanner.is_processing lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#is_processing
+lightmediascanner.c_lightmediascanner.LightMediaScanner.db_path lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#db_path
+lightmediascanner.c_lightmediascanner.LightMediaScanner.charset_del lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#charset_del
+lightmediascanner.c_lightmediascanner.LightMediaScanner.parser_add lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parser_add
+lightmediascanner.c_lightmediascanner.LightMediaScanner.parsers_clear lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parsers_clear
+lightmediascanner.c_lightmediascanner.LightMediaScanner.parser_find_and_add lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parser_find_and_add
+lightmediascanner.c_lightmediascanner.LightMediaScanner.parser_del lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parser_del
+lightmediascanner.c_lightmediascanner.LightMediaScanner.set_commit_interval lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_commit_interval
+lightmediascanner.c_lightmediascanner.LightMediaScanner.check_single_process lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#check_single_process
+lightmediascanner.c_lightmediascanner.LightMediaScanner.__repr__ lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__repr__
+lightmediascanner.c_lightmediascanner.LightMediaScanner.delete lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#delete
+lightmediascanner.c_lightmediascanner.Parser lightmediascanner.c_lightmediascanner.Parser-class.html
+lightmediascanner.c_lightmediascanner.Parser.__new__ lightmediascanner.c_lightmediascanner.Parser-class.html#__new__
+lightmediascanner.c_lightmediascanner.Parser.__str__ lightmediascanner.c_lightmediascanner.Parser-class.html#__str__
+lightmediascanner.c_lightmediascanner.Parser.name lightmediascanner.c_lightmediascanner.Parser-class.html#name
+lightmediascanner.c_lightmediascanner.Parser.__repr__ lightmediascanner.c_lightmediascanner.Parser-class.html#__repr__
+lightmediascanner.c_lightmediascanner.Parser.delete lightmediascanner.c_lightmediascanner.Parser-class.html#delete
+lightmediascanner.c_lightmediascanner.Parser.__init__ lightmediascanner.c_lightmediascanner.Parser-class.html#__init__
+lightmediascanner.c_lightmediascanner.Parser.scanner lightmediascanner.c_lightmediascanner.Parser-class.html#scanner
+lightmediascanner.c_lightmediascanner.ParserInfo lightmediascanner.c_lightmediascanner.ParserInfo-class.html
+lightmediascanner.c_lightmediascanner.ParserInfo.__new__ lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__new__
+lightmediascanner.c_lightmediascanner.ParserInfo.__str__ lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__str__
+lightmediascanner.c_lightmediascanner.ParserInfo.uri lightmediascanner.c_lightmediascanner.ParserInfo-class.html#uri
+lightmediascanner.c_lightmediascanner.ParserInfo.name lightmediascanner.c_lightmediascanner.ParserInfo-class.html#name
+lightmediascanner.c_lightmediascanner.ParserInfo.version lightmediascanner.c_lightmediascanner.ParserInfo-class.html#version
+lightmediascanner.c_lightmediascanner.ParserInfo.categories lightmediascanner.c_lightmediascanner.ParserInfo-class.html#categories
+lightmediascanner.c_lightmediascanner.ParserInfo.authors lightmediascanner.c_lightmediascanner.ParserInfo-class.html#authors
+lightmediascanner.c_lightmediascanner.ParserInfo.path lightmediascanner.c_lightmediascanner.ParserInfo-class.html#path
+lightmediascanner.c_lightmediascanner.ParserInfo.__init__ lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__init__
+lightmediascanner.c_lightmediascanner.ParserInfo.description lightmediascanner.c_lightmediascanner.ParserInfo-class.html#description
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Class Hierarchy</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Trees </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%"> </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="class-tree.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Class Hierarchy</h1>
+<ul class="nomargin-top">
+ <li> <strong class="uidlink">object</strong>:
+ <em class="summary">The most base type</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">lightmediascanner.c_lightmediascanner.LightMediaScanner</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html">lightmediascanner.c_lightmediascanner.Parser</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">lightmediascanner.c_lightmediascanner.ParserInfo</a></strong>
+ </li>
+ </ul>
+ </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Trees </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+
+
+/* Epydoc CSS Stylesheet
+ *
+ * This stylesheet can be used to customize the appearance of epydoc's
+ * HTML output.
+ *
+ */
+
+/* Default Colors & Styles
+ * - Set the default foreground & background color with 'body'; and
+ * link colors with 'a:link' and 'a:visited'.
+ * - Use bold for decision list terms.
+ * - The heading styles defined here are used for headings *within*
+ * docstring descriptions. All headings used by epydoc itself use
+ * either class='epydoc' or class='toc' (CSS styles for both
+ * defined below).
+ */
+body { background: #ffffff; color: #000000; }
+p { margin-top: 0.5em; margin-bottom: 0.5em; }
+a:link { color: #0000ff; }
+a:visited { color: #204080; }
+dt { font-weight: bold; }
+h1 { font-size: +140%; font-style: italic;
+ font-weight: bold; }
+h2 { font-size: +125%; font-style: italic;
+ font-weight: bold; }
+h3 { font-size: +110%; font-style: italic;
+ font-weight: normal; }
+code { font-size: 100%; }
+/* N.B.: class, not pseudoclass */
+a.link { font-family: monospace; }
+
+/* Page Header & Footer
+ * - The standard page header consists of a navigation bar (with
+ * pointers to standard pages such as 'home' and 'trees'); a
+ * breadcrumbs list, which can be used to navigate to containing
+ * classes or modules; options links, to show/hide private
+ * variables and to show/hide frames; and a page title (using
+ * <h1>). The page title may be followed by a link to the
+ * corresponding source code (using 'span.codelink').
+ * - The footer consists of a navigation bar, a timestamp, and a
+ * pointer to epydoc's homepage.
+ */
+h1.epydoc { margin: 0; font-size: +140%; font-weight: bold; }
+h2.epydoc { font-size: +130%; font-weight: bold; }
+h3.epydoc { font-size: +115%; font-weight: bold;
+ margin-top: 0.2em; }
+td h3.epydoc { font-size: +115%; font-weight: bold;
+ margin-bottom: 0; }
+table.navbar { background: #a0c0ff; color: #000000;
+ border: 2px groove #c0d0d0; }
+table.navbar table { color: #000000; }
+th.navbar-select { background: #70b0ff;
+ color: #000000; }
+table.navbar a { text-decoration: none; }
+table.navbar a:link { color: #0000ff; }
+table.navbar a:visited { color: #204080; }
+span.breadcrumbs { font-size: 85%; font-weight: bold; }
+span.options { font-size: 70%; }
+span.codelink { font-size: 85%; }
+td.footer { font-size: 85%; }
+
+/* Table Headers
+ * - Each summary table and details section begins with a 'header'
+ * row. This row contains a section title (marked by
+ * 'span.table-header') as well as a show/hide private link
+ * (marked by 'span.options', defined above).
+ * - Summary tables that contain user-defined groups mark those
+ * groups using 'group header' rows.
+ */
+td.table-header { background: #70b0ff; color: #000000;
+ border: 1px solid #608090; }
+td.table-header table { color: #000000; }
+td.table-header table a:link { color: #0000ff; }
+td.table-header table a:visited { color: #204080; }
+span.table-header { font-size: 120%; font-weight: bold; }
+th.group-header { background: #c0e0f8; color: #000000;
+ text-align: left; font-style: italic;
+ font-size: 115%;
+ border: 1px solid #608090; }
+
+/* Summary Tables (functions, variables, etc)
+ * - Each object is described by a single row of the table with
+ * two cells. The left cell gives the object's type, and is
+ * marked with 'code.summary-type'. The right cell gives the
+ * object's name and a summary description.
+ * - CSS styles for the table's header and group headers are
+ * defined above, under 'Table Headers'
+ */
+table.summary { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin-bottom: 0.5em; }
+td.summary { border: 1px solid #608090; }
+code.summary-type { font-size: 85%; }
+table.summary a:link { color: #0000ff; }
+table.summary a:visited { color: #204080; }
+
+
+/* Details Tables (functions, variables, etc)
+ * - Each object is described in its own div.
+ * - A single-row summary table w/ table-header is used as
+ * a header for each details section (CSS style for table-header
+ * is defined above, under 'Table Headers').
+ */
+table.details { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin: .2em 0 0 0; }
+table.details table { color: #000000; }
+table.details a:link { color: #0000ff; }
+table.details a:visited { color: #204080; }
+
+/* Fields */
+dl.fields { margin-left: 2em; margin-top: 1em;
+ margin-bottom: 1em; }
+dl.fields dd ul { margin-left: 0em; padding-left: 0em; }
+dl.fields dd ul li ul { margin-left: 2em; padding-left: 0em; }
+div.fields { margin-left: 2em; }
+div.fields p { margin-bottom: 0.5em; }
+
+/* Index tables (identifier index, term index, etc)
+ * - link-index is used for indices containing lists of links
+ * (namely, the identifier index & term index).
+ * - index-where is used in link indices for the text indicating
+ * the container/source for each link.
+ * - metadata-index is used for indices containing metadata
+ * extracted from fields (namely, the bug index & todo index).
+ */
+table.link-index { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090; }
+td.link-index { border-width: 0px; }
+table.link-index a:link { color: #0000ff; }
+table.link-index a:visited { color: #204080; }
+span.index-where { font-size: 70%; }
+table.metadata-index { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin: .2em 0 0 0; }
+td.metadata-index { border-width: 1px; border-style: solid; }
+table.metadata-index a:link { color: #0000ff; }
+table.metadata-index a:visited { color: #204080; }
+
+/* Function signatures
+ * - sig* is used for the signature in the details section.
+ * - .summary-sig* is used for the signature in the summary
+ * table, and when listing property accessor functions.
+ * */
+.sig-name { color: #006080; }
+.sig-arg { color: #008060; }
+.sig-default { color: #602000; }
+.summary-sig { font-family: monospace; }
+.summary-sig-name { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:link
+ { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:visited
+ { color: #006080; font-weight: bold; }
+.summary-sig-arg { color: #006040; }
+.summary-sig-default { color: #501800; }
+
+/* Subclass list
+ */
+ul.subclass-list { display: inline; }
+ul.subclass-list li { display: inline; }
+
+/* To render variables, classes etc. like functions */
+table.summary .summary-name { color: #006080; font-weight: bold;
+ font-family: monospace; }
+table.summary
+ a.summary-name:link { color: #006080; font-weight: bold;
+ font-family: monospace; }
+table.summary
+ a.summary-name:visited { color: #006080; font-weight: bold;
+ font-family: monospace; }
+
+/* Variable values
+ * - In the 'variable details' sections, each varaible's value is
+ * listed in a 'pre.variable' box. The width of this box is
+ * restricted to 80 chars; if the value's repr is longer than
+ * this it will be wrapped, using a backslash marked with
+ * class 'variable-linewrap'. If the value's repr is longer
+ * than 3 lines, the rest will be ellided; and an ellipsis
+ * marker ('...' marked with 'variable-ellipsis') will be used.
+ * - If the value is a string, its quote marks will be marked
+ * with 'variable-quote'.
+ * - If the variable is a regexp, it is syntax-highlighted using
+ * the re* CSS classes.
+ */
+pre.variable { padding: .5em; margin: 0;
+ background: #dce4ec; color: #000000;
+ border: 1px solid #708890; }
+.variable-linewrap { color: #604000; font-weight: bold; }
+.variable-ellipsis { color: #604000; font-weight: bold; }
+.variable-quote { color: #604000; font-weight: bold; }
+.variable-group { color: #008000; font-weight: bold; }
+.variable-op { color: #604000; font-weight: bold; }
+.variable-string { color: #006030; }
+.variable-unknown { color: #a00000; font-weight: bold; }
+.re { color: #000000; }
+.re-char { color: #006030; }
+.re-op { color: #600000; }
+.re-group { color: #003060; }
+.re-ref { color: #404040; }
+
+/* Base tree
+ * - Used by class pages to display the base class hierarchy.
+ */
+pre.base-tree { font-size: 80%; margin: 0; }
+
+/* Frames-based table of contents headers
+ * - Consists of two frames: one for selecting modules; and
+ * the other listing the contents of the selected module.
+ * - h1.toc is used for each frame's heading
+ * - h2.toc is used for subheadings within each frame.
+ */
+h1.toc { text-align: center; font-size: 105%;
+ margin: 0; font-weight: bold;
+ padding: 0; }
+h2.toc { font-size: 100%; font-weight: bold;
+ margin: 0.5em 0 0 -0.3em; }
+
+/* Syntax Highlighting for Source Code
+ * - doctest examples are displayed in a 'pre.py-doctest' block.
+ * If the example is in a details table entry, then it will use
+ * the colors specified by the 'table pre.py-doctest' line.
+ * - Source code listings are displayed in a 'pre.py-src' block.
+ * Each line is marked with 'span.py-line' (used to draw a line
+ * down the left margin, separating the code from the line
+ * numbers). Line numbers are displayed with 'span.py-lineno'.
+ * The expand/collapse block toggle button is displayed with
+ * 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
+ * modify the font size of the text.)
+ * - If a source code page is opened with an anchor, then the
+ * corresponding code block will be highlighted. The code
+ * block's header is highlighted with 'py-highlight-hdr'; and
+ * the code block's body is highlighted with 'py-highlight'.
+ * - The remaining py-* classes are used to perform syntax
+ * highlighting (py-string for string literals, py-name for names,
+ * etc.)
+ */
+pre.py-doctest { padding: .5em; margin: 1em;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #708890; }
+table pre.py-doctest { background: #dce4ec;
+ color: #000000; }
+pre.py-src { border: 2px solid #000000;
+ background: #f0f0f0; color: #000000; }
+.py-line { border-left: 2px solid #000000;
+ margin-left: .2em; padding-left: .4em; }
+.py-lineno { font-style: italic; font-size: 90%;
+ padding-left: .5em; }
+a.py-toggle { text-decoration: none; }
+div.py-highlight-hdr { border-top: 2px solid #000000;
+ border-bottom: 2px solid #000000;
+ background: #d8e8e8; }
+div.py-highlight { border-bottom: 2px solid #000000;
+ background: #d0e0e0; }
+.py-prompt { color: #005050; font-weight: bold;}
+.py-more { color: #005050; font-weight: bold;}
+.py-string { color: #006030; }
+.py-comment { color: #003060; }
+.py-keyword { color: #600000; }
+.py-output { color: #404040; }
+.py-name { color: #000050; }
+.py-name:link { color: #000050 !important; }
+.py-name:visited { color: #000050 !important; }
+.py-number { color: #005000; }
+.py-defname { color: #000060; font-weight: bold; }
+.py-def-name { color: #000060; font-weight: bold; }
+.py-base-class { color: #000060; }
+.py-param { color: #000060; }
+.py-docstring { color: #006030; }
+.py-decorator { color: #804020; }
+/* Use this if you don't want links to names underlined: */
+/*a.py-name { text-decoration: none; }*/
+
+/* Graphs & Diagrams
+ * - These CSS styles are used for graphs & diagrams generated using
+ * Graphviz dot. 'img.graph-without-title' is used for bare
+ * diagrams (to remove the border created by making the image
+ * clickable).
+ */
+img.graph-without-title { border: none; }
+img.graph-with-title { border: 1px solid #000000; }
+span.graph-title { font-weight: bold; }
+span.graph-caption { }
+
+/* General-purpose classes
+ * - 'p.indent-wrapped-lines' defines a paragraph whose first line
+ * is not indented, but whose subsequent lines are.
+ * - The 'nomargin-top' class is used to remove the top margin (e.g.
+ * from lists). The 'nomargin' class is used to remove both the
+ * top and bottom margin (but not the left or right margin --
+ * for lists, that would cause the bullets to disappear.)
+ */
+p.indent-wrapped-lines { padding: 0 0 0 7em; text-indent: -7em;
+ margin: 0; }
+.nomargin-top { margin-top: 0; }
+.nomargin { margin-top: 0; margin-bottom: 0; }
+
+/* HTML Log */
+div.log-block { padding: 0; margin: .5em 0 .5em 0;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #000000; }
+div.log-error { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #ffb0b0; color: #000000;
+ border: 1px solid #000000; }
+div.log-warning { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #ffffb0; color: #000000;
+ border: 1px solid #000000; }
+div.log-info { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #b0ffb0; color: #000000;
+ border: 1px solid #000000; }
+h2.log-hdr { background: #70b0ff; color: #000000;
+ margin: 0; padding: 0em 0.5em 0em 0.5em;
+ border-bottom: 1px solid #000000; font-size: 110%; }
+p.log { font-weight: bold; margin: .5em 0 .5em 0; }
+tr.opt-changed { color: #000000; font-weight: bold; }
+tr.opt-default { color: #606060; }
+pre.log { margin: 0; padding: 0; padding-left: 1em; }
--- /dev/null
+function toggle_private() {
+ // Search for any private/public links on this page. Store
+ // their old text in "cmd," so we will know what action to
+ // take; and change their text to the opposite action.
+ var cmd = "?";
+ var elts = document.getElementsByTagName("a");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "privatelink") {
+ cmd = elts[i].innerHTML;
+ elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
+ "hide private":"show private");
+ }
+ }
+ // Update all DIVs containing private objects.
+ var elts = document.getElementsByTagName("div");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+ }
+ else if (elts[i].className == "public") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
+ }
+ }
+ // Update all table rows containing private objects. Note, we
+ // use "" instead of "block" becaue IE & firefox disagree on what
+ // this should be (block vs table-row), and "" just gives the
+ // default for both browsers.
+ var elts = document.getElementsByTagName("tr");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
+ }
+ }
+ // Update all list items containing private objects.
+ var elts = document.getElementsByTagName("li");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
+ "none":"");
+ }
+ }
+ // Update all list items containing private objects.
+ var elts = document.getElementsByTagName("ul");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+ }
+ }
+ // Set a cookie to remember the current option.
+ document.cookie = "EpydocPrivate="+cmd;
+ }
+function show_private() {
+ var elts = document.getElementsByTagName("a");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "privatelink") {
+ cmd = elts[i].innerHTML;
+ if (cmd && cmd.substr(0,4)=="show")
+ toggle_private();
+ }
+ }
+ }
+function getCookie(name) {
+ var dc = document.cookie;
+ var prefix = name + "=";
+ var begin = dc.indexOf("; " + prefix);
+ if (begin == -1) {
+ begin = dc.indexOf(prefix);
+ if (begin != 0) return null;
+ } else
+ { begin += 2; }
+ var end = document.cookie.indexOf(";", begin);
+ if (end == -1)
+ { end = dc.length; }
+ return unescape(dc.substring(begin + prefix.length, end));
+ }
+function setFrame(url1, url2) {
+ parent.frames[1].location.href = url1;
+ parent.frames[2].location.href = url2;
+ }
+function checkCookie() {
+ var cmd=getCookie("EpydocPrivate");
+ if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
+ toggle_private();
+ }
+function toggleCallGraph(id) {
+ var elt = document.getElementById(id);
+ if (elt.style.display == "none")
+ elt.style.display = "block";
+ else
+ elt.style.display = "none";
+ }
+function expand(id) {
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.style.display = "block";
+ var elt = document.getElementById(id+"-expanded-linenums");
+ if (elt) elt.style.display = "block";
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+ var elt = document.getElementById(id+"-collapsed-linenums");
+ if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+ var elt = document.getElementById(id+"-toggle");
+ if (elt) { elt.innerHTML = "-"; }
+}
+
+function collapse(id) {
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.style.display = "none";
+ var elt = document.getElementById(id+"-expanded-linenums");
+ if (elt) elt.style.display = "none";
+ var elt = document.getElementById(id+"-collapsed-linenums");
+ if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
+ var elt = document.getElementById(id+"-toggle");
+ if (elt) { elt.innerHTML = "+"; }
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) {
+ elt.style.display = "block";
+
+ var indent = elt.getAttribute("indent");
+ var pad = elt.getAttribute("pad");
+ var s = "<tt class='py-lineno'>";
+ for (var i=0; i<pad.length; i++) { s += " " }
+ s += "</tt>";
+ s += " <tt class='py-line'>";
+ for (var i=0; i<indent.length; i++) { s += " " }
+ s += "<a href='#' onclick='expand(\"" + id;
+ s += "\");return false'>...</a></tt><br />";
+ elt.innerHTML = s;
+ }
+}
+
+function toggle(id) {
+ elt = document.getElementById(id+"-toggle");
+ if (elt.innerHTML == "-")
+ collapse(id);
+ else
+ expand(id);
+ return false;
+}
+
+function highlight(id) {
+ var elt = document.getElementById(id+"-def");
+ if (elt) elt.className = "py-highlight-hdr";
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.className = "py-highlight";
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) elt.className = "py-highlight";
+}
+
+function num_lines(s) {
+ var n = 1;
+ var pos = s.indexOf("\n");
+ while ( pos > 0) {
+ n += 1;
+ pos = s.indexOf("\n", pos+1);
+ }
+ return n;
+}
+
+// Collapse all blocks that mave more than `min_lines` lines.
+function collapse_all(min_lines) {
+ var elts = document.getElementsByTagName("div");
+ for (var i=0; i<elts.length; i++) {
+ var elt = elts[i];
+ var split = elt.id.indexOf("-");
+ if (split > 0)
+ if (elt.id.substring(split, elt.id.length) == "-expanded")
+ if (num_lines(elt.innerHTML) > min_lines)
+ collapse(elt.id.substring(0, split));
+ }
+}
+
+function expandto(href) {
+ var start = href.indexOf("#")+1;
+ if (start != 0 && start != href.length) {
+ if (href.substring(start, href.length) != "-") {
+ collapse_all(4);
+ pos = href.indexOf(".", start);
+ while (pos != -1) {
+ var id = href.substring(start, pos);
+ expand(id);
+ pos = href.indexOf(".", pos+1);
+ }
+ var id = href.substring(start, href.length);
+ expand(id);
+ highlight(id);
+ }
+ }
+}
+
+function kill_doclink(id) {
+ var parent = document.getElementById(id);
+ parent.removeChild(parent.childNodes.item(0));
+}
+function auto_kill_doclink(ev) {
+ if (!ev) var ev = window.event;
+ if (!this.contains(ev.toElement)) {
+ var parent = document.getElementById(this.parentID);
+ parent.removeChild(parent.childNodes.item(0));
+ }
+}
+
+function doclink(id, name, targets_id) {
+ var elt = document.getElementById(id);
+
+ // If we already opened the box, then destroy it.
+ // (This case should never occur, but leave it in just in case.)
+ if (elt.childNodes.length > 1) {
+ elt.removeChild(elt.childNodes.item(0));
+ }
+ else {
+ // The outer box: relative + inline positioning.
+ var box1 = document.createElement("div");
+ box1.style.position = "relative";
+ box1.style.display = "inline";
+ box1.style.top = 0;
+ box1.style.left = 0;
+
+ // A shadow for fun
+ var shadow = document.createElement("div");
+ shadow.style.position = "absolute";
+ shadow.style.left = "-1.3em";
+ shadow.style.top = "-1.3em";
+ shadow.style.background = "#404040";
+
+ // The inner box: absolute positioning.
+ var box2 = document.createElement("div");
+ box2.style.position = "relative";
+ box2.style.border = "1px solid #a0a0a0";
+ box2.style.left = "-.2em";
+ box2.style.top = "-.2em";
+ box2.style.background = "white";
+ box2.style.padding = ".3em .4em .3em .4em";
+ box2.style.fontStyle = "normal";
+ box2.onmouseout=auto_kill_doclink;
+ box2.parentID = id;
+
+ // Get the targets
+ var targets_elt = document.getElementById(targets_id);
+ var targets = targets_elt.getAttribute("targets");
+ var links = "";
+ target_list = targets.split(",");
+ for (var i=0; i<target_list.length; i++) {
+ var target = target_list[i].split("=");
+ links += "<li><a href='" + target[1] +
+ "' style='text-decoration:none'>" +
+ target[0] + "</a></li>";
+ }
+
+ // Put it all together.
+ elt.insertBefore(box1, elt.childNodes.item(0));
+ //box1.appendChild(box2);
+ box1.appendChild(shadow);
+ shadow.appendChild(box2);
+ box2.innerHTML =
+ "Which <b>"+name+"</b> do you want to see documentation for?" +
+ "<ul style='margin-bottom: 0;'>" +
+ links +
+ "<li><a href='#' style='text-decoration:none' " +
+ "onclick='kill_doclink(\""+id+"\");return false;'>"+
+ "<i>None of the above</i></a></li></ul>";
+ }
+ return false;
+}
+
+function get_anchor() {
+ var href = location.href;
+ var start = href.indexOf("#")+1;
+ if ((start != 0) && (start != href.length))
+ return href.substring(start, href.length);
+ }
+function redirect_url(dottedName) {
+ // Scan through each element of the "pages" list, and check
+ // if "name" matches with any of them.
+ for (var i=0; i<pages.length; i++) {
+
+ // Each page has the form "<pagename>-m" or "<pagename>-c";
+ // extract the <pagename> portion & compare it to dottedName.
+ var pagename = pages[i].substring(0, pages[i].length-2);
+ if (pagename == dottedName.substring(0,pagename.length)) {
+
+ // We've found a page that matches `dottedName`;
+ // construct its URL, using leftover `dottedName`
+ // content to form an anchor.
+ var pagetype = pages[i].charAt(pages[i].length-1);
+ var url = pagename + ((pagetype=="m")?"-module.html":
+ "-class.html");
+ if (dottedName.length > pagename.length)
+ url += "#" + dottedName.substring(pagename.length+1,
+ dottedName.length);
+ return url;
+ }
+ }
+ }
--- /dev/null
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title> Python-LightMediaScanner API </title>
+</head>
+<frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="toc.html" name="moduleListFrame"
+ id="moduleListFrame" />
+ <frame src="toc-everything.html" name="moduleFrame"
+ id="moduleFrame" />
+ </frameset>
+ <frame src="lightmediascanner-module.html" name="mainFrame" id="mainFrame" />
+</frameset>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Help</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Help </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%"> </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="help.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<h1 class="epydoc"> API Documentation </h1>
+
+<p> This document contains the API (Application Programming Interface)
+documentation for Python-LightMediaScanner API. Documentation for the Python
+objects defined by the project is divided into separate pages for each
+package, module, and class. The API documentation also includes two
+pages containing information about the project as a whole: a trees
+page, and an index page. </p>
+
+<h2> Object Documentation </h2>
+
+ <p>Each <strong>Package Documentation</strong> page contains: </p>
+ <ul>
+ <li> A description of the package. </li>
+ <li> A list of the modules and sub-packages contained by the
+ package. </li>
+ <li> A summary of the classes defined by the package. </li>
+ <li> A summary of the functions defined by the package. </li>
+ <li> A summary of the variables defined by the package. </li>
+ <li> A detailed description of each function defined by the
+ package. </li>
+ <li> A detailed description of each variable defined by the
+ package. </li>
+ </ul>
+
+ <p>Each <strong>Module Documentation</strong> page contains:</p>
+ <ul>
+ <li> A description of the module. </li>
+ <li> A summary of the classes defined by the module. </li>
+ <li> A summary of the functions defined by the module. </li>
+ <li> A summary of the variables defined by the module. </li>
+ <li> A detailed description of each function defined by the
+ module. </li>
+ <li> A detailed description of each variable defined by the
+ module. </li>
+ </ul>
+
+ <p>Each <strong>Class Documentation</strong> page contains: </p>
+ <ul>
+ <li> A class inheritance diagram. </li>
+ <li> A list of known subclasses. </li>
+ <li> A description of the class. </li>
+ <li> A summary of the methods defined by the class. </li>
+ <li> A summary of the instance variables defined by the class. </li>
+ <li> A summary of the class (static) variables defined by the
+ class. </li>
+ <li> A detailed description of each method defined by the
+ class. </li>
+ <li> A detailed description of each instance variable defined by the
+ class. </li>
+ <li> A detailed description of each class (static) variable defined
+ by the class. </li>
+ </ul>
+
+<h2> Project Documentation </h2>
+
+ <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
+ <ul>
+ <li> The <em>module hierarchy</em> lists every package and module, with
+ modules grouped into packages. At the top level, and within each
+ package, modules and sub-packages are listed alphabetically. </li>
+ <li> The <em>class hierarchy</em> lists every class, grouped by base
+ class. If a class has more than one base class, then it will be
+ listed under each base class. At the top level, and under each base
+ class, classes are listed alphabetically. </li>
+ </ul>
+
+ <p> The <strong>Index</strong> page contains indices of terms and
+ identifiers: </p>
+ <ul>
+ <li> The <em>term index</em> lists every term indexed by any object's
+ documentation. For each term, the index provides links to each
+ place where the term is indexed. </li>
+ <li> The <em>identifier index</em> lists the (short) name of every package,
+ module, class, method, function, variable, and parameter. For each
+ identifier, the index provides a short description, and a link to
+ its documentation. </li>
+ </ul>
+
+<h2> The Table of Contents </h2>
+
+<p> The table of contents occupies the two frames on the left side of
+the window. The upper-left frame displays the <em>project
+contents</em>, and the lower-left frame displays the <em>module
+contents</em>: </p>
+
+<table class="help summary" border="1" cellspacing="0" cellpadding="3">
+ <tr style="height: 30%">
+ <td align="center" style="font-size: small">
+ Project<br />Contents<hr />...</td>
+ <td align="center" style="font-size: small" rowspan="2" width="70%">
+ API<br />Documentation<br />Frame<br /><br /><br />
+ </td>
+ </tr>
+ <tr>
+ <td align="center" style="font-size: small">
+ Module<br />Contents<hr /> <br />...<br />
+ </td>
+ </tr>
+</table><br />
+
+<p> The <strong>project contents frame</strong> contains a list of all packages
+and modules that are defined by the project. Clicking on an entry
+will display its contents in the module contents frame. Clicking on a
+special entry, labeled "Everything," will display the contents of
+the entire project. </p>
+
+<p> The <strong>module contents frame</strong> contains a list of every
+submodule, class, type, exception, function, and variable defined by a
+module or package. Clicking on an entry will display its
+documentation in the API documentation frame. Clicking on the name of
+the module, at the top of the frame, will display the documentation
+for the module itself. </p>
+
+<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
+navigation bar can be used to control whether the table of contents is
+displayed or not. </p>
+
+<h2> The Navigation Bar </h2>
+
+<p> A navigation bar is located at the top and bottom of every page.
+It indicates what type of page you are currently viewing, and allows
+you to go to related pages. The following table describes the labels
+on the navigation bar. Note that not some labels (such as
+[Parent]) are not displayed on all pages. </p>
+
+<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
+<tr class="summary">
+ <th>Label</th>
+ <th>Highlighted when...</th>
+ <th>Links to...</th>
+</tr>
+ <tr><td valign="top"><strong>[Parent]</strong></td>
+ <td valign="top"><em>(never highlighted)</em></td>
+ <td valign="top"> the parent of the current package </td></tr>
+ <tr><td valign="top"><strong>[Package]</strong></td>
+ <td valign="top">viewing a package</td>
+ <td valign="top">the package containing the current object
+ </td></tr>
+ <tr><td valign="top"><strong>[Module]</strong></td>
+ <td valign="top">viewing a module</td>
+ <td valign="top">the module containing the current object
+ </td></tr>
+ <tr><td valign="top"><strong>[Class]</strong></td>
+ <td valign="top">viewing a class </td>
+ <td valign="top">the class containing the current object</td></tr>
+ <tr><td valign="top"><strong>[Trees]</strong></td>
+ <td valign="top">viewing the trees page</td>
+ <td valign="top"> the trees page </td></tr>
+ <tr><td valign="top"><strong>[Index]</strong></td>
+ <td valign="top">viewing the index page</td>
+ <td valign="top"> the index page </td></tr>
+ <tr><td valign="top"><strong>[Help]</strong></td>
+ <td valign="top">viewing the help page</td>
+ <td valign="top"> the help page </td></tr>
+</table>
+
+<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
+the top navigation bar can be used to control whether documentation
+for private objects is displayed. Private objects are usually defined
+as objects whose (short) names begin with a single underscore, but do
+not end with an underscore. For example, "<code>_x</code>",
+"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
+are private objects; but "<code>re.sub</code>",
+"<code>__init__</code>", and "<code>type_</code>" are not. However,
+if a module defines the "<code>__all__</code>" variable, then its
+contents are used to decide which objects are private. </p>
+
+<p> A timestamp below the bottom navigation bar indicates when each
+page was last updated. </p>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Help </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Identifier Index</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Indices </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%"> </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="identifier-index.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table border="0" width="100%">
+<tr valign="bottom"><td>
+<h1 class="epydoc">Identifier Index</h1>
+</td><td>
+[
+ <a href="#A">A</a>
+ B
+ <a href="#C">C</a>
+ <a href="#D">D</a>
+ E
+ F
+ <a href="#G">G</a>
+ H
+ <a href="#I">I</a>
+ J
+ K
+ <a href="#L">L</a>
+ M
+ <a href="#N">N</a>
+ O
+ <a href="#P">P</a>
+ Q
+ R
+ <a href="#S">S</a>
+ T
+ <a href="#U">U</a>
+ <a href="#V">V</a>
+ W
+ X
+ Y
+ Z
+ <a href="#_">_</a>
+]
+</td></table>
+<table border="0" width="100%">
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="A">A</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#authors">authors</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner-module.html">c_lightmediascanner</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#charset_del">charset_del()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#commit_interval">commit_interval</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#categories">categories</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#check">check()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#charset_add">charset_add()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#check_single_process">check_single_process()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="D">D</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#db_path">db_path</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#delete">delete()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.Parser-class.html">Parser</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#delete">delete()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#description">description</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="G">G</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#get_commit_interval">get_commit_interval()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#get_slave_timeout">get_slave_timeout()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="I">I</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#is_processing">is_processing()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="L">L</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html">lightmediascanner</a></td>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_COMM">LMS_PROGRESS_STATUS_ERROR_COMM</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_PROCESSED">LMS_PROGRESS_STATUS_PROCESSED</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_PARSE">LMS_PROGRESS_STATUS_ERROR_PARSE</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_SKIPPED">LMS_PROGRESS_STATUS_SKIPPED</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_DELETED">LMS_PROGRESS_STATUS_DELETED</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_KILLED">LMS_PROGRESS_STATUS_KILLED</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_UP_TO_DATE">LMS_PROGRESS_STATUS_UP_TO_DATE</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#name">name</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.Parser-class.html">Parser</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#name">name</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html">Parser</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner-module.html#parser_info_find">parser_info_find()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner-module.html#parsers_list_by_category">parsers_list_by_category()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parser_add">parser_add()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#path">path</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parser_del">parser_del()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parsers">parsers</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#process">process()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parser_find_and_add">parser_find_and_add()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#parsers_clear">parsers_clear()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#process_single_process">process_single_process()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner-module.html#parser_info">parser_info()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner-module.html#parsers_list">parsers_list()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="S">S</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#scanner">scanner</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.Parser-class.html">Parser</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_progress_callback">set_progress_callback()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#slave_timeout">slave_timeout</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_commit_interval">set_commit_interval()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_slave_timeout">set_slave_timeout()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#stop_processing">stop_processing()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#uri">uri</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="V">V</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#version">version</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner-module.html#__bootstrap__">__bootstrap__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#__new__">__new__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.Parser-class.html">Parser</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#__repr__">__repr__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.Parser-class.html">Parser</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__new__">__new__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.Parser-class.html">Parser</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner-module.html#__package__">__package__</a><br />
+<span class="index-where">(in <a href="lightmediascanner-module.html">lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.Parser-class.html">Parser</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner-module.html#__package__">__package__</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html">ParserInfo</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__new__">__new__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__repr__">__repr__()</a><br />
+<span class="index-where">(in <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html">LightMediaScanner</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+</table>
+</td></tr>
+</table>
+<br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Indices </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title> Python-LightMediaScanner API </title>
+</head>
+<frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="toc.html" name="moduleListFrame"
+ id="moduleListFrame" />
+ <frame src="toc-everything.html" name="moduleFrame"
+ id="moduleFrame" />
+ </frameset>
+ <frame src="lightmediascanner-module.html" name="mainFrame" id="mainFrame" />
+</frameset>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>lightmediascanner</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Home </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ Package lightmediascanner
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="lightmediascanner-module.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PACKAGE DESCRIPTION ==================== -->
+<h1 class="epydoc">Package lightmediascanner</h1><p class="nomargin-top"><span class="codelink"><a href="lightmediascanner-pysrc.html">source code</a></span></p>
+<!-- ==================== SUBMODULES ==================== -->
+<a name="section-Submodules"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Submodules</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Submodules"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr><td class="summary">
+ <ul class="nomargin">
+ <li> <strong class="uidlink"><a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a></strong> </li>
+ </ul></td></tr>
+</table>
+
+<br />
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="LMS_PROGRESS_STATUS_UP_TO_DATE"></a><span class="summary-name">LMS_PROGRESS_STATUS_UP_TO_DATE</span> = <code title="0">0</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="LMS_PROGRESS_STATUS_PROCESSED"></a><span class="summary-name">LMS_PROGRESS_STATUS_PROCESSED</span> = <code title="1">1</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="LMS_PROGRESS_STATUS_DELETED"></a><span class="summary-name">LMS_PROGRESS_STATUS_DELETED</span> = <code title="2">2</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="LMS_PROGRESS_STATUS_KILLED"></a><span class="summary-name">LMS_PROGRESS_STATUS_KILLED</span> = <code title="3">3</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="LMS_PROGRESS_STATUS_ERROR_PARSE"></a><span class="summary-name">LMS_PROGRESS_STATUS_ERROR_PARSE</span> = <code title="4">4</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="LMS_PROGRESS_STATUS_ERROR_COMM"></a><span class="summary-name">LMS_PROGRESS_STATUS_ERROR_COMM</span> = <code title="5">5</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="LMS_PROGRESS_STATUS_SKIPPED"></a><span class="summary-name">LMS_PROGRESS_STATUS_SKIPPED</span> = <code title="6">6</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'lightmediascanner'"><code class="variable-quote">'</code><code class="variable-string">lightmediascanner</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Home </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>lightmediascanner</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Home </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ Package lightmediascanner
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="lightmediascanner-pysrc.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="lightmediascanner-module.html">Package lightmediascanner</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment"># Copyright (C) 2007 by INdT</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># This program is free software; you can redistribute it and/or</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"># modify it under the terms of the GNU Lesser General Public License</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># as published by the Free Software Foundation; either version 2</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"># of the License, or (at your option) any later version.</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt>
+<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU Lesser General Public License</tt> </tt>
+<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the Free Software</tt> </tt>
+<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment"># Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
+<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-comment"># @author Gustavo Sverzut Barbieri <gustavo.barbieri@openbossa.org></tt> </tt>
+<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"> </tt>
+<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module lightmediascanner.c_lightmediascanner=lightmediascanner.c_lightmediascanner-module.html"><a title="lightmediascanner.c_lightmediascanner" class="py-name" href="#" onclick="return doclink('link-0', 'c_lightmediascanner', 'link-0');">c_lightmediascanner</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Class lightmediascanner.c_lightmediascanner.LightMediaScanner=lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html"><a title="lightmediascanner.c_lightmediascanner.LightMediaScanner" class="py-name" href="#" onclick="return doclink('link-1', 'LightMediaScanner', 'link-1');">LightMediaScanner</a></tt><tt class="py-op">,</tt> \ </tt>
+<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"> <tt id="link-2" class="py-name" targets="Function lightmediascanner.c_lightmediascanner.parser_info()=lightmediascanner.c_lightmediascanner-module.html#parser_info"><a title="lightmediascanner.c_lightmediascanner.parser_info" class="py-name" href="#" onclick="return doclink('link-2', 'parser_info', 'link-2');">parser_info</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Function lightmediascanner.c_lightmediascanner.parser_info_find()=lightmediascanner.c_lightmediascanner-module.html#parser_info_find"><a title="lightmediascanner.c_lightmediascanner.parser_info_find" class="py-name" href="#" onclick="return doclink('link-3', 'parser_info_find', 'link-3');">parser_info_find</a></tt><tt class="py-op">,</tt> \ </tt>
+<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"> <tt id="link-4" class="py-name" targets="Function lightmediascanner.c_lightmediascanner.parsers_list()=lightmediascanner.c_lightmediascanner-module.html#parsers_list"><a title="lightmediascanner.c_lightmediascanner.parsers_list" class="py-name" href="#" onclick="return doclink('link-4', 'parsers_list', 'link-4');">parsers_list</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Function lightmediascanner.c_lightmediascanner.parsers_list_by_category()=lightmediascanner.c_lightmediascanner-module.html#parsers_list_by_category"><a title="lightmediascanner.c_lightmediascanner.parsers_list_by_category" class="py-name" href="#" onclick="return doclink('link-5', 'parsers_list_by_category', 'link-5');">parsers_list_by_category</a></tt> </tt>
+<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt id="link-6" class="py-name" targets="Variable lightmediascanner.LMS_PROGRESS_STATUS_UP_TO_DATE=lightmediascanner-module.html#LMS_PROGRESS_STATUS_UP_TO_DATE"><a title="lightmediascanner.LMS_PROGRESS_STATUS_UP_TO_DATE" class="py-name" href="#" onclick="return doclink('link-6', 'LMS_PROGRESS_STATUS_UP_TO_DATE', 'link-6');">LMS_PROGRESS_STATUS_UP_TO_DATE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"><tt id="link-7" class="py-name" targets="Variable lightmediascanner.LMS_PROGRESS_STATUS_PROCESSED=lightmediascanner-module.html#LMS_PROGRESS_STATUS_PROCESSED"><a title="lightmediascanner.LMS_PROGRESS_STATUS_PROCESSED" class="py-name" href="#" onclick="return doclink('link-7', 'LMS_PROGRESS_STATUS_PROCESSED', 'link-7');">LMS_PROGRESS_STATUS_PROCESSED</a></tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"><tt id="link-8" class="py-name" targets="Variable lightmediascanner.LMS_PROGRESS_STATUS_DELETED=lightmediascanner-module.html#LMS_PROGRESS_STATUS_DELETED"><a title="lightmediascanner.LMS_PROGRESS_STATUS_DELETED" class="py-name" href="#" onclick="return doclink('link-8', 'LMS_PROGRESS_STATUS_DELETED', 'link-8');">LMS_PROGRESS_STATUS_DELETED</a></tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> </tt>
+<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"><tt id="link-9" class="py-name" targets="Variable lightmediascanner.LMS_PROGRESS_STATUS_KILLED=lightmediascanner-module.html#LMS_PROGRESS_STATUS_KILLED"><a title="lightmediascanner.LMS_PROGRESS_STATUS_KILLED" class="py-name" href="#" onclick="return doclink('link-9', 'LMS_PROGRESS_STATUS_KILLED', 'link-9');">LMS_PROGRESS_STATUS_KILLED</a></tt> <tt class="py-op">=</tt> <tt class="py-number">3</tt> </tt>
+<a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"><tt id="link-10" class="py-name" targets="Variable lightmediascanner.LMS_PROGRESS_STATUS_ERROR_PARSE=lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_PARSE"><a title="lightmediascanner.LMS_PROGRESS_STATUS_ERROR_PARSE" class="py-name" href="#" onclick="return doclink('link-10', 'LMS_PROGRESS_STATUS_ERROR_PARSE', 'link-10');">LMS_PROGRESS_STATUS_ERROR_PARSE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">4</tt> </tt>
+<a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"><tt id="link-11" class="py-name" targets="Variable lightmediascanner.LMS_PROGRESS_STATUS_ERROR_COMM=lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_COMM"><a title="lightmediascanner.LMS_PROGRESS_STATUS_ERROR_COMM" class="py-name" href="#" onclick="return doclink('link-11', 'LMS_PROGRESS_STATUS_ERROR_COMM', 'link-11');">LMS_PROGRESS_STATUS_ERROR_COMM</a></tt> <tt class="py-op">=</tt> <tt class="py-number">5</tt> </tt>
+<a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"><tt id="link-12" class="py-name" targets="Variable lightmediascanner.LMS_PROGRESS_STATUS_SKIPPED=lightmediascanner-module.html#LMS_PROGRESS_STATUS_SKIPPED"><a title="lightmediascanner.LMS_PROGRESS_STATUS_SKIPPED" class="py-name" href="#" onclick="return doclink('link-12', 'LMS_PROGRESS_STATUS_SKIPPED', 'link-12');">LMS_PROGRESS_STATUS_SKIPPED</a></tt> <tt class="py-op">=</tt> <tt class="py-number">6</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Home </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>lightmediascanner.c_lightmediascanner</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="lightmediascanner-module.html">Package lightmediascanner</a> ::
+ Module c_lightmediascanner
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="lightmediascanner.c_lightmediascanner-module.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module c_lightmediascanner</h1><p class="nomargin-top"><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html">source code</a></span></p>
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html" class="summary-name">LightMediaScanner</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a href="lightmediascanner.c_lightmediascanner.Parser-class.html" class="summary-name">Parser</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html" class="summary-name">ParserInfo</a>
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="__bootstrap__"></a><span class="summary-sig-name">__bootstrap__</span>()</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#__bootstrap__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner-module.html#parser_info" class="summary-sig-name">parser_info</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Retrieve information of parser given its path.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#parser_info">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner-module.html#parser_info_find" class="summary-sig-name">parser_info_find</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Retrieve information of parser given its name.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#parser_info_find">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner-module.html#parsers_list" class="summary-sig-name">parsers_list</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Returns a list of paths to known parsers in this system.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#parsers_list">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="parsers_list_by_category"></a><span class="summary-sig-name">parsers_list_by_category</span>(<span class="summary-sig-arg">...</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#parsers_list_by_category">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="parser_info"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">parser_info</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#parser_info">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Retrieve information of parser given its path.</p>
+ <dl class="fields">
+ <dt>Returns:</dt>
+ <dd>None if failed or ParserInfo otherwise.</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="parser_info_find"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">parser_info_find</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#parser_info_find">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Retrieve information of parser given its name.</p>
+ <dl class="fields">
+ <dt>Returns:</dt>
+ <dd>None if failed or ParserInfo otherwise.</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="parsers_list"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">parsers_list</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#parsers_list">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Returns a list of paths to known parsers in this system.</p>
+ <p>@return list of str @see parser_info()</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>lightmediascanner.c_lightmediascanner</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="lightmediascanner-module.html">Package lightmediascanner</a> ::
+ Module c_lightmediascanner
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="lightmediascanner.c_lightmediascanner-pysrc.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="lightmediascanner.c_lightmediascanner-module.html">Module lightmediascanner.c_lightmediascanner</a></h1>
+<pre class="py-src">
+<a name="__bootstrap__"></a><div id="__bootstrap__-def"><a name="L1"></a><tt class="py-lineno">1</tt> <a class="py-toggle" href="#" id="__bootstrap__-toggle" onclick="return toggle('__bootstrap__');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="lightmediascanner.c_lightmediascanner-module.html#__bootstrap__">__bootstrap__</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="__bootstrap__-collapsed" style="display:none;" pad="+" indent="++++"></div><div id="__bootstrap__-expanded"><a name="L2"></a><tt class="py-lineno">2</tt> <tt class="py-line"> <tt class="py-keyword">global</tt> <tt id="link-0" class="py-name" targets="Function lightmediascanner.c_lightmediascanner.__bootstrap__()=lightmediascanner.c_lightmediascanner-module.html#__bootstrap__"><a title="lightmediascanner.c_lightmediascanner.__bootstrap__" class="py-name" href="#" onclick="return doclink('link-0', '__bootstrap__', 'link-0');">__bootstrap__</a></tt><tt class="py-op">,</tt> <tt class="py-name">__loader__</tt><tt class="py-op">,</tt> <tt class="py-name">__file__</tt> </tt>
+<a name="L3"></a><tt class="py-lineno">3</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">sys</tt><tt class="py-op">,</tt> <tt class="py-name">pkg_resources</tt><tt class="py-op">,</tt> <tt class="py-name">imp</tt> </tt>
+<a name="L4"></a><tt class="py-lineno">4</tt> <tt class="py-line"> <tt class="py-name">__file__</tt> <tt class="py-op">=</tt> <tt class="py-name">pkg_resources</tt><tt class="py-op">.</tt><tt class="py-name">resource_filename</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt><tt class="py-string">'c_lightmediascanner.so'</tt><tt class="py-op">)</tt> </tt>
+<a name="L5"></a><tt class="py-lineno">5</tt> <tt class="py-line"> <tt class="py-name">__loader__</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt><tt class="py-op">;</tt> <tt class="py-keyword">del</tt> <tt id="link-1" class="py-name"><a title="lightmediascanner.c_lightmediascanner.__bootstrap__" class="py-name" href="#" onclick="return doclink('link-1', '__bootstrap__', 'link-0');">__bootstrap__</a></tt><tt class="py-op">,</tt> <tt class="py-name">__loader__</tt> </tt>
+<a name="L6"></a><tt class="py-lineno">6</tt> <tt class="py-line"> <tt class="py-name">imp</tt><tt class="py-op">.</tt><tt class="py-name">load_dynamic</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt><tt class="py-name">__file__</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L7"></a><tt class="py-lineno">7</tt> <tt class="py-line"><tt id="link-2" class="py-name"><a title="lightmediascanner.c_lightmediascanner.__bootstrap__" class="py-name" href="#" onclick="return doclink('link-2', '__bootstrap__', 'link-0');">__bootstrap__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L8"></a><tt class="py-lineno">8</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>lightmediascanner.c_lightmediascanner.LightMediaScanner</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="lightmediascanner-module.html">Package lightmediascanner</a> ::
+ <a href="lightmediascanner.c_lightmediascanner-module.html">Module c_lightmediascanner</a> ::
+ Class LightMediaScanner
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class LightMediaScanner</h1><p class="nomargin-top"><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner">source code</a></span></p>
+<pre class="base-tree">
+object --+
+ |
+ <strong class="uidshort">LightMediaScanner</strong>
+</pre>
+
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.__init__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">a new object with type S, a subtype of T</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__new__" class="summary-sig-name">__new__</a>(<span class="summary-sig-arg">T</span>,
+ <span class="summary-sig-arg">S</span>,
+ <span class="summary-sig-arg">...</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.__new__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ repr(x)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.__repr__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ str(x)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.__str__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#charset_add" class="summary-sig-name">charset_add</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Add charset to list of supported input charsets/encoding.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.charset_add">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="charset_del"></a><span class="summary-sig-name">charset_del</span>(<span class="summary-sig-arg">...</span>)</span><br />
+ Del charset from list of supported input charsets/encoding.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.charset_del">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#check" class="summary-sig-name">check</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Check (and update) files under directory.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.check">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#check_single_process" class="summary-sig-name">check_single_process</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Check (and update) files under directory *without fork()-ing into
+ child process*.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.check_single_process">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="delete"></a><span class="summary-sig-name">delete</span>(<span class="summary-sig-arg">...</span>)</span><br />
+ Delete all parsers and force wrapped object deletion</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.delete">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">int</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="get_commit_interval"></a><span class="summary-sig-name">get_commit_interval</span>(<span class="summary-sig-arg">...</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.get_commit_interval">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">int</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="get_slave_timeout"></a><span class="summary-sig-name">get_slave_timeout</span>(<span class="summary-sig-arg">...</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.get_slave_timeout">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">bool</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="is_processing"></a><span class="summary-sig-name">is_processing</span>(<span class="summary-sig-arg">...</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.is_processing">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html"
+ class="link">Parser</a></span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="parser_add"></a><span class="summary-sig-name">parser_add</span>(<span class="summary-sig-arg">...</span>)</span><br />
+ Add a new plugin/parser based on it's whole path to shared object.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.parser_add">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="parser_del"></a><span class="summary-sig-name">parser_del</span>(<span class="summary-sig-arg">...</span>)</span><br />
+ Delete a plugin/parser.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.parser_del">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html"
+ class="link">Parser</a></span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="parser_find_and_add"></a><span class="summary-sig-name">parser_find_and_add</span>(<span class="summary-sig-arg">...</span>)</span><br />
+ Add a new plugin/parser based on it's name.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.parser_find_and_add">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="parsers_clear"></a><span class="summary-sig-name">parsers_clear</span>(<span class="summary-sig-arg">...</span>)</span><br />
+ Delete all plugins/parsers</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.parsers_clear">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#process" class="summary-sig-name">process</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Process directory recursively.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.process">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#process_single_process" class="summary-sig-name">process_single_process</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Process directory recursively *without fork()-ing into child
+ process*.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.process_single_process">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_commit_interval" class="summary-sig-name">set_commit_interval</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Set the number of transactions between commits.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.set_commit_interval">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_progress_callback" class="summary-sig-name">set_progress_callback</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Set new progress callback.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.set_progress_callback">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html#set_slave_timeout" class="summary-sig-name">set_slave_timeout</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ Set maximum time a parser may use.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.set_slave_timeout">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="stop_processing"></a><span class="summary-sig-name">stop_processing</span>(<span class="summary-sig-arg">...</span>)</span><br />
+ Stop process/check</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.stop_processing">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="commit_interval"></a><span class="summary-name">commit_interval</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="db_path"></a><span class="summary-name">db_path</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="parsers"></a><span class="summary-name">parsers</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="slave_timeout"></a><span class="summary-name">slave_timeout</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">...</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.__init__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
+ signature</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__new__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,
+ <span class="sig-arg">S</span>,
+ <span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.__new__">source code</a></span>
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Returns: a new object with type S, a subtype of T</dt>
+ <dt>Overrides:
+ object.__new__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__repr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">...</span>)</span>
+ <br /><em class="fname">(Representation operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.__repr__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>repr(x)</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__repr__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__str__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">...</span>)</span>
+ <br /><em class="fname">(Informal representation operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.__str__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>str(x)</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__str__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="charset_add"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">charset_add</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.charset_add">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Add charset to list of supported input charsets/encoding.</p>
+ <p>If some string in analysed/parsed files are not UTF-8, then it will
+ try agains a list of charsets registered with this function.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="check"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">check</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.check">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Check (and update) files under directory.</p>
+ <p>This operates on all files in all sub directories of top_path using
+ the added parsers. If files are up to date, nothing is done, otherwise
+ they can be marked as deleted or updated if they still exists, but with
+ different size or modification time.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="check_single_process"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">check_single_process</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.check_single_process">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Check (and update) files under directory *without fork()-ing into
+ child process*.</p>
+ <p>This operates on all files in all sub directories of top_path using
+ the added parsers. If files are up to date, nothing is done, otherwise
+ they can be marked as deleted or updated if they still exists, but with
+ different size or modification time.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="process"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">process</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.process">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Process directory recursively.</p>
+ <p>This operates on all files in all sub directories of top_path using
+ the added parsers.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="process_single_process"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">process_single_process</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.process_single_process">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Process directory recursively *without fork()-ing into child
+ process*.</p>
+ <p>This operates on all files in all sub directories of top_path using
+ the added parsers.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_commit_interval"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_commit_interval</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.set_commit_interval">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Set the number of transactions between commits.</p>
+ <p>Sets how many transactions/files to handle in one commit, the more the
+ faster, but if one parser takes too long and it's killed due
+ slave_timeout being exceeded, then at most this number of transactions
+ will be lost.</p>
+ <p>Note that transaction here is not a single SQL statement, but it is
+ considered to be the processing of a file, which can be more than just
+ one.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_progress_callback"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_progress_callback</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.set_progress_callback">source code</a></span>
+ </td>
+ </tr></table>
+
+ <pre class="literalblock">
+Set new progress callback.
+
+If you want to unset a callback, just use None.
+
+Function signature is:
+
+ C{function(lms, path, status, *args, **kargs)}
+
+with status being one of LMS_PROGRESS_STATUS_*.
+
+@parm: B{cb} a callable object or None to unset previously set callback.
+
+</pre>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_slave_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_slave_timeout</span>(<span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#LightMediaScanner.set_slave_timeout">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>Set maximum time a parser may use.</p>
+ <p>This will be the timeout before killing the slave process running some
+ parser. If this happens, another slave process will be started to
+ continue from next file.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>lightmediascanner.c_lightmediascanner.Parser</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="lightmediascanner-module.html">Package lightmediascanner</a> ::
+ <a href="lightmediascanner.c_lightmediascanner-module.html">Module c_lightmediascanner</a> ::
+ Class Parser
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="lightmediascanner.c_lightmediascanner.Parser-class.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Parser</h1><p class="nomargin-top"><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser">source code</a></span></p>
+<pre class="base-tree">
+object --+
+ |
+ <strong class="uidshort">Parser</strong>
+</pre>
+
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.__init__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">a new object with type S, a subtype of T</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#__new__" class="summary-sig-name">__new__</a>(<span class="summary-sig-arg">T</span>,
+ <span class="summary-sig-arg">S</span>,
+ <span class="summary-sig-arg">...</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.__new__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ repr(x)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.__repr__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.Parser-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ str(x)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.__str__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="delete"></a><span class="summary-sig-name">delete</span>(<span class="summary-sig-arg">...</span>)</span><br />
+ Same as LightMediaScanner.parser_del(self).</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.delete">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="name"></a><span class="summary-name">name</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="scanner"></a><span class="summary-name">scanner</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">...</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.__init__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
+ signature</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__new__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,
+ <span class="sig-arg">S</span>,
+ <span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.__new__">source code</a></span>
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Returns: a new object with type S, a subtype of T</dt>
+ <dt>Overrides:
+ object.__new__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__repr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">...</span>)</span>
+ <br /><em class="fname">(Representation operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.__repr__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>repr(x)</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__repr__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__str__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">...</span>)</span>
+ <br /><em class="fname">(Informal representation operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#Parser.__str__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>str(x)</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__str__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>lightmediascanner.c_lightmediascanner.ParserInfo</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="lightmediascanner-module.html">Package lightmediascanner</a> ::
+ <a href="lightmediascanner.c_lightmediascanner-module.html">Module c_lightmediascanner</a> ::
+ Class ParserInfo
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ParserInfo</h1><p class="nomargin-top"><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#ParserInfo">source code</a></span></p>
+<pre class="base-tree">
+object --+
+ |
+ <strong class="uidshort">ParserInfo</strong>
+</pre>
+
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#ParserInfo.__init__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">a new object with type S, a subtype of T</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__new__" class="summary-sig-name">__new__</a>(<span class="summary-sig-arg">T</span>,
+ <span class="summary-sig-arg">S</span>,
+ <span class="summary-sig-arg">...</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#ParserInfo.__new__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">...</span>)</span><br />
+ str(x)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#ParserInfo.__str__">source code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="authors"></a><span class="summary-name">authors</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="categories"></a><span class="summary-name">categories</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="description"></a><span class="summary-name">description</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="name"></a><span class="summary-name">name</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="path"></a><span class="summary-name">path</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="uri"></a><span class="summary-name">uri</span>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type"> </span>
+ </td><td class="summary">
+ <a name="version"></a><span class="summary-name">version</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">...</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#ParserInfo.__init__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
+ signature</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__new__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,
+ <span class="sig-arg">S</span>,
+ <span class="sig-arg">...</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#ParserInfo.__new__">source code</a></span>
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Returns: a new object with type S, a subtype of T</dt>
+ <dt>Overrides:
+ object.__new__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__str__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">...</span>)</span>
+ <br /><em class="fname">(Informal representation operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="lightmediascanner.c_lightmediascanner-pysrc.html#ParserInfo.__str__">source code</a></span>
+ </td>
+ </tr></table>
+
+ <p>str(x)</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__str__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th> <a
+ href="module-tree.html">Trees</a> </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Module Hierarchy</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Trees </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%"> </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >] | <a href="module-tree.html"
+ target="_top">no frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Module Hierarchy</h1>
+<ul class="nomargin-top">
+ <li> <strong class="uidlink"><a href="lightmediascanner-module.html">lightmediascanner</a></strong>
+ <ul>
+ <li> <strong class="uidlink"><a href="lightmediascanner.c_lightmediascanner-module.html">lightmediascanner.c_lightmediascanner</a></strong> </li>
+ </ul>
+ </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th> <a
+ href="lightmediascanner-module.html">Home</a> </th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ > Trees </th>
+
+ <!-- Index link -->
+ <th> <a
+ href="identifier-index.html">Indices</a> </th>
+
+ <!-- Help link -->
+ <th> <a
+ href="help.html">Help</a> </th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ >Python-LightMediaScanner API</th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu Apr 23 00:00:40 2009
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<html><head><title>Epydoc Redirect Page</title>
+<meta http-equiv="cache-control" content="no-cache" />
+<meta http-equiv="expires" content="0" />
+<meta http-equiv="pragma" content="no-cache" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+<body>
+<script type="text/javascript">
+<!--
+var pages = ["lightmediascanner.c_lightmediascanner.LightMediaScanner-c", "lightmediascanner.c_lightmediascanner.ParserInfo-c", "lightmediascanner.c_lightmediascanner.Parser-c", "lightmediascanner.c_lightmediascanner-m", "lightmediascanner-m"];
+var dottedName = get_anchor();
+if (dottedName) {
+ var target = redirect_url(dottedName);
+ if (target) window.location.replace(target);
+}
+// -->
+</script>
+
+<h3>Epydoc Auto-redirect page</h3>
+
+<p>When javascript is enabled, this page will redirect URLs of
+the form <tt>redirect.html#<i>dotted.name</i></tt> to the
+documentation for the object with the given fully-qualified
+dotted name.</p>
+<p><a id="message"> </a></p>
+
+<script type="text/javascript">
+<!--
+if (dottedName) {
+ var msg = document.getElementById("message");
+ msg.innerHTML = "No documentation found for <tt>"+
+ dottedName+"</tt>";
+}
+// -->
+</script>
+
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Everything</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Everything</h1>
+<hr />
+ <h2 class="toc">All Classes</h2>
+ <a target="mainFrame" href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html"
+ >lightmediascanner.c_lightmediascanner.LightMediaScanner</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner.Parser-class.html"
+ >lightmediascanner.c_lightmediascanner.Parser</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html"
+ >lightmediascanner.c_lightmediascanner.ParserInfo</a><br /> <h2 class="toc">All Functions</h2>
+ <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#__bootstrap__"
+ >lightmediascanner.c_lightmediascanner.__bootstrap__</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#parser_info"
+ >lightmediascanner.c_lightmediascanner.parser_info</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#parser_info_find"
+ >lightmediascanner.c_lightmediascanner.parser_info_find</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#parsers_list"
+ >lightmediascanner.c_lightmediascanner.parsers_list</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#parsers_list_by_category"
+ >lightmediascanner.c_lightmediascanner.parsers_list_by_category</a><br /> <h2 class="toc">All Variables</h2>
+ <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_DELETED"
+ >lightmediascanner.LMS_PROGRESS_STATUS_DELETED</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_COMM"
+ >lightmediascanner.LMS_PROGRESS_STATUS_ERROR_COMM</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_PARSE"
+ >lightmediascanner.LMS_PROGRESS_STATUS_ERROR_PARSE</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_KILLED"
+ >lightmediascanner.LMS_PROGRESS_STATUS_KILLED</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_PROCESSED"
+ >lightmediascanner.LMS_PROGRESS_STATUS_PROCESSED</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_SKIPPED"
+ >lightmediascanner.LMS_PROGRESS_STATUS_SKIPPED</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_UP_TO_DATE"
+ >lightmediascanner.LMS_PROGRESS_STATUS_UP_TO_DATE</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#__package__"
+ >lightmediascanner.__package__</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#__package__"
+ >lightmediascanner.c_lightmediascanner.__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>lightmediascanner</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module lightmediascanner</h1>
+<hr />
+ <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_DELETED"
+ >LMS_PROGRESS_STATUS_DELETED</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_COMM"
+ >LMS_PROGRESS_STATUS_ERROR_COMM</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_ERROR_PARSE"
+ >LMS_PROGRESS_STATUS_ERROR_PARSE</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_KILLED"
+ >LMS_PROGRESS_STATUS_KILLED</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_PROCESSED"
+ >LMS_PROGRESS_STATUS_PROCESSED</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_SKIPPED"
+ >LMS_PROGRESS_STATUS_SKIPPED</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#LMS_PROGRESS_STATUS_UP_TO_DATE"
+ >LMS_PROGRESS_STATUS_UP_TO_DATE</a><br /> <a target="mainFrame" href="lightmediascanner-module.html#__package__"
+ >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>c_lightmediascanner</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module c_lightmediascanner</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="lightmediascanner.c_lightmediascanner.LightMediaScanner-class.html"
+ >LightMediaScanner</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner.Parser-class.html"
+ >Parser</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner.ParserInfo-class.html"
+ >ParserInfo</a><br /> <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#__bootstrap__"
+ >__bootstrap__</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#parser_info"
+ >parser_info</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#parser_info_find"
+ >parser_info_find</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#parsers_list"
+ >parsers_list</a><br /> <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#parsers_list_by_category"
+ >parsers_list_by_category</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="lightmediascanner.c_lightmediascanner-module.html#__package__"
+ >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Table of Contents</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Table of Contents</h1>
+<hr />
+ <a target="moduleFrame" href="toc-everything.html">Everything</a>
+ <br />
+ <h2 class="toc">Modules</h2>
+ <a target="moduleFrame" href="toc-lightmediascanner-module.html"
+ onclick="setFrame('toc-lightmediascanner-module.html','lightmediascanner-module.html');" >lightmediascanner</a><br /> <a target="moduleFrame" href="toc-lightmediascanner.c_lightmediascanner-module.html"
+ onclick="setFrame('toc-lightmediascanner.c_lightmediascanner-module.html','lightmediascanner.c_lightmediascanner-module.html');" >lightmediascanner.c_lightmediascanner</a><br /><hr />
+ <span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>