--- /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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<h1>Light Media Scanner Data Structures</h1>Here are the data structures with brief descriptions:<table>
+ <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__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__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>
+</table>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<h1>Light Media Scanner 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="structparser.html">parser</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="structpinfo.html">pinfo</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__playlist__info.html">lms_playlist_info</a> </td></tr><tr><td><a class="el" href="structlms__context.html">lms_context</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.html">lms_plugin</a> </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 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 class="el" href="structlms__db__cache.html">lms_db_cache</a> </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="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 class="el" href="structlms.html">lms</a> </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 name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> P </div></td></tr></table>
+</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></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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+ font-size: 90%;
+}
+H1 {
+ text-align: center;
+ font-size: 160%;
+}
+H2 {
+ font-size: 120%;
+}
+H3 {
+ font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.nav {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navtab {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+TD.navtab {
+ font-size: 70%;
+}
+A.qindex {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D;
+}
+A.qindex:visited {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D
+}
+A.qindex:hover {
+ text-decoration: none;
+ background-color: #ddddff;
+}
+A.qindexHL {
+ text-decoration: none;
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+ font-family: monospace, fixed;
+ font-size: 95%;
+}
+PRE.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+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; font-size: 90% }
+BODY {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+TD.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+ background-color: #e8eef2;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TR.memlist {
+ background-color: #f0f0f0;
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+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 }
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.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%;
+}
+a {
+ color: #1A41A8;
+}
+a:visited {
+ color: #2A3798;
+}
+.dirtab { padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+ font-weight: bold;
+}
+HR { height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
+
+/* Style for detailed member documentation */
+.memtemplate {
+ font-size: 80%;
+ color: #606060;
+ font-weight: normal;
+}
+.memnav {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+.memitem {
+ padding: 4px;
+ background-color: #eef3f5;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #dedeee;
+ -moz-border-radius: 8px 8px 8px 8px;
+}
+.memname {
+ white-space: nowrap;
+ font-weight: bold;
+}
+.memdoc{
+ padding-left: 10px;
+}
+.memproto {
+ background-color: #d5e1e8;
+ width: 100%;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #84b0c7;
+ font-weight: bold;
+ -moz-border-radius: 8px 8px 8px 8px;
+}
+.paramkey {
+ text-align: right;
+}
+.paramtype {
+ white-space: nowrap;
+}
+.paramname {
+ color: #602020;
+ font-style: italic;
+ white-space: nowrap;
+}
+/* End Styling for detailed member documentation */
+
+/* for the tree view */
+.ftvtree {
+ font-family: sans-serif;
+ margin:0.5em;
+}
+.directory { font-size: 9pt; font-weight: bold; }
+.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
+.directory > h3 { margin-top: 0; }
+.directory p { margin: 0px; white-space: nowrap; }
+.directory div { display: none; margin: 0px; }
+.directory img { vertical-align: -30%; }
--- /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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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>
+<h1>Light Media Scanner 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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</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_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+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__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">lms_image_info</a>
+, <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>
+</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>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_interval
+: <a class="el" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">lms</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>
+<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>
+<li>db_path
+: <a class="el" href="structlms.html#02e767169813808f193c23733ba89b4b">lms</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>
+</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="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">pinfo</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>
+</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>parsers
+: <a class="el" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">lms</a>
+<li>path
+: <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>
+</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__file__info.html#b318b81fc934636a904f5d84efe8c1ee">lms_file_info</a>
+, <a class="el" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">lms_db_cache</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>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__playlist__info.html#515e63ba413a60d21ee73687151387f0">lms_playlist_info</a>
+, <a class="el" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">lms_video_info</a>
+, <a class="el" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">lms_audio_info</a>
+<li>trackno
+: <a class="el" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">lms_audio_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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</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_w"><span>w</span></a></li>
+ </ul>
+</div>
+
+<p>
+
+<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__image__info.html#ee7b8401f3272a0855ea27a2249a8aab">lms_image_info</a>
+, <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>
+</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>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_interval
+: <a class="el" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">lms</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>
+<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>
+<li>db_path
+: <a class="el" href="structlms.html#02e767169813808f193c23733ba89b4b">lms</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>
+</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="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">pinfo</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>
+</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>parsers
+: <a class="el" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">lms</a>
+<li>path
+: <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>
+</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__file__info.html#b318b81fc934636a904f5d84efe8c1ee">lms_file_info</a>
+, <a class="el" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">lms_db_cache</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>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__playlist__info.html#515e63ba413a60d21ee73687151387f0">lms_playlist_info</a>
+, <a class="el" href="structlms__video__info.html#f3b8a8168ec317daef65da3b06f72bc0">lms_video_info</a>
+, <a class="el" href="structlms__audio__info.html#c87982b6b219add6aff3ce9c25fe00bf">lms_audio_info</a>
+<li>trackno
+: <a class="el" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">lms_audio_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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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>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="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#g3d6c281f7b3cf9fb0c299c0abe03f681">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="group__LMS__CHARSET.html#gc364c502a4a4a64ea9f092a61074a90a">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">lightmediascanner_charset_conv.c</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.c</a>
+, <a class="el" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">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__check_8c.html#859492d896e816498edb471315efced1">lightmediascanner_check.c</a>
+, <a class="el" href="lightmediascanner_8h.html#890f1af4c54c88a63abdbeff5ecd49a3">lightmediascanner.h</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__process_8c.html#e92fe8fe90d93d5ad9a42387a4b2fc6e">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lightmediascanner_private.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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="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_audio.c</a>
+, <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lightmediascanner_db.h</a>
+<li>lms_db_audio_start()
+: <a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lightmediascanner_db.h</a>
+, <a class="el" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">lightmediascanner_db_audio.c</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__private_8h.html#f2c9e9154fff8b335c4fd5693fe45aa6">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">lightmediascanner_db_common.c</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__private_8h.html#ec1ff2c5b629374611336d56871a8c0b">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt()
+: <a class="el" href="lightmediascanner__db__private_8h.html#6301bd096100f8adf24d2caff3aa0b75">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lightmediascanner_db_common.c</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__private_8h.html#76941bdbbdb711fff821343e91c2cd97">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_end_transaction()
+: <a class="el" href="lightmediascanner__db__private_8h.html#09feca4fbfde33d5647cdd5cc2de6500">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_get_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#327d54a6dac083e356fd609298a0cbd5">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_get_files()
+: <a class="el" href="lightmediascanner__db__private_8h.html#1cc8a80961a0febdd099a028f3da9c30">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_insert_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#bf21f88ddbe28a8290d0df32af0f079c">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_set_file_dtime()
+: <a class="el" href="lightmediascanner__db__private_8h.html#08c34b5b1b6e927a696ff0ce66562f54">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_update_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#69eb9d9058d9432f7658f9adffb79ed6">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lightmediascanner_db_common.c</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__private_8h.html#f47d604dd4e11f81be1ad045ee723789">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lightmediascanner_db_common.c</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__private_8h.html#8ee7bfba83958b80f717a6ccbad2a84c">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lightmediascanner_db_common.c</a>
+<li>lms_db_finalize_stmt()
+: <a class="el" href="lightmediascanner__db__private_8h.html#2660f629fbdf3d4144a6143fee837a27">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lightmediascanner_db_common.c</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__private_8h.html#617b14b976ba1cde9fe639800f2eae71">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lightmediascanner_db_common.c</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_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_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_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.h</a>
+, <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lightmediascanner_db_playlist.c</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__private_8h.html#0fa3bfe1fa3a01a4dd231b6f818122cb">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lightmediascanner_db_common.c</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#7964337689117d7dc6fb1822378b5848">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="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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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.c</a>
+, <a class="el" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lightmediascanner.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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__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_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner.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>
+, <a class="el" href="lightmediascanner__utils_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_utils.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>
+<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.c</a>
+, <a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lightmediascanner.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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_STATIC_STRING_SIZE
+: <a class="el" href="lightmediascanner__utils_8h.html#786c453d995be000d52360f327a6816b">lightmediascanner_utils.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#e48d0483903bbb9604d14b44f7c569d9">lightmediascanner.h</a>
+<li>lms_parsers_check_using()
+: <a class="el" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#f2e95cea50ce24774d2f5ed7d8c8f41c">lightmediascanner_process.c</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_run()
+: <a class="el" href="lightmediascanner__process_8c.html#4ab78dfbf29822d91472d18dd7424e77">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lightmediascanner_private.h</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#8ce53e0b14aa220d76d552882c1150a4">lightmediascanner_plugin.h</a>
+<li>lms_plugin_finish_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">lightmediascanner_plugin.h</a>
+<li>lms_plugin_match_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#4374f28037e503b570592aed72a27c15">lightmediascanner_plugin.h</a>
+<li>lms_plugin_parse_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#cc0d2d6d376ca4abd084ad313b4d479c">lightmediascanner_plugin.h</a>
+<li>lms_plugin_setup_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#a8f0f1499d3cfb5fcd6d25928297f45e">lightmediascanner_plugin.h</a>
+<li>lms_plugin_start_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#d3b811bbff952ce44516c98119d91b30">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__process_8c.html#c2f07fb73717514237862c98dbf023b2">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner_8h.html#7d2b81cfe07a8cce4c2bef705e7529f4">lightmediascanner.h</a>
+<li>PATH_SIZE
+: <a class="el" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">lightmediascanner_private.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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_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_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>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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+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#92c63007e7d04f626cafc6eef48f7022">lightmediascanner_utils.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+
+<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__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_private.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_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner.h</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__utils_8h.html#6fe68cac0abf3e2ca61141920414e93a">lightmediascanner_utils.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>
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_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>
+
+<p>
+
+<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#g3d6c281f7b3cf9fb0c299c0abe03f681">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_free()
+: <a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lightmediascanner_charset_conv.h</a>
+, <a class="el" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lightmediascanner_charset_conv.c</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_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__check_8c.html#859492d896e816498edb471315efced1">lightmediascanner_check.c</a>
+, <a class="el" href="lightmediascanner_8h.html#890f1af4c54c88a63abdbeff5ecd49a3">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__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner__process_8c.html#c2e1320b9770e0f522451b13f82efc2b">lightmediascanner_process.c</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_audio.c</a>
+, <a class="el" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lightmediascanner_db.h</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__private_8h.html#7fd514b582578c18a25cdbf6c561243c">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lightmediascanner_db_common.c</a>
+<li>lms_db_bind_double()
+: <a class="el" href="lightmediascanner__db__private_8h.html#9e78297037179998924354e73ca69349">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#4ae660a876f1e362d1ab2f8c68bdef3f">lightmediascanner_db_common.c</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__private_8h.html#bbb18d7cc44f7e363c0f240849d72c31">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c">lightmediascanner_db_common.c</a>
+<li>lms_db_bind_int64_or_null()
+: <a class="el" href="lightmediascanner__db__private_8h.html#cd7006f0271b9a47937dc2d2ae5480fe">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lightmediascanner_db_common.c</a>
+<li>lms_db_bind_text()
+: <a class="el" href="lightmediascanner__db__private_8h.html#14d56e02624ad6130bc59ae9bb950ac3">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lightmediascanner_db_common.c</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__private_8h.html#76941bdbbdb711fff821343e91c2cd97">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lightmediascanner_db_common.c</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__private_8h.html#327d54a6dac083e356fd609298a0cbd5">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_get_files()
+: <a class="el" href="lightmediascanner__db__private_8h.html#1cc8a80961a0febdd099a028f3da9c30">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_insert_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#bf21f88ddbe28a8290d0df32af0f079c">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_set_file_dtime()
+: <a class="el" href="lightmediascanner__db__private_8h.html#08c34b5b1b6e927a696ff0ce66562f54">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lightmediascanner_db_common.c</a>
+<li>lms_db_compile_stmt_update_file_info()
+: <a class="el" href="lightmediascanner__db__private_8h.html#69eb9d9058d9432f7658f9adffb79ed6">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lightmediascanner_db_common.c</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__private_8h.html#f47d604dd4e11f81be1ad045ee723789">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lightmediascanner_db_common.c</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__private_8h.html#8ee7bfba83958b80f717a6ccbad2a84c">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lightmediascanner_db_common.c</a>
+<li>lms_db_finalize_stmt()
+: <a class="el" href="lightmediascanner__db__private_8h.html#2660f629fbdf3d4144a6143fee837a27">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lightmediascanner_db_common.c</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="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_image.c</a>
+, <a class="el" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lightmediascanner_db.h</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_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.h</a>
+, <a class="el" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lightmediascanner_db_playlist.c</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_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__private_8h.html#0fa3bfe1fa3a01a4dd231b6f818122cb">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lightmediascanner_db_common.c</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__private_8h.html#455c0e5d62094b01fc935c5db8f07352">lightmediascanner_db_private.h</a>
+, <a class="el" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">lightmediascanner_db_common.c</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__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">lightmediascanner_db_common.c</a>
+, <a class="el" href="lightmediascanner__db__private_8h.html#1c57f68c64069575a36252816929e335">lightmediascanner_db_private.h</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.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.h</a>
+, <a class="el" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">lightmediascanner_db_video.c</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.c</a>
+, <a class="el" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">lightmediascanner.h</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="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#5ba173b12c355bbdf7913bfff0ff6415">lightmediascanner.h</a>
+<li>lms_parser_del_int()
+: <a class="el" href="lightmediascanner__private_8h.html#239fc535d2f20f09eeec9df86aa6ef9b">lightmediascanner_private.h</a>
+, <a class="el" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lightmediascanner.c</a>
+<li>lms_parser_find_and_add()
+: <a class="el" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lightmediascanner.c</a>
+, <a class="el" href="lightmediascanner_8h.html#e48d0483903bbb9604d14b44f7c569d9">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__process_8c.html#d002464442b08826a1da920bdf4957b7">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lightmediascanner_private.h</a>
+<li>lms_parsers_run()
+: <a class="el" href="lightmediascanner__process_8c.html#4ab78dfbf29822d91472d18dd7424e77">lightmediascanner_process.c</a>
+, <a class="el" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lightmediascanner_private.h</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>
+</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_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_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>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#92c63007e7d04f626cafc6eef48f7022">lightmediascanner_utils.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+
+<p>
+<ul>
+<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_plugin_close_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#8ce53e0b14aa220d76d552882c1150a4">lightmediascanner_plugin.h</a>
+<li>lms_plugin_finish_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">lightmediascanner_plugin.h</a>
+<li>lms_plugin_match_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#4374f28037e503b570592aed72a27c15">lightmediascanner_plugin.h</a>
+<li>lms_plugin_parse_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#cc0d2d6d376ca4abd084ad313b4d479c">lightmediascanner_plugin.h</a>
+<li>lms_plugin_setup_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#a8f0f1499d3cfb5fcd6d25928297f45e">lightmediascanner_plugin.h</a>
+<li>lms_plugin_start_fn_t
+: <a class="el" href="lightmediascanner__plugin_8h.html#d3b811bbff952ce44516c98119d91b30">lightmediascanner_plugin.h</a>
+<li>lms_plugin_t
+: <a class="el" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">lightmediascanner.h</a>
+<li>lms_t
+: <a class="el" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lightmediascanner.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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_defs.html"><span>Defines</span></a></li>
+ </ul>
+</div>
+
+<p>
+<ul>
+<li>lms_db_table_updater_t
+: <a class="el" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">lightmediascanner_db_private.h</a>
+</ul>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+digraph G
+{
+ bgcolor="transparent";
+ edge [fontname="FreeSans.ttf",fontsize=10,labelfontname="FreeSans.ttf",labelfontsize=10];
+ node [fontname="FreeSans.ttf",fontsize=10,shape=record];
+ Node9 [shape="box",label="Inherited",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",fillcolor="grey75",style="filled" fontcolor="black"];
+ Node10 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans.ttf"];
+ Node10 [shape="box",label="PublicBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",color="black",URL="$classPublicBase.html"];
+ Node11 -> Node10 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans.ttf"];
+ Node11 [shape="box",label="Truncated",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",color="red",URL="$classTruncated.html"];
+ Node13 -> Node9 [dir=back,color="darkgreen",fontsize=10,style="solid",fontname="FreeSans.ttf"];
+ Node13 [shape="box",label="ProtectedBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",color="black",URL="$classProtectedBase.html"];
+ Node14 -> Node9 [dir=back,color="firebrick4",fontsize=10,style="solid",fontname="FreeSans.ttf"];
+ Node14 [shape="box",label="PrivateBase",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",color="black",URL="$classPrivateBase.html"];
+ Node15 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans.ttf"];
+ Node15 [shape="box",label="Undocumented",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",color="grey75"];
+ Node16 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="FreeSans.ttf"];
+ Node16 [shape="box",label="Templ< int >",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",color="black",URL="$classTempl.html"];
+ Node17 -> Node16 [dir=back,color="orange",fontsize=10,style="dashed",label="< int >",fontname="FreeSans.ttf"];
+ Node17 [shape="box",label="Templ< T >",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",color="black",URL="$classTempl.html"];
+ Node18 -> Node9 [dir=back,color="darkorchid3",fontsize=10,style="dashed",label="m_usedClass",fontname="FreeSans.ttf"];
+ Node18 [shape="box",label="Used",fontsize=10,height=0.2,width=0.4,fontname="FreeSans.ttf",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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+</div>
+<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> If the <code>MAX_DOT_GRAPH_HEIGHT</code> tag in the configuration file is set to 240 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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+</div>
+<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 width="100%"></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#l00451">451</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00067">lms::cs_conv</a>, and <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00098">lms_charset_conv_add()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__API_g4fd56e209d415b27466274726cc7d59f_cgraph.png" border="0" usemap="#group__LMS__API_g4fd56e209d415b27466274726cc7d59f_cgraph_map" alt=""></center>
+<map name="group__LMS__API_g4fd56e209d415b27466274726cc7d59f_cgraph_map">
+<area shape="rect" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000" title="lms_charset_conv_add" alt="" coords="165,5,309,32"></map>
+
+</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 width="100%"></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#l00474">474</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00067">lms::cs_conv</a>, and <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00164">lms_charset_conv_del()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__API_g0b427b8b60957e29a0e504c10c5356b0_cgraph.png" border="0" usemap="#group__LMS__API_g0b427b8b60957e29a0e504c10c5356b0_cgraph_map" alt=""></center>
+<map name="group__LMS__API_g0b427b8b60957e29a0e504c10c5356b0_cgraph_map">
+<area shape="rect" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4" title="lms_charset_conv_del" alt="" coords="164,5,303,32"></map>
+
+</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 width="100%"></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#l00157">157</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00067">lms::cs_conv</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00068">lms::db_path</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00071">lms::is_processing</a>, <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00067">lms_charset_conv_free()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00604">lms_create_slave()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__API_gf15f3b0f7de2113155a360df989b7687_cgraph.png" border="0" usemap="#group__LMS__API_gf15f3b0f7de2113155a360df989b7687_cgraph_map" alt=""></center>
+<map name="group__LMS__API_gf15f3b0f7de2113155a360df989b7687_cgraph_map">
+<area shape="rect" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091" title="lms_charset_conv_free" alt="" coords="124,5,268,32"></map>
+
+</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 width="100%"></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#l00404">404</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00070">lms::commit_interval</a>.
+</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 width="100%"></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#l00340">340</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00068">lms::db_path</a>.
+</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 width="100%"></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#l00362">362</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00069">lms::slave_timeout</a>.
+</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 width="100%"></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#890f1af4c54c88a63abdbeff5ecd49a3">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#l00321">321</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00071">lms::is_processing</a>.
+</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 width="100%"></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#l00119">119</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00070">lms::commit_interval</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00067">lms::cs_conv</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00068">lms::db_path</a>, <a class="el" href="lightmediascanner_8c-source.html#l00035">DEFAULT_COMMIT_INTERVAL</a>, <a class="el" href="lightmediascanner_8c-source.html#l00034">DEFAULT_SLAVE_TIMEOUT</a>, <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00067">lms_charset_conv_free()</a>, <a class="el" href="lightmediascanner__charset__conv_8c-source.html#l00026">lms_charset_conv_new()</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00069">lms::slave_timeout</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__API_g982939bdd2aeb664b5cf7a50b67c1030_cgraph.png" border="0" usemap="#group__LMS__API_g982939bdd2aeb664b5cf7a50b67c1030_cgraph_map" alt=""></center>
+<map name="group__LMS__API_g982939bdd2aeb664b5cf7a50b67c1030_cgraph_map">
+<area shape="rect" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091" title="lms_charset_conv_free" alt="" coords="124,5,268,32"><area shape="rect" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab" title="lms_charset_conv_new" alt="" coords="123,56,269,83"></map>
+
+</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 width="100%"></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#l00190">190</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00071">lms::is_processing</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00235">lms_parser_find_and_add()</a>.
+</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 width="100%"></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#l00289">289</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00071">lms::is_processing</a>, <a class="el" href="lightmediascanner_8c-source.html#l00249">lms_parser_del_int()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00059">parser::plugin</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__API_g1da5e5f834e0289ea49a0fbc2280feda_cgraph.png" border="0" usemap="#group__LMS__API_g1da5e5f834e0289ea49a0fbc2280feda_cgraph_map" alt=""></center>
+<map name="group__LMS__API_g1da5e5f834e0289ea49a0fbc2280feda_cgraph_map">
+<area shape="rect" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf" title="lms_parser_del_int" alt="" coords="159,5,281,32"></map>
+
+</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 width="100%"></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#l00235">235</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner_8c-source.html#l00190">lms_parser_add()</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00061">parser::so_path</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__API_g74b81422ff46a46b4b0fc44e8709ecee_cgraph.png" border="0" usemap="#group__LMS__API_g74b81422ff46a46b4b0fc44e8709ecee_cgraph_map" alt=""></center>
+<map name="group__LMS__API_g74b81422ff46a46b4b0fc44e8709ecee_cgraph_map">
+<area shape="rect" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588" title="lms_parser_add" alt="" coords="215,5,319,32"></map>
+
+</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 width="100%"></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#l00427">427</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00070">lms::commit_interval</a>.
+</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 width="100%"></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#l00382">382</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00069">lms::slave_timeout</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4" title="lms_charset_conv_del" alt="" coords="164,5,303,32">
--- /dev/null
+741864e5ef35480d64dc8345e472b712
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf" title="lms_parser_del_int" alt="" coords="159,5,281,32">
--- /dev/null
+ebac3ba08ff3018fd396ac6b1eaa0c0f
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000" title="lms_charset_conv_add" alt="" coords="165,5,309,32">
--- /dev/null
+37edee99cb66d3d72d36c490a30bcf2e
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588" title="lms_parser_add" alt="" coords="215,5,319,32">
--- /dev/null
+ba12f4bd6c9bfde5afd2da8e3efd1c1b
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091" title="lms_charset_conv_free" alt="" coords="124,5,268,32">
+<area shape="rect" href="$group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab" title="lms_charset_conv_new" alt="" coords="123,56,269,83">
--- /dev/null
+8ca1d52d09150968d48d612cb14964f6
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091" title="lms_charset_conv_free" alt="" coords="124,5,268,32">
--- /dev/null
+1c8005cea026be0e838fc5c01fe19dc0
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+</div>
+<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 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#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 <br>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g3d6c281f7b3cf9fb0c299c0abe03f681">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>.
+</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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g3d6c281f7b3cf9fb0c299c0abe03f681"></a><!-- doxytag: member="lightmediascanner_charset_conv.h::lms_charset_conv_check" ref="g3d6c281f7b3cf9fb0c299c0abe03f681" 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 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 width="100%"></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 width="100%"></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 width="100%"></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#l00067">67</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00157">lms_free()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00119">lms_new()</a>.
+</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 width="100%"></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#l00026">26</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00119">lms_new()</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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: DataBase-API</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+</div>
+<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 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 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 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 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>.
+</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>.
+</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>.
+</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>.
+</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 width="100%"></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 width="100%"></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#l00352">352</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00417">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00093">lms_db_finalize_stmt()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00247">lms_db_audio_new()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g7560f9dab2ecd309290d200ea809375d_cgraph.png" border="0" usemap="#group__LMS__DB_g7560f9dab2ecd309290d200ea809375d_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g7560f9dab2ecd309290d200ea809375d_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="188,5,308,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="180,56,316,83"></map>
+
+</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 width="100%"></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#l00247">247</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00352">lms_db_audio_free()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">lms_db_cache_add()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00442">lms_db_cache_get()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g09c4349148be1bdf02f069f8acb191ee_cgraph.png" border="0" usemap="#group__LMS__DB_g09c4349148be1bdf02f069f8acb191ee_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g09c4349148be1bdf02f069f8acb191ee_cgraph_map">
+<area shape="rect" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d" title="lms_db_audio_free" alt="" coords="180,31,303,57"><area shape="rect" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04" title="lms_db_cache_add" alt="" coords="180,81,303,108"><area shape="rect" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3" title="lms_db_cache_get" alt="" coords="181,132,301,159"><area shape="rect" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="361,5,481,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="353,56,489,83"></map>
+
+</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 width="100%"></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#l00291">291</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g39731623b0bc5436858820a94487fdc1_cgraph.png" border="0" usemap="#group__LMS__DB_g39731623b0bc5436858820a94487fdc1_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g39731623b0bc5436858820a94487fdc1_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="183,5,321,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="372,5,495,32"></map>
+
+</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 width="100%"></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 width="100%"></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#l00173">173</a> of file <a class="el" href="lightmediascanner__db__image_8c-source.html">lightmediascanner_db_image.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00417">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00093">lms_db_finalize_stmt()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__image_8c-source.html#l00097">lms_db_image_new()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g5160a3f620f1ebd562b6ec0add0f65a6_cgraph.png" border="0" usemap="#group__LMS__DB_g5160a3f620f1ebd562b6ec0add0f65a6_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g5160a3f620f1ebd562b6ec0add0f65a6_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="191,5,311,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="183,56,319,83"></map>
+
+</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 width="100%"></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#l00097">97</a> of file <a class="el" href="lightmediascanner__db__image_8c-source.html">lightmediascanner_db_image.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00442">lms_db_cache_get()</a>, and <a class="el" href="lightmediascanner__db__image_8c-source.html#l00173">lms_db_image_free()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g3eac8dbebc0a847b63702e531872e2e7_cgraph.png" border="0" usemap="#group__LMS__DB_g3eac8dbebc0a847b63702e531872e2e7_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g3eac8dbebc0a847b63702e531872e2e7_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04" title="lms_db_cache_add" alt="" coords="187,5,309,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3" title="lms_db_cache_get" alt="" coords="188,56,308,83"><area shape="rect" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6" title="lms_db_image_free" alt="" coords="185,107,311,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="369,81,489,108"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="361,132,497,159"></map>
+
+</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 width="100%"></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#l00141">141</a> of file <a class="el" href="lightmediascanner__db__image_8c-source.html">lightmediascanner_db_image.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g66dc91038d76fa96d9feaaa119e2ae56_cgraph.png" border="0" usemap="#group__LMS__DB_g66dc91038d76fa96d9feaaa119e2ae56_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g66dc91038d76fa96d9feaaa119e2ae56_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="185,5,324,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="375,5,497,32"></map>
+
+</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 width="100%"></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 width="100%"></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#l00165">165</a> of file <a class="el" href="lightmediascanner__db__playlist_8c-source.html">lightmediascanner_db_playlist.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00417">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00093">lms_db_finalize_stmt()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00091">lms_db_playlist_new()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_ge0e003fb6c8deccf8c15a7cedb88c789_cgraph.png" border="0" usemap="#group__LMS__DB_ge0e003fb6c8deccf8c15a7cedb88c789_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_ge0e003fb6c8deccf8c15a7cedb88c789_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="196,5,316,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="188,56,324,83"></map>
+
+</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 width="100%"></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#l00091">91</a> of file <a class="el" href="lightmediascanner__db__playlist_8c-source.html">lightmediascanner_db_playlist.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00442">lms_db_cache_get()</a>, and <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00165">lms_db_playlist_free()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g379e3bbb3f4a87b1d389df587dec0875_cgraph.png" border="0" usemap="#group__LMS__DB_g379e3bbb3f4a87b1d389df587dec0875_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g379e3bbb3f4a87b1d389df587dec0875_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04" title="lms_db_cache_add" alt="" coords="195,5,317,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3" title="lms_db_cache_get" alt="" coords="196,56,316,83"><area shape="rect" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789" title="lms_db_playlist_free" alt="" coords="189,107,323,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="380,81,500,108"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="372,132,508,159"></map>
+
+</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 width="100%"></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#l00135">135</a> of file <a class="el" href="lightmediascanner__db__playlist_8c-source.html">lightmediascanner_db_playlist.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g9a0ba775eacd1abdc6bfd08c26bbd437_cgraph.png" border="0" usemap="#group__LMS__DB_g9a0ba775eacd1abdc6bfd08c26bbd437_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g9a0ba775eacd1abdc6bfd08c26bbd437_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="191,5,329,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="380,5,503,32"></map>
+
+</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 width="100%"></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 width="100%"></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#l00177">177</a> of file <a class="el" href="lightmediascanner__db__video_8c-source.html">lightmediascanner_db_video.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00417">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00093">lms_db_finalize_stmt()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__video_8c-source.html#l00104">lms_db_video_new()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g6be7c0922e76acc29542643424cfeac0_cgraph.png" border="0" usemap="#group__LMS__DB_g6be7c0922e76acc29542643424cfeac0_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g6be7c0922e76acc29542643424cfeac0_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="188,5,308,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="180,56,316,83"></map>
+
+</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 width="100%"></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#l00104">104</a> of file <a class="el" href="lightmediascanner__db__video_8c-source.html">lightmediascanner_db_video.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00442">lms_db_cache_get()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00177">lms_db_video_free()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_ga206178e1f883c1bf7a3281f982109b2_cgraph.png" border="0" usemap="#group__LMS__DB_ga206178e1f883c1bf7a3281f982109b2_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_ga206178e1f883c1bf7a3281f982109b2_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04" title="lms_db_cache_add" alt="" coords="180,5,303,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3" title="lms_db_cache_get" alt="" coords="181,56,301,83"><area shape="rect" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0" title="lms_db_video_free" alt="" coords="180,107,303,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="361,81,481,108"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="353,132,489,159"></map>
+
+</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 width="100%"></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#l00148">148</a> of file <a class="el" href="lightmediascanner__db__video_8c-source.html">lightmediascanner_db_video.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="group__LMS__DB_g0ebc0dd37b1c9bcaf7741231a411ade2_cgraph.png" border="0" usemap="#group__LMS__DB_g0ebc0dd37b1c9bcaf7741231a411ade2_cgraph_map" alt=""></center>
+<map name="group__LMS__DB_g0ebc0dd37b1c9bcaf7741231a411ade2_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="183,5,321,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="372,5,495,32"></map>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d" title="lms_db_audio_free" alt="" coords="180,31,303,57">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04" title="lms_db_cache_add" alt="" coords="180,81,303,108">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3" title="lms_db_cache_get" alt="" coords="181,132,301,159">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="361,5,481,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="353,56,489,83">
--- /dev/null
+eb02e47b6c3da31a0c666fdb72746f9c
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="183,5,321,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="372,5,495,32">
--- /dev/null
+075f37f351138796cb2745deda6fbe82
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04" title="lms_db_cache_add" alt="" coords="195,5,317,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3" title="lms_db_cache_get" alt="" coords="196,56,316,83">
+<area shape="rect" href="$group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789" title="lms_db_playlist_free" alt="" coords="189,107,323,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="380,81,500,108">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="372,132,508,159">
--- /dev/null
+959c572e318a9c938cc52001b61635f9
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="183,5,321,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="372,5,495,32">
--- /dev/null
+8d4f3544e83994d5316abfe3c1bcc1b1
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04" title="lms_db_cache_add" alt="" coords="187,5,309,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3" title="lms_db_cache_get" alt="" coords="188,56,308,83">
+<area shape="rect" href="$group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6" title="lms_db_image_free" alt="" coords="185,107,311,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="369,81,489,108">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="361,132,497,159">
--- /dev/null
+fbd6dc8be19d98f81704a2748ad68f34
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="191,5,311,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="183,56,319,83">
--- /dev/null
+42ec26c4b56e9b61bc35de5035cbba4e
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="185,5,324,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="375,5,497,32">
--- /dev/null
+931cc66356963e2fccc1aeb2eb6ece33
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="188,5,308,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="180,56,316,83">
--- /dev/null
+1616d5ebff70eb7e63ec28d516875096
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="188,5,308,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="180,56,316,83">
--- /dev/null
+b5fdb9b9d434a7563a080c2d0629345c
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="191,5,329,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="380,5,503,32">
--- /dev/null
+3c872c5d2fa1cff6fd9ea4cd7db6ea38
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#19b0458b9d7b76370588156e931a9c04" title="lms_db_cache_add" alt="" coords="180,5,303,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3" title="lms_db_cache_get" alt="" coords="181,56,301,83">
+<area shape="rect" href="$group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0" title="lms_db_video_free" alt="" coords="180,107,303,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="361,81,481,108">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="353,132,489,159">
--- /dev/null
+eecaad120bf9f1954029b1660f5244b6
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0" title="lms_db_cache_del" alt="" coords="196,5,316,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="188,56,324,83">
--- /dev/null
+90288409fec4c7c6eac1e45dab6d2d9f
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+</div>
+<h1>Plugins-API</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+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>)
+</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#4374f28037e503b570592aed72a27c15">lms_plugin_match_fn_t</a> <a class="code" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">match</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#cc0d2d6d376ca4abd084ad313b4d479c">lms_plugin_parse_fn_t</a> <a class="code" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">parse</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#8ce53e0b14aa220d76d552882c1150a4">lms_plugin_close_fn_t</a> <a class="code" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">close</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#a8f0f1499d3cfb5fcd6d25928297f45e">lms_plugin_setup_fn_t</a> <a class="code" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">setup</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#d3b811bbff952ce44516c98119d91b30">lms_plugin_start_fn_t</a> <a class="code" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">start</a>;
+ <a class="code" href="lightmediascanner__plugin_8h.html#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">lms_plugin_finish_fn_t</a> <a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">finish</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. <hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+</div>
+<h1>Light Media Scanner Documentation</h1>
+<p>
+<h3 align="center">0.1 </h3>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>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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="lightmediascanner_8h.html">lightmediascanner.h</a>"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__private_8h.html">lightmediascanner_private.h</a>"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__plugin_8h.html">lightmediascanner_plugin.h</a>"</span>
+<a name="l00033"></a>00033
+<a name="l00034"></a><a class="code" href="lightmediascanner_8c.html#c2843894cca63ec0089c381e69d1d81a">00034</a> <span class="preprocessor">#define DEFAULT_SLAVE_TIMEOUT 1000</span>
+<a name="l00035"></a><a class="code" href="lightmediascanner_8c.html#6d0480dc76aba4a2291d79ac2466fc59">00035</a> <span class="preprocessor"></span><span class="preprocessor">#define DEFAULT_COMMIT_INTERVAL 100</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00037"></a>00037 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00038"></a>00038 _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="l00039"></a>00039 {
+<a name="l00040"></a>00040 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *(*plugin_open)(void);
+<a name="l00041"></a>00041 <span class="keywordtype">char</span> *errmsg;
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043 memset(p, 0, <span class="keyword">sizeof</span>(*p));
+<a name="l00044"></a>00044
+<a name="l00045"></a>00045 p->dl_handle = dlopen(so_path, RTLD_NOW | RTLD_LOCAL);
+<a name="l00046"></a>00046 errmsg = dlerror();
+<a name="l00047"></a>00047 <span class="keywordflow">if</span> (errmsg) {
+<a name="l00048"></a>00048 fprintf(stderr, <span class="stringliteral">"ERROR: could not dlopen() %s\n"</span>, errmsg);
+<a name="l00049"></a>00049 <span class="keywordflow">return</span> -1;
+<a name="l00050"></a>00050 }
+<a name="l00051"></a>00051
+<a name="l00052"></a>00052 plugin_open = dlsym(p->dl_handle, <span class="stringliteral">"lms_plugin_open"</span>);
+<a name="l00053"></a>00053 errmsg = dlerror();
+<a name="l00054"></a>00054 <span class="keywordflow">if</span> (errmsg) {
+<a name="l00055"></a>00055 fprintf(stderr, <span class="stringliteral">"ERROR: could not find plugin entry point %s\n"</span>,
+<a name="l00056"></a>00056 errmsg);
+<a name="l00057"></a>00057 <span class="keywordflow">return</span> -2;
+<a name="l00058"></a>00058 }
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 p->so_path = strdup(so_path);
+<a name="l00061"></a>00061 <span class="keywordflow">if</span> (!p->so_path) {
+<a name="l00062"></a>00062 perror(<span class="stringliteral">"strdup"</span>);
+<a name="l00063"></a>00063 <span class="keywordflow">return</span> -3;
+<a name="l00064"></a>00064 }
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 p->plugin = plugin_open();
+<a name="l00067"></a>00067 <span class="keywordflow">if</span> (!p->plugin) {
+<a name="l00068"></a>00068 fprintf(stderr, <span class="stringliteral">"ERROR: plugin \"%s\" failed to init.\n"</span>, so_path);
+<a name="l00069"></a>00069 <span class="keywordflow">return</span> -4;
+<a name="l00070"></a>00070 }
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 <span class="keywordflow">return</span> 0;
+<a name="l00073"></a>00073 }
+<a name="l00074"></a>00074
+<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00076"></a>00076 _parser_unload(<span class="keyword">struct</span> <a class="code" href="structparser.html">parser</a> *p)
+<a name="l00077"></a>00077 {
+<a name="l00078"></a>00078 <span class="keywordtype">int</span> r;
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 r = 0;
+<a name="l00081"></a>00081 <span class="keywordflow">if</span> (p-><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>) {
+<a name="l00082"></a>00082 <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="l00083"></a>00083 fprintf(stderr, <span class="stringliteral">"ERROR: plugin \"%s\" failed to deinit.\n"</span>,
+<a name="l00084"></a>00084 p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>);
+<a name="l00085"></a>00085 r -= 1;
+<a name="l00086"></a>00086 }
+<a name="l00087"></a>00087 }
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keywordflow">if</span> (p-><a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a>) {
+<a name="l00090"></a>00090 <span class="keywordtype">char</span> *errmsg;
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 dlclose(p-><a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a>);
+<a name="l00093"></a>00093 errmsg = dlerror();
+<a name="l00094"></a>00094 <span class="keywordflow">if</span> (errmsg) {
+<a name="l00095"></a>00095 fprintf(stderr, <span class="stringliteral">"ERROR: could not dlclose() plugin \"%s\": %s\n"</span>,
+<a name="l00096"></a>00096 errmsg, p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>);
+<a name="l00097"></a>00097 r -= 1;
+<a name="l00098"></a>00098 }
+<a name="l00099"></a>00099 }
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="keywordflow">if</span> (p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>)
+<a name="l00102"></a>00102 free(p-><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>);
+<a name="l00103"></a>00103
+<a name="l00104"></a>00104 <span class="keywordflow">return</span> r;
+<a name="l00105"></a>00105 }
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107
+<a name="l00108"></a>00108 <span class="comment">/***********************************************************************</span>
+<a name="l00109"></a>00109 <span class="comment"> * Public API.</span>
+<a name="l00110"></a>00110 <span class="comment"> ***********************************************************************/</span>
+<a name="l00118"></a>00118 <a class="code" href="structlms.html">lms_t</a> *
+<a name="l00119"></a><a class="code" href="group__LMS__API.html#g982939bdd2aeb664b5cf7a50b67c1030">00119</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="l00120"></a>00120 {
+<a name="l00121"></a>00121 <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>;
+<a name="l00122"></a>00122
+<a name="l00123"></a>00123 lms = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structlms.html">lms_t</a>));
+<a name="l00124"></a>00124 <span class="keywordflow">if</span> (!lms) {
+<a name="l00125"></a>00125 perror(<span class="stringliteral">"calloc"</span>);
+<a name="l00126"></a>00126 <span class="keywordflow">return</span> NULL;
+<a name="l00127"></a>00127 }
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 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="l00130"></a>00130 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">cs_conv</a>) {
+<a name="l00131"></a>00131 free(lms);
+<a name="l00132"></a>00132 <span class="keywordflow">return</span> NULL;
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134
+<a name="l00135"></a>00135 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="l00136"></a>00136 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="l00137"></a>00137 lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a> = strdup(db_path);
+<a name="l00138"></a>00138 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>) {
+<a name="l00139"></a>00139 perror(<span class="stringliteral">"strdup"</span>);
+<a name="l00140"></a>00140 <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="l00141"></a>00141 free(lms);
+<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> lms;
+<a name="l00146"></a>00146 }
+<a name="l00147"></a>00147
+<a name="l00156"></a>00156 <span class="keywordtype">int</span>
+<a name="l00157"></a><a class="code" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">00157</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="l00158"></a>00158 {
+<a name="l00159"></a>00159 <span class="keywordtype">int</span> i;
+<a name="l00160"></a>00160
+<a name="l00161"></a>00161 <span class="keywordflow">if</span> (!lms)
+<a name="l00162"></a>00162 <span class="keywordflow">return</span> 0;
+<a name="l00163"></a>00163
+<a name="l00164"></a>00164 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>)
+<a name="l00165"></a>00165 <span class="keywordflow">return</span> -1;
+<a name="l00166"></a>00166
+<a name="l00167"></a>00167 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00168"></a>00168 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++)
+<a name="l00169"></a>00169 _parser_unload(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> + i);
+<a name="l00170"></a>00170
+<a name="l00171"></a>00171 free(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>);
+<a name="l00172"></a>00172 }
+<a name="l00173"></a>00173
+<a name="l00174"></a>00174 free(lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00175"></a>00175 <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="l00176"></a>00176 free(lms);
+<a name="l00177"></a>00177 <span class="keywordflow">return</span> 0;
+<a name="l00178"></a>00178 }
+<a name="l00179"></a>00179
+<a name="l00189"></a>00189 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *
+<a name="l00190"></a><a class="code" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">00190</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="l00191"></a>00191 {
+<a name="l00192"></a>00192 <span class="keyword">struct </span><a class="code" href="structparser.html">parser</a> *<a class="code" href="structparser.html">parser</a>;
+<a name="l00193"></a>00193
+<a name="l00194"></a>00194 <span class="keywordflow">if</span> (!lms)
+<a name="l00195"></a>00195 <span class="keywordflow">return</span> NULL;
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 <span class="keywordflow">if</span> (!so_path)
+<a name="l00198"></a>00198 <span class="keywordflow">return</span> NULL;
+<a name="l00199"></a>00199
+<a name="l00200"></a>00200 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>) {
+<a name="l00201"></a>00201 fprintf(stderr, <span class="stringliteral">"ERROR: do not add parsers while it's processing.\n"</span>);
+<a name="l00202"></a>00202 <span class="keywordflow">return</span> NULL;
+<a name="l00203"></a>00203 }
+<a name="l00204"></a>00204
+<a name="l00205"></a>00205 lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> = realloc(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>,
+<a name="l00206"></a>00206 (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="l00207"></a>00207 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00208"></a>00208 perror(<span class="stringliteral">"realloc"</span>);
+<a name="l00209"></a>00209 <span class="keywordflow">return</span> NULL;
+<a name="l00210"></a>00210 }
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 parser = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> + lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>;
+<a name="l00213"></a>00213 <span class="keywordflow">if</span> (_parser_load(parser, so_path) != 0) {
+<a name="l00214"></a>00214 _parser_unload(parser);
+<a name="l00215"></a>00215 <span class="keywordflow">return</span> NULL;
+<a name="l00216"></a>00216 }
+<a name="l00217"></a>00217
+<a name="l00218"></a>00218 lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>++;
+<a name="l00219"></a>00219 <span class="keywordflow">return</span> parser->plugin;
+<a name="l00220"></a>00220 }
+<a name="l00221"></a>00221
+<a name="l00234"></a>00234 <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *
+<a name="l00235"></a><a class="code" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">00235</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="l00236"></a>00236 {
+<a name="l00237"></a>00237 <span class="keywordtype">char</span> <a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>[PATH_MAX];
+<a name="l00238"></a>00238
+<a name="l00239"></a>00239 <span class="keywordflow">if</span> (!lms)
+<a name="l00240"></a>00240 <span class="keywordflow">return</span> NULL;
+<a name="l00241"></a>00241 <span class="keywordflow">if</span> (!name)
+<a name="l00242"></a>00242 <span class="keywordflow">return</span> NULL;
+<a name="l00243"></a>00243
+<a name="l00244"></a>00244 snprintf(so_path, <span class="keyword">sizeof</span>(so_path), <span class="stringliteral">"%s/%s.so"</span>, PLUGINSDIR, name);
+<a name="l00245"></a>00245 <span class="keywordflow">return</span> <a class="code" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lms_parser_add</a>(lms, so_path);
+<a name="l00246"></a>00246 }
+<a name="l00247"></a>00247
+<a name="l00248"></a>00248 <span class="keywordtype">int</span>
+<a name="l00249"></a><a class="code" href="lightmediascanner__private_8h.html#239fc535d2f20f09eeec9df86aa6ef9b">00249</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="l00250"></a>00250 {
+<a name="l00251"></a>00251 <span class="keyword">struct </span><a class="code" href="structparser.html">parser</a> *<a class="code" href="structparser.html">parser</a>;
+<a name="l00252"></a>00252
+<a name="l00253"></a>00253 parser = lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> + i;
+<a name="l00254"></a>00254 _parser_unload(parser);
+<a name="l00255"></a>00255 lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>--;
+<a name="l00256"></a>00256
+<a name="l00257"></a>00257 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> == 0) {
+<a name="l00258"></a>00258 free(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>);
+<a name="l00259"></a>00259 lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> = NULL;
+<a name="l00260"></a>00260 <span class="keywordflow">return</span> 0;
+<a name="l00261"></a>00261 } <span class="keywordflow">else</span> {
+<a name="l00262"></a>00262 <span class="keywordtype">int</span> dif;
+<a name="l00263"></a>00263
+<a name="l00264"></a>00264 dif = lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> - i;
+<a name="l00265"></a>00265 <span class="keywordflow">if</span> (dif)
+<a name="l00266"></a>00266 lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> = memmove(parser, parser + 1,
+<a name="l00267"></a>00267 dif * <span class="keyword">sizeof</span>(<span class="keyword">struct</span> parser));
+<a name="l00268"></a>00268
+<a name="l00269"></a>00269 lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a> = realloc(lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>,
+<a name="l00270"></a>00270 lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> * <span class="keyword">sizeof</span>(<span class="keyword">struct</span> parser));
+<a name="l00271"></a>00271 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00272"></a>00272 lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> = 0;
+<a name="l00273"></a>00273 <span class="keywordflow">return</span> -1;
+<a name="l00274"></a>00274 }
+<a name="l00275"></a>00275
+<a name="l00276"></a>00276 <span class="keywordflow">return</span> 0;
+<a name="l00277"></a>00277 }
+<a name="l00278"></a>00278 }
+<a name="l00279"></a>00279
+<a name="l00288"></a>00288 <span class="keywordtype">int</span>
+<a name="l00289"></a><a class="code" href="group__LMS__API.html#g1da5e5f834e0289ea49a0fbc2280feda">00289</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="l00290"></a>00290 {
+<a name="l00291"></a>00291 <span class="keywordtype">int</span> i;
+<a name="l00292"></a>00292
+<a name="l00293"></a>00293 <span class="keywordflow">if</span> (!lms)
+<a name="l00294"></a>00294 <span class="keywordflow">return</span> -1;
+<a name="l00295"></a>00295 <span class="keywordflow">if</span> (!handle)
+<a name="l00296"></a>00296 <span class="keywordflow">return</span> -2;
+<a name="l00297"></a>00297 <span class="keywordflow">if</span> (!lms-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>)
+<a name="l00298"></a>00298 <span class="keywordflow">return</span> -3;
+<a name="l00299"></a>00299 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>) {
+<a name="l00300"></a>00300 fprintf(stderr, <span class="stringliteral">"ERROR: do not del parsers while it's processing.\n"</span>);
+<a name="l00301"></a>00301 <span class="keywordflow">return</span> -4;
+<a name="l00302"></a>00302 }
+<a name="l00303"></a>00303
+<a name="l00304"></a>00304 <span class="keywordflow">for</span> (i = 0; i < lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>; i++)
+<a name="l00305"></a>00305 <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="l00306"></a>00306 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf">lms_parser_del_int</a>(lms, i);
+<a name="l00307"></a>00307
+<a name="l00308"></a>00308 <span class="keywordflow">return</span> -3;
+<a name="l00309"></a>00309 }
+<a name="l00310"></a>00310
+<a name="l00320"></a>00320 <span class="keywordtype">int</span>
+<a name="l00321"></a><a class="code" href="group__LMS__API.html#g8c594bed751d504965b5cc0c7e93fb71">00321</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="l00322"></a>00322 {
+<a name="l00323"></a>00323 <span class="keywordflow">if</span> (!lms) {
+<a name="l00324"></a>00324 fprintf(stderr, <span class="stringliteral">"ERROR: lms_is_processing(NULL)\n"</span>);
+<a name="l00325"></a>00325 <span class="keywordflow">return</span> -1;
+<a name="l00326"></a>00326 }
+<a name="l00327"></a>00327
+<a name="l00328"></a>00328 <span class="keywordflow">return</span> lms-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>;
+<a name="l00329"></a>00329 }
+<a name="l00330"></a>00330
+<a name="l00339"></a>00339 <span class="keyword">const</span> <span class="keywordtype">char</span> *
+<a name="l00340"></a><a class="code" href="group__LMS__API.html#g4098d31de667a895095fc8d4d9bc10c0">00340</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="l00341"></a>00341 {
+<a name="l00342"></a>00342 <span class="keywordflow">if</span> (!lms) {
+<a name="l00343"></a>00343 fprintf(stderr, <span class="stringliteral">"ERROR: lms_get_db_path(NULL)\n"</span>);
+<a name="l00344"></a>00344 <span class="keywordflow">return</span> NULL;
+<a name="l00345"></a>00345 }
+<a name="l00346"></a>00346
+<a name="l00347"></a>00347 <span class="keywordflow">return</span> lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>;
+<a name="l00348"></a>00348 }
+<a name="l00349"></a>00349
+<a name="l00361"></a>00361 <span class="keywordtype">int</span>
+<a name="l00362"></a><a class="code" href="group__LMS__API.html#g973c6c7b66f4fdd6f4f776a36e742d33">00362</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="l00363"></a>00363 {
+<a name="l00364"></a>00364 <span class="keywordflow">if</span> (!lms) {
+<a name="l00365"></a>00365 fprintf(stderr, <span class="stringliteral">"ERROR: lms_get_slave_timeout(NULL)\n"</span>);
+<a name="l00366"></a>00366 <span class="keywordflow">return</span> -1;
+<a name="l00367"></a>00367 }
+<a name="l00368"></a>00368
+<a name="l00369"></a>00369 <span class="keywordflow">return</span> lms-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>;
+<a name="l00370"></a>00370 }
+<a name="l00371"></a>00371
+<a name="l00382"></a><a class="code" href="group__LMS__API.html#g68ac6273965bdeb25795dd4c50777b4e">00382</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="l00383"></a>00383 {
+<a name="l00384"></a>00384 <span class="keywordflow">if</span> (!lms) {
+<a name="l00385"></a>00385 fprintf(stderr, <span class="stringliteral">"ERROR: lms_set_slave_timeout(NULL, %d)\n"</span>, ms);
+<a name="l00386"></a>00386 <span class="keywordflow">return</span>;
+<a name="l00387"></a>00387 }
+<a name="l00388"></a>00388
+<a name="l00389"></a>00389 lms-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a> = ms;
+<a name="l00390"></a>00390 }
+<a name="l00391"></a>00391
+<a name="l00403"></a>00403 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00404"></a><a class="code" href="group__LMS__API.html#g227ebe8cad9776908c1977c43ef62d9c">00404</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="l00405"></a>00405 {
+<a name="l00406"></a>00406 <span class="keywordflow">if</span> (!lms) {
+<a name="l00407"></a>00407 fprintf(stderr, <span class="stringliteral">"ERROR: lms_get_commit_interval(NULL)\n"</span>);
+<a name="l00408"></a>00408 <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)-1;
+<a name="l00409"></a>00409 }
+<a name="l00410"></a>00410
+<a name="l00411"></a>00411 <span class="keywordflow">return</span> lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>;
+<a name="l00412"></a>00412 }
+<a name="l00413"></a>00413
+<a name="l00426"></a>00426 <span class="keywordtype">void</span>
+<a name="l00427"></a><a class="code" href="group__LMS__API.html#ge81a028f08139e64e97ac191bd899b32">00427</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="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_commit_interval(NULL, %u)\n"</span>,
+<a name="l00431"></a>00431 transactions);
+<a name="l00432"></a>00432 <span class="keywordflow">return</span>;
+<a name="l00433"></a>00433 }
+<a name="l00434"></a>00434
+<a name="l00435"></a>00435 lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a> = transactions;
+<a name="l00436"></a>00436 }
+<a name="l00437"></a>00437
+<a name="l00450"></a>00450 <span class="keywordtype">int</span>
+<a name="l00451"></a><a class="code" href="group__LMS__API.html#g4fd56e209d415b27466274726cc7d59f">00451</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="l00452"></a>00452 {
+<a name="l00453"></a>00453 <span class="keywordflow">if</span> (!lms) {
+<a name="l00454"></a>00454 fprintf(stderr, <span class="stringliteral">"ERROR: lms_charset_add(NULL)\n"</span>);
+<a name="l00455"></a>00455 <span class="keywordflow">return</span> -1;
+<a name="l00456"></a>00456 }
+<a name="l00457"></a>00457
+<a name="l00458"></a>00458 <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="l00459"></a>00459 }
+<a name="l00460"></a>00460
+<a name="l00473"></a>00473 <span class="keywordtype">int</span>
+<a name="l00474"></a><a class="code" href="group__LMS__API.html#g0b427b8b60957e29a0e504c10c5356b0">00474</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="l00475"></a>00475 {
+<a name="l00476"></a>00476 <span class="keywordflow">if</span> (!lms) {
+<a name="l00477"></a>00477 fprintf(stderr, <span class="stringliteral">"ERROR: lms_charset_del(NULL)\n"</span>);
+<a name="l00478"></a>00478 <span class="keywordflow">return</span> -1;
+<a name="l00479"></a>00479 }
+<a name="l00480"></a>00480
+<a name="l00481"></a>00481 <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="l00482"></a>00482 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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 "<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>
+Include dependency graph for lightmediascanner.c:<p><center><img src="lightmediascanner_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner.c_map">
+<area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="699,259,827,285"><area shape="rect" href="lightmediascanner__private_8h.html" title="lightmediascanner_private.h" alt="" coords="219,385,392,412"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="441,309,609,336"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="660,360,865,387"></map>
+
+<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"><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>
+
+</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#l00035">35</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00119">lms_new()</a>.
+</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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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#l00034">34</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00119">lms_new()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00249">249</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00289">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>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="699,259,827,285">
+<area shape="rect" href="$lightmediascanner__private_8h.html" title="lightmediascanner_private.h" alt="" coords="219,385,392,412">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="441,309,609,336">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="660,360,865,387">
--- /dev/null
+941e05618dc03c9ae93749b201be85d7
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="l00107"></a>00107 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_H_</span>
+<a name="l00108"></a><a class="code" href="lightmediascanner_8h.html#e97a674be7c85b0914a6acbafe994998">00108</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_H_ 1</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span>
+<a name="l00110"></a>00110 <span class="preprocessor">#ifdef API</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#undef API</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span>
+<a name="l00114"></a>00114 <span class="preprocessor">#ifdef __GNUC__</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ >= 4</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor"># define API __attribute__ ((visibility("default")))</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NULL_TERMINATED __attribute__((__sentinel__))</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NULL_TERMINATED</span>
+<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_PURE __attribute__((__pure__))</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC __attribute__((__malloc__))</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_CONST __attribute__((__const__))</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_UNUSED __attribute__((__unused__))</span>
+<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_PURE</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NORETURN</span>
+<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_CONST</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_UNUSED</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor"># if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT __attribute__((warn_unused_result))</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...) __attribute__((nonnull(__VA_ARGS__)))</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor"># else</span>
+<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00142"></a><a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">00142</a> <span class="preprocessor"></span><span class="preprocessor"># define API</span>
+<a name="l00143"></a><a class="code" href="lightmediascanner_8h.html#3c631eb7d32b61d70bfc615ae54e5552">00143</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NULL_TERMINATED</span>
+<a name="l00144"></a><a class="code" href="lightmediascanner_8h.html#7a9a21d60c8e567c8110c8e3069f8201">00144</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_PURE</span>
+<a name="l00145"></a><a class="code" href="lightmediascanner_8h.html#2213ea4dca0e242f957f63988caab768">00145</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_MALLOC</span>
+<a name="l00146"></a><a class="code" href="lightmediascanner_8h.html#ccce66c7f9844ae805b83bee1b9c32b5">00146</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_CONST</span>
+<a name="l00147"></a><a class="code" href="lightmediascanner_8h.html#80a4050221a914ea58d5799f13109ebb">00147</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_UNUSED</span>
+<a name="l00148"></a><a class="code" href="lightmediascanner_8h.html#34c563f40a0f86e597c51f1556669521">00148</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_WARN_UNUSED_RESULT</span>
+<a name="l00149"></a><a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">00149</a> <span class="preprocessor"></span><span class="preprocessor"># define GNUC_NON_NULL(...)</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00151"></a>00151 <span class="preprocessor"></span>
+<a name="l00152"></a>00152 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00154"></a>00154 <span class="preprocessor">#endif</span>
+<a name="l00155"></a>00155 <span class="preprocessor"></span>
+<a name="l00161"></a><a class="code" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">00161</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structlms.html">lms</a> <a class="code" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a>;
+<a name="l00162"></a><a class="code" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">00162</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="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">lms_plugin_t</a>;
+<a name="l00163"></a>00163
+<a name="l00164"></a>00164 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">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="l00165"></a>00165 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00166"></a>00166 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <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="l00167"></a>00167 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <span class="keywordtype">int</span> <a class="code" href="lightmediascanner_8h.html#890f1af4c54c88a63abdbeff5ecd49a3">lms_check</a>(<a class="code" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <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="l00168"></a>00168 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00169"></a>00169 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>) <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="l00170"></a>00170 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00171"></a>00171 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <span class="keywordtype">int</span> ms) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00172"></a>00172 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00173"></a>00173 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <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="l00174"></a>00174
+<a name="l00175"></a>00175 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">lms_plugin_t</a> *<a class="code" href="group__LMS__API.html#g7b93a24e73af8b5d46b2507dd70ac588">lms_parser_add</a>(<a class="code" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <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="l00176"></a>00176 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> <a class="code" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">lms_plugin_t</a> *<a class="code" href="group__LMS__API.html#g74b81422ff46a46b4b0fc44e8709ecee">lms_parser_find_and_add</a>(<a class="code" href="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</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_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00177"></a>00177 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <a class="code" href="lightmediascanner_8h.html#ccedd0cd6d535dcfee399957033074fd">lms_plugin_t</a> *handle) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1, 2);
+<a name="l00178"></a>00178
+<a name="l00179"></a>00179 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <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="l00180"></a>00180 <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="lightmediascanner_8h.html#d118599605b4e66ca5f91376982b8a64">lms_t</a> *<a class="code" href="structlms.html">lms</a>, <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="l00181"></a>00181
+<a name="l00182"></a>00182 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00183"></a>00183 <span class="preprocessor"></span>}
+<a name="l00184"></a>00184 <span class="preprocessor">#endif</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_H_ */</span>
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 File Reference</h1>
+<p>
+This graph shows which files directly or indirectly include this file:<p><center><img src="lightmediascanner_8h__dep__incl.png" border="0" usemap="#src/lib/lightmediascanner.hdep_map" alt=""></center>
+<map name="src/lib/lightmediascanner.hdep_map">
+<area shape="rect" href="lightmediascanner_8c.html" title="src/lib/lightmediascanner.c" alt="" coords="792,5,957,32"><area shape="rect" href="lightmediascanner__private_8h.html" title="src/lib/lightmediascanner_private.h" alt="" coords="488,107,696,133"><area shape="rect" href="lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="773,56,976,83"><area shape="rect" href="lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="769,107,980,133"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="src/lib/lightmediascanner_plugin.h" alt="" coords="223,107,428,133"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="src/lib/lightmediascanner_db_private.h" alt="" coords="477,208,707,235"><area shape="rect" href="lightmediascanner__db_8h.html" title="src/lib/lightmediascanner_db.h" alt="" coords="499,259,685,285"><area shape="rect" href="lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="764,360,985,387"><area shape="rect" href="lightmediascanner__db__common_8c.html" title="src/lib/lightmediascanner_db_common.c" alt="" coords="756,157,993,184"><area shape="rect" href="lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="763,208,987,235"><area shape="rect" href="lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="760,259,989,285"><area shape="rect" href="lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="764,309,985,336"></map>
+
+<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>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 <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 <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 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#890f1af4c54c88a63abdbeff5ecd49a3">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 const <br>
+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 <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 <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 <a class="el" href="structlms__plugin.html">lms_plugin_t</a> <br>
+*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 <a class="el" href="structlms__plugin.html">lms_plugin_t</a> <br>
+*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 <a class="el" href="structlms__plugin.html">lms_plugin_t</a> <br>
+*API int API int 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#l00108">108</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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#l00142">142</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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#l00146">146</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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#l00145">145</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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 width="100%"></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>.
+</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#l00143">143</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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#l00144">144</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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#l00147">147</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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#l00148">148</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<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#l00162">162</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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#l00161">161</a> of file <a class="el" href="lightmediascanner_8h-source.html">lightmediascanner.h</a>.
+</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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="890f1af4c54c88a63abdbeff5ecd49a3"></a><!-- doxytag: member="lightmediascanner.h::lms_check" ref="890f1af4c54c88a63abdbeff5ecd49a3" 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_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 width="100%"></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 width="100%"></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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8c.html" title="src/lib/lightmediascanner.c" alt="" coords="792,5,957,32">
+<area shape="rect" href="$lightmediascanner__private_8h.html" title="src/lib/lightmediascanner_private.h" alt="" coords="488,107,696,133">
+<area shape="rect" href="$lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="773,56,976,83">
+<area shape="rect" href="$lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="769,107,980,133">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="src/lib/lightmediascanner_plugin.h" alt="" coords="223,107,428,133">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="src/lib/lightmediascanner_db_private.h" alt="" coords="477,208,707,235">
+<area shape="rect" href="$lightmediascanner__db_8h.html" title="src/lib/lightmediascanner_db.h" alt="" coords="499,259,685,285">
+<area shape="rect" href="$lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="764,360,985,387">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html" title="src/lib/lightmediascanner_db_common.c" alt="" coords="756,157,993,184">
+<area shape="rect" href="$lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="763,208,987,235">
+<area shape="rect" href="$lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="760,259,989,285">
+<area shape="rect" href="$lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="764,309,985,336">
--- /dev/null
+3896306936d5e31832c584767f4ea72b
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__charset__conv_8h.html">lightmediascanner_charset_conv.h</a>"</span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include <iconv.h></span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00005"></a>00005 <span class="preprocessor">#include <string.h></span>
+<a name="l00006"></a>00006 <span class="preprocessor">#include <errno.h></span>
+<a name="l00007"></a>00007
+<a name="l00008"></a>00008 <span class="keyword">struct </span><a class="code" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">lms_charset_conv</a> {
+<a name="l00009"></a>00009 iconv_t check;
+<a name="l00010"></a>00010 iconv_t fallback;
+<a name="l00011"></a>00011 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size;
+<a name="l00012"></a>00012 iconv_t *convs;
+<a name="l00013"></a>00013 <span class="keywordtype">char</span> **names;
+<a name="l00014"></a>00014 };
+<a name="l00015"></a>00015
+<a name="l00025"></a>00025 <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *
+<a name="l00026"></a><a class="code" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">00026</a> <a class="code" href="group__LMS__CHARSET.html#g0120c222a55e6d7d9bb24300300561ab">lms_charset_conv_new</a>(<span class="keywordtype">void</span>)
+<a name="l00027"></a>00027 {
+<a name="l00028"></a>00028 <a class="code" href="group__LMS__CHARSET.html#g50e57a19bb3d062fe7eea437a8b8e949">lms_charset_conv_t</a> *lcc;
+<a name="l00029"></a>00029
+<a name="l00030"></a>00030 lcc = malloc(<span class="keyword">sizeof</span>(*lcc));
+<a name="l00031"></a>00031 <span class="keywordflow">if</span> (!lcc) {
+<a name="l00032"></a>00032 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00033"></a>00033 <span class="keywordflow">return</span> NULL;
+<a name="l00034"></a>00034 }
+<a name="l00035"></a>00035
+<a name="l00036"></a>00036 lcc->check = iconv_open(<span class="stringliteral">"UTF-8"</span>, <span class="stringliteral">"UTF-8"</span>);
+<a name="l00037"></a>00037 <span class="keywordflow">if</span> (lcc->check == (iconv_t)-1) {
+<a name="l00038"></a>00038 perror(<span class="stringliteral">"ERROR: could not create conversion checker"</span>);
+<a name="l00039"></a>00039 <span class="keywordflow">goto</span> error_check;
+<a name="l00040"></a>00040 }
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 lcc->fallback = iconv_open(<span class="stringliteral">"UTF-8//IGNORE"</span>, <span class="stringliteral">"UTF-8"</span>);
+<a name="l00043"></a>00043 <span class="keywordflow">if</span> (lcc->fallback == (iconv_t)-1) {
+<a name="l00044"></a>00044 perror(<span class="stringliteral">"ERROR: could not create conversion fallback"</span>);
+<a name="l00045"></a>00045 <span class="keywordflow">goto</span> error_fallback;
+<a name="l00046"></a>00046 }
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 lcc->size = 0;
+<a name="l00049"></a>00049 lcc->convs = NULL;
+<a name="l00050"></a>00050 lcc->names = NULL;
+<a name="l00051"></a>00051 <span class="keywordflow">return</span> lcc;
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 error_fallback:
+<a name="l00054"></a>00054 iconv_close(lcc->check);
+<a name="l00055"></a>00055 error_check:
+<a name="l00056"></a>00056 free(lcc);
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058 <span class="keywordflow">return</span> NULL;
+<a name="l00059"></a>00059 }
+<a name="l00060"></a>00060
+<a name="l00066"></a>00066 <span class="keywordtype">void</span>
+<a name="l00067"></a><a class="code" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">00067</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="l00068"></a>00068 {
+<a name="l00069"></a>00069 <span class="keywordtype">int</span> i;
+<a name="l00070"></a>00070
+<a name="l00071"></a>00071 <span class="keywordflow">if</span> (!lcc)
+<a name="l00072"></a>00072 <span class="keywordflow">return</span>;
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 iconv_close(lcc->check);
+<a name="l00075"></a>00075 iconv_close(lcc->fallback);
+<a name="l00076"></a>00076
+<a name="l00077"></a>00077 <span class="keywordflow">for</span> (i = 0; i < lcc->size; i++) {
+<a name="l00078"></a>00078 iconv_close(lcc->convs[i]);
+<a name="l00079"></a>00079 free(lcc->names[i]);
+<a name="l00080"></a>00080 }
+<a name="l00081"></a>00081
+<a name="l00082"></a>00082 <span class="keywordflow">if</span> (lcc->convs)
+<a name="l00083"></a>00083 free(lcc->convs);
+<a name="l00084"></a>00084 if (lcc->names)
+<a name="l00085"></a>00085 free(lcc->names);
+<a name="l00086"></a>00086 free(lcc);
+<a name="l00087"></a>00087 }
+<a name="l00088"></a>00088
+<a name="l00097"></a>00097 <span class="keywordtype">int</span>
+<a name="l00098"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#0a3006beae6fc8c59eca75468c1bc000">00098</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="l00099"></a>00099 {
+<a name="l00100"></a>00100 iconv_t cd, *convs;
+<a name="l00101"></a>00101 <span class="keywordtype">char</span> **names;
+<a name="l00102"></a>00102 <span class="keywordtype">int</span> idx, ns;
+<a name="l00103"></a>00103
+<a name="l00104"></a>00104 <span class="keywordflow">if</span> (!lcc)
+<a name="l00105"></a>00105 <span class="keywordflow">return</span> -1;
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <span class="keywordflow">if</span> (!charset)
+<a name="l00108"></a>00108 <span class="keywordflow">return</span> -2;
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 cd = iconv_open(<span class="stringliteral">"UTF-8"</span>, charset);
+<a name="l00111"></a>00111 <span class="keywordflow">if</span> (cd == (iconv_t)-1) {
+<a name="l00112"></a>00112 fprintf(stderr, <span class="stringliteral">"ERROR: could not add conversion charset '%s': %s\n"</span>,
+<a name="l00113"></a>00113 charset, strerror(errno));
+<a name="l00114"></a>00114 <span class="keywordflow">return</span> -3;
+<a name="l00115"></a>00115 }
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 idx = lcc->size;
+<a name="l00118"></a>00118 ns = lcc->size + 1;
+<a name="l00119"></a>00119
+<a name="l00120"></a>00120 convs = realloc(lcc->convs, ns * <span class="keyword">sizeof</span>(*convs));
+<a name="l00121"></a>00121 <span class="keywordflow">if</span> (!convs)
+<a name="l00122"></a>00122 <span class="keywordflow">goto</span> realloc_error;
+<a name="l00123"></a>00123 lcc->convs = convs;
+<a name="l00124"></a>00124 lcc->convs[idx] = cd;
+<a name="l00125"></a>00125
+<a name="l00126"></a>00126 names = realloc(lcc->names, ns * <span class="keyword">sizeof</span>(*names));
+<a name="l00127"></a>00127 <span class="keywordflow">if</span> (!names)
+<a name="l00128"></a>00128 <span class="keywordflow">goto</span> realloc_error;
+<a name="l00129"></a>00129 lcc->names = names;
+<a name="l00130"></a>00130 lcc->names[idx] = strdup(charset);
+<a name="l00131"></a>00131 <span class="keywordflow">if</span> (!lcc->names[idx])
+<a name="l00132"></a>00132 <span class="keywordflow">goto</span> realloc_error;
+<a name="l00133"></a>00133
+<a name="l00134"></a>00134 lcc->size = ns;
+<a name="l00135"></a>00135 <span class="keywordflow">return</span> 0;
+<a name="l00136"></a>00136
+<a name="l00137"></a>00137 realloc_error:
+<a name="l00138"></a>00138 perror(<span class="stringliteral">"realloc"</span>);
+<a name="l00139"></a>00139 iconv_close(cd);
+<a name="l00140"></a>00140 <span class="keywordflow">return</span> -4;
+<a name="l00141"></a>00141 }
+<a name="l00142"></a>00142
+<a name="l00143"></a>00143 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00144"></a>00144 _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="l00145"></a>00145 {
+<a name="l00146"></a>00146 <span class="keywordtype">int</span> i;
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 <span class="keywordflow">for</span> (i = 0; i < lcc->size; i++)
+<a name="l00149"></a>00149 <span class="keywordflow">if</span> (strcmp(lcc->names[i], charset) == 0)
+<a name="l00150"></a>00150 <span class="keywordflow">return</span> i;
+<a name="l00151"></a>00151
+<a name="l00152"></a>00152 <span class="keywordflow">return</span> -1;
+<a name="l00153"></a>00153 }
+<a name="l00154"></a>00154
+<a name="l00163"></a>00163 <span class="keywordtype">int</span>
+<a name="l00164"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#ad60dd3a2c2ebcf9ee1100986fc572e4">00164</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="l00165"></a>00165 {
+<a name="l00166"></a>00166 iconv_t *convs;
+<a name="l00167"></a>00167 <span class="keywordtype">char</span> **names;
+<a name="l00168"></a>00168 <span class="keywordtype">int</span> idx;
+<a name="l00169"></a>00169
+<a name="l00170"></a>00170 <span class="keywordflow">if</span> (!lcc)
+<a name="l00171"></a>00171 <span class="keywordflow">return</span> -1;
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 <span class="keywordflow">if</span> (!charset)
+<a name="l00174"></a>00174 <span class="keywordflow">return</span> -2;
+<a name="l00175"></a>00175
+<a name="l00176"></a>00176 idx = _find(lcc, charset);
+<a name="l00177"></a>00177 <span class="keywordflow">if</span> (idx < 0) {
+<a name="l00178"></a>00178 fprintf(stderr, <span class="stringliteral">"ERROR: could not find charset '%s'\n"</span>, charset);
+<a name="l00179"></a>00179 <span class="keywordflow">return</span> -3;
+<a name="l00180"></a>00180 }
+<a name="l00181"></a>00181
+<a name="l00182"></a>00182 iconv_close(lcc->convs[idx]);
+<a name="l00183"></a>00183 free(lcc->names[idx]);
+<a name="l00184"></a>00184
+<a name="l00185"></a>00185 lcc->size--;
+<a name="l00186"></a>00186 <span class="keywordflow">for</span> (; idx < lcc->size; idx++) {
+<a name="l00187"></a>00187 lcc->convs[idx] = lcc->convs[idx + 1];
+<a name="l00188"></a>00188 lcc->names[idx] = lcc->names[idx + 1];
+<a name="l00189"></a>00189 }
+<a name="l00190"></a>00190
+<a name="l00191"></a>00191 convs = realloc(lcc->convs, lcc->size * <span class="keyword">sizeof</span>(*convs));
+<a name="l00192"></a>00192 <span class="keywordflow">if</span> (convs)
+<a name="l00193"></a>00193 lcc->convs = convs;
+<a name="l00194"></a>00194 <span class="keywordflow">else</span>
+<a name="l00195"></a>00195 perror(<span class="stringliteral">"could not realloc 'convs'"</span>);
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 names = realloc(lcc->names, lcc->size * <span class="keyword">sizeof</span>(*names));
+<a name="l00198"></a>00198 <span class="keywordflow">if</span> (names)
+<a name="l00199"></a>00199 lcc->names = names;
+<a name="l00200"></a>00200 <span class="keywordflow">else</span>
+<a name="l00201"></a>00201 perror(<span class="stringliteral">"could not realloc 'names'"</span>);
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203 <span class="keywordflow">return</span> 0;
+<a name="l00204"></a>00204 }
+<a name="l00205"></a>00205
+<a name="l00206"></a>00206 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00207"></a>00207 _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="l00208"></a>00208 {
+<a name="l00209"></a>00209 <span class="keywordtype">char</span> *inbuf, *outbuf;
+<a name="l00210"></a>00210 <span class="keywordtype">size_t</span> r, inlen, outlen;
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 inbuf = (<span class="keywordtype">char</span> *)istr;
+<a name="l00213"></a>00213 inlen = ilen;
+<a name="l00214"></a>00214 outbuf = ostr;
+<a name="l00215"></a>00215 outlen = olen;
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 iconv(lcc->check, NULL, NULL, NULL, NULL);
+<a name="l00218"></a>00218 r = iconv(lcc->check, &inbuf, &inlen, &outbuf, &outlen);
+<a name="l00219"></a>00219 <span class="keywordflow">if</span> (r == (<span class="keywordtype">size_t</span>)-1)
+<a name="l00220"></a>00220 <span class="keywordflow">return</span> -1;
+<a name="l00221"></a>00221 <span class="keywordflow">else</span>
+<a name="l00222"></a>00222 <span class="keywordflow">return</span> 0;
+<a name="l00223"></a>00223 }
+<a name="l00224"></a>00224
+<a name="l00225"></a>00225 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00226"></a>00226 _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="l00227"></a>00227 {
+<a name="l00228"></a>00228 <span class="keywordtype">char</span> *inbuf, *outbuf;
+<a name="l00229"></a>00229 <span class="keywordtype">size_t</span> r, inlen, outlen;
+<a name="l00230"></a>00230
+<a name="l00231"></a>00231 inbuf = *p_str;
+<a name="l00232"></a>00232 inlen = *p_len;
+<a name="l00233"></a>00233 outbuf = ostr;
+<a name="l00234"></a>00234 outlen = olen;
+<a name="l00235"></a>00235
+<a name="l00236"></a>00236 iconv(cd, NULL, NULL, NULL, NULL);
+<a name="l00237"></a>00237 r = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
+<a name="l00238"></a>00238 <span class="keywordflow">if</span> (r == (<span class="keywordtype">size_t</span>)-1)
+<a name="l00239"></a>00239 <span class="keywordflow">return</span> -1;
+<a name="l00240"></a>00240
+<a name="l00241"></a>00241 *p_len = olen - outlen;
+<a name="l00242"></a>00242 free(*p_str);
+<a name="l00243"></a>00243 *p_str = ostr;
+<a name="l00244"></a>00244
+<a name="l00245"></a>00245 outbuf = realloc(*p_str, *p_len + 1);
+<a name="l00246"></a>00246 <span class="keywordflow">if</span> (!outbuf)
+<a name="l00247"></a>00247 perror(<span class="stringliteral">"realloc"</span>);
+<a name="l00248"></a>00248 <span class="keywordflow">else</span>
+<a name="l00249"></a>00249 *p_str = outbuf;
+<a name="l00250"></a>00250
+<a name="l00251"></a>00251 (*p_str)[*p_len] = <span class="charliteral">'\0'</span>;
+<a name="l00252"></a>00252
+<a name="l00253"></a>00253 <span class="keywordflow">return</span> 0;
+<a name="l00254"></a>00254 }
+<a name="l00255"></a>00255
+<a name="l00265"></a>00265 <span class="keywordtype">int</span>
+<a name="l00266"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#35b728d3c5cb940027ebc47589971b25">00266</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="l00267"></a>00267 {
+<a name="l00268"></a>00268 <span class="keywordtype">char</span> *outstr;
+<a name="l00269"></a>00269 <span class="keywordtype">int</span> i, outlen;
+<a name="l00270"></a>00270
+<a name="l00271"></a>00271 <span class="keywordflow">if</span> (!lcc)
+<a name="l00272"></a>00272 <span class="keywordflow">return</span> -1;
+<a name="l00273"></a>00273 <span class="keywordflow">if</span> (!p_str)
+<a name="l00274"></a>00274 <span class="keywordflow">return</span> -2;
+<a name="l00275"></a>00275 <span class="keywordflow">if</span> (!p_len)
+<a name="l00276"></a>00276 <span class="keywordflow">return</span> -3;
+<a name="l00277"></a>00277 <span class="keywordflow">if</span> (!*p_str || !*p_len)
+<a name="l00278"></a>00278 <span class="keywordflow">return</span> 0;
+<a name="l00279"></a>00279
+<a name="l00280"></a>00280 outlen = 2 * *p_len;
+<a name="l00281"></a>00281 outstr = malloc(outlen + 1);
+<a name="l00282"></a>00282 <span class="keywordflow">if</span> (!outstr) {
+<a name="l00283"></a>00283 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00284"></a>00284 <span class="keywordflow">return</span> -4;
+<a name="l00285"></a>00285 }
+<a name="l00286"></a>00286
+<a name="l00287"></a>00287 <span class="keywordflow">if</span> (_check(lcc, *p_str, *p_len, outstr, outlen) == 0) {
+<a name="l00288"></a>00288 free(outstr);
+<a name="l00289"></a>00289 <span class="keywordflow">return</span> 0;
+<a name="l00290"></a>00290 }
+<a name="l00291"></a>00291
+<a name="l00292"></a>00292 <span class="keywordflow">for</span> (i = 0; i < lcc->size; i++)
+<a name="l00293"></a>00293 <span class="keywordflow">if</span> (_conv(lcc->convs[i], p_str, p_len, outstr, outlen) == 0)
+<a name="l00294"></a>00294 <span class="keywordflow">return</span> 0;
+<a name="l00295"></a>00295
+<a name="l00296"></a>00296 fprintf(stderr,
+<a name="l00297"></a>00297 <span class="stringliteral">"WARNING: could not convert '%*s' to any charset, use fallback\n"</span>,
+<a name="l00298"></a>00298 *p_len, *p_str);
+<a name="l00299"></a>00299 i = _conv(lcc->fallback, p_str, p_len, outstr, outlen);
+<a name="l00300"></a>00300 <span class="keywordflow">if</span> (i < 0) {
+<a name="l00301"></a>00301 memset(*p_str, <span class="charliteral">'?'</span>, *p_len);
+<a name="l00302"></a>00302 free(outstr);
+<a name="l00303"></a>00303 }
+<a name="l00304"></a>00304 <span class="keywordflow">return</span> i;
+<a name="l00305"></a>00305 }
+<a name="l00306"></a>00306
+<a name="l00316"></a>00316 <span class="keywordtype">int</span>
+<a name="l00317"></a><a class="code" href="lightmediascanner__charset__conv_8c.html#f069b89e828896690fdd919e5b042c7d">00317</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="l00318"></a>00318 {
+<a name="l00319"></a>00319 <span class="keywordtype">char</span> *outstr;
+<a name="l00320"></a>00320 <span class="keywordtype">int</span> r, outlen;
+<a name="l00321"></a>00321
+<a name="l00322"></a>00322 <span class="keywordflow">if</span> (!lcc)
+<a name="l00323"></a>00323 <span class="keywordflow">return</span> -1;
+<a name="l00324"></a>00324 <span class="keywordflow">if</span> (!str || !len)
+<a name="l00325"></a>00325 <span class="keywordflow">return</span> 0;
+<a name="l00326"></a>00326
+<a name="l00327"></a>00327 outlen = 2 * len;
+<a name="l00328"></a>00328 outstr = malloc(outlen);
+<a name="l00329"></a>00329 <span class="keywordflow">if</span> (!outstr) {
+<a name="l00330"></a>00330 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00331"></a>00331 <span class="keywordflow">return</span> -2;
+<a name="l00332"></a>00332 }
+<a name="l00333"></a>00333
+<a name="l00334"></a>00334 r = _check(lcc, str, len, outstr, outlen);
+<a name="l00335"></a>00335 free(outstr);
+<a name="l00336"></a>00336 <span class="keywordflow">return</span> r;
+<a name="l00337"></a>00337 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+
+<p>
+Include dependency graph for lightmediascanner_charset_conv.c:<p><center><img src="lightmediascanner__charset__conv_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_charset_conv.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_charset_conv.c_map">
+<area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="297,5,503,32"></map>
+
+<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#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#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 width="100%"></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="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#l00266">266</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.
+</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 width="100%"></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#l00098">98</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00451">lms_charset_add()</a>.
+</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 width="100%"></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="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#l00317">317</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.
+</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 width="100%"></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#l00164">164</a> of file <a class="el" href="lightmediascanner__charset__conv_8c-source.html">lightmediascanner_charset_conv.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00474">lms_charset_del()</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="297,5,503,32">
--- /dev/null
+a9fb93c4b14d546e8218fa70f21420bb
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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> lms_charset_conv_t;
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> lms_charset_conv_t *<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> <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> <span class="keywordtype">void</span> <a class="code" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091">lms_charset_conv_free</a>(lms_charset_conv_t *lcc) <a class="code" href="lightmediascanner_8h.html#6fe68cac0abf3e2ca61141920414e93a">GNUC_NON_NULL</a>(1);
+<a name="l00076"></a>00076 <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>(lms_charset_conv_t *lcc, const <span class="keywordtype">char</span> *charset) GNUC_NON_NULL(1, 2);
+<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#ad60dd3a2c2ebcf9ee1100986fc572e4">lms_charset_conv_del</a>(lms_charset_conv_t *lcc, const <span class="keywordtype">char</span> *charset) GNUC_NON_NULL(1, 2);
+<a name="l00078"></a>00078
+<a name="l00079"></a>00079 <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>(lms_charset_conv_t *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="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#f069b89e828896690fdd919e5b042c7d">lms_charset_conv_check</a>(lms_charset_conv_t *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="l00081"></a>00081
+<a name="l00085"></a>00085 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span>}
+<a name="l00087"></a>00087 <span class="preprocessor">#endif</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_CHARSET_CONV_H_ */</span>
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 File Reference</h1>
+<p>
+This graph shows which files directly or indirectly include this file:<p><center><img src="lightmediascanner__charset__conv_8h__dep__incl.png" border="0" usemap="#src/lib/lightmediascanner_charset_conv.hdep_map" alt=""></center>
+<map name="src/lib/lightmediascanner_charset_conv.hdep_map">
+<area shape="rect" href="lightmediascanner__plugin_8h.html" title="src/lib/lightmediascanner_plugin.h" alt="" coords="315,145,520,172"><area shape="rect" href="lightmediascanner__private_8h.html" title="src/lib/lightmediascanner_private.h" alt="" coords="597,95,805,121"><area shape="rect" href="lightmediascanner__charset__conv_8c.html" title="src/lib/lightmediascanner_charset_conv.c" alt="" coords="296,196,539,223"><area shape="rect" href="lightmediascanner_8c.html" title="src/lib/lightmediascanner.c" alt="" coords="901,5,1067,32"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="src/lib/lightmediascanner_db_private.h" alt="" coords="587,183,816,209"><area shape="rect" href="lightmediascanner__db_8h.html" title="src/lib/lightmediascanner_db.h" alt="" coords="608,259,795,285"><area shape="rect" href="lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="883,107,1085,133"><area shape="rect" href="lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="879,56,1089,83"><area shape="rect" href="lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="873,259,1095,285"><area shape="rect" href="lightmediascanner__db__common_8c.html" title="src/lib/lightmediascanner_db_common.c" alt="" coords="865,157,1103,184"><area shape="rect" href="lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="872,309,1096,336"><area shape="rect" href="lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="869,360,1099,387"><area shape="rect" href="lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="873,208,1095,235"></map>
+
+<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 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#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 <br>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__LMS__CHARSET.html#g3d6c281f7b3cf9fb0c299c0abe03f681">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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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>.
+</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>.
+</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>.
+</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 width="100%"></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>.
+</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>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="src/lib/lightmediascanner_plugin.h" alt="" coords="315,145,520,172">
+<area shape="rect" href="$lightmediascanner__private_8h.html" title="src/lib/lightmediascanner_private.h" alt="" coords="597,95,805,121">
+<area shape="rect" href="$lightmediascanner__charset__conv_8c.html" title="src/lib/lightmediascanner_charset_conv.c" alt="" coords="296,196,539,223">
+<area shape="rect" href="$lightmediascanner_8c.html" title="src/lib/lightmediascanner.c" alt="" coords="901,5,1067,32">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="src/lib/lightmediascanner_db_private.h" alt="" coords="587,183,816,209">
+<area shape="rect" href="$lightmediascanner__db_8h.html" title="src/lib/lightmediascanner_db.h" alt="" coords="608,259,795,285">
+<area shape="rect" href="$lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="883,107,1085,133">
+<area shape="rect" href="$lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="879,56,1089,83">
+<area shape="rect" href="$lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="873,259,1095,285">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html" title="src/lib/lightmediascanner_db_common.c" alt="" coords="865,157,1103,184">
+<area shape="rect" href="$lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="872,309,1096,336">
+<area shape="rect" href="$lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="869,360,1099,387">
+<area shape="rect" href="$lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="873,208,1095,235">
--- /dev/null
+aa3d888691589f3b2f80ad8c0ab8be67
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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
+<a name="l00055"></a>00055 <span class="comment">/***********************************************************************</span>
+<a name="l00056"></a>00056 <span class="comment"> * Master-Slave communication.</span>
+<a name="l00057"></a>00057 <span class="comment"> ***********************************************************************/</span>
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="keyword">struct </span>comm_finfo {
+<a name="l00060"></a>00060 <span class="keywordtype">int</span> path_len;
+<a name="l00061"></a>00061 <span class="keywordtype">int</span> base;
+<a name="l00062"></a>00062 int64_t id;
+<a name="l00063"></a>00063 time_t mtime;
+<a name="l00064"></a>00064 time_t dtime;
+<a name="l00065"></a>00065 <span class="keywordtype">size_t</span> size;
+<a name="l00066"></a>00066 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags;
+<a name="l00067"></a><a class="code" href="lightmediascanner__check_8c.html#f8084f435d209d810eb33deaa35fab5e">00067</a> <span class="preprocessor">#define COMM_FINFO_FLAG_OUTDATED 1</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>};
+<a name="l00069"></a>00069
+<a name="l00070"></a>00070 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00071"></a>00071 _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="l00072"></a>00072 {
+<a name="l00073"></a>00073 <span class="keyword">struct </span>comm_finfo ci;
+<a name="l00074"></a>00074
+<a name="l00075"></a>00075 ci.path_len = finfo.<a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>;
+<a name="l00076"></a>00076 ci.base = finfo.<a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a>;
+<a name="l00077"></a>00077 ci.id = finfo.<a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a>;
+<a name="l00078"></a>00078 ci.mtime = finfo.<a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a>;
+<a name="l00079"></a>00079 ci.dtime = finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>;
+<a name="l00080"></a>00080 ci.size = finfo.<a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a>;
+<a name="l00081"></a>00081 ci.flags = flags;
+<a name="l00082"></a>00082
+<a name="l00083"></a>00083 <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="l00084"></a>00084 perror(<span class="stringliteral">"write"</span>);
+<a name="l00085"></a>00085 <span class="keywordflow">return</span> -1;
+<a name="l00086"></a>00086 }
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088 <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="l00089"></a>00089 perror(<span class="stringliteral">"write"</span>);
+<a name="l00090"></a>00090 <span class="keywordflow">return</span> -1;
+<a name="l00091"></a>00091 }
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093 <span class="keywordflow">return</span> 0;
+<a name="l00094"></a>00094 }
+<a name="l00095"></a>00095
+<a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00097"></a>00097 _master_send_finish(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structfds.html">fds</a> *master)
+<a name="l00098"></a>00098 {
+<a name="l00099"></a>00099 <span class="keyword">struct </span>comm_finfo ci = {-1, -1, -1, -1, -1, -1, 0};
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <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="l00102"></a>00102 perror(<span class="stringliteral">"write"</span>);
+<a name="l00103"></a>00103 <span class="keywordflow">return</span> -1;
+<a name="l00104"></a>00104 }
+<a name="l00105"></a>00105
+<a name="l00106"></a>00106 <span class="keywordflow">return</span> 0;
+<a name="l00107"></a>00107 }
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00110"></a>00110 _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="l00111"></a>00111 {
+<a name="l00112"></a>00112 <span class="keywordtype">int</span> r;
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 r = poll(pfd, 1, timeout);
+<a name="l00115"></a>00115 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00116"></a>00116 perror(<span class="stringliteral">"poll"</span>);
+<a name="l00117"></a>00117 <span class="keywordflow">return</span> -1;
+<a name="l00118"></a>00118 }
+<a name="l00119"></a>00119
+<a name="l00120"></a>00120 <span class="keywordflow">if</span> (r == 0)
+<a name="l00121"></a>00121 <span class="keywordflow">return</span> 1;
+<a name="l00122"></a>00122
+<a name="l00123"></a>00123 <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="l00124"></a>00124 perror(<span class="stringliteral">"read"</span>);
+<a name="l00125"></a>00125 <span class="keywordflow">return</span> -2;
+<a name="l00126"></a>00126 }
+<a name="l00127"></a>00127
+<a name="l00128"></a>00128 <span class="keywordflow">return</span> 0;
+<a name="l00129"></a>00129 }
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00132"></a>00132 _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="l00133"></a>00133 {
+<a name="l00134"></a>00134 <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="l00135"></a>00135 perror(<span class="stringliteral">"write"</span>);
+<a name="l00136"></a>00136 <span class="keywordflow">return</span> -1;
+<a name="l00137"></a>00137 }
+<a name="l00138"></a>00138 <span class="keywordflow">return</span> 0;
+<a name="l00139"></a>00139 }
+<a name="l00140"></a>00140
+<a name="l00141"></a>00141 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00142"></a>00142 _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="l00143"></a>00143 {
+<a name="l00144"></a>00144 <span class="keyword">struct </span>comm_finfo ci;
+<a name="l00145"></a>00145 <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="l00146"></a>00146 <span class="keywordtype">int</span> r;
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 r = read(slave-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>, &ci, <span class="keyword">sizeof</span>(ci));
+<a name="l00149"></a>00149 <span class="keywordflow">if</span> (r != <span class="keyword">sizeof</span>(ci)) {
+<a name="l00150"></a>00150 perror(<span class="stringliteral">"read"</span>);
+<a name="l00151"></a>00151 <span class="keywordflow">return</span> -1;
+<a name="l00152"></a>00152 }
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154 finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> = ci.path_len;
+<a name="l00155"></a>00155 finfo-><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a> = ci.base;
+<a name="l00156"></a>00156 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = ci.id;
+<a name="l00157"></a>00157 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = ci.mtime;
+<a name="l00158"></a>00158 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = ci.dtime;
+<a name="l00159"></a>00159 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = ci.size;
+<a name="l00160"></a>00160 finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a> = NULL;
+<a name="l00161"></a>00161 *flags = ci.flags;
+<a name="l00162"></a>00162
+<a name="l00163"></a>00163 <span class="keywordflow">if</span> (ci.path_len == -1)
+<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> (ci.path_len > <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>) {
+<a name="l00167"></a>00167 fprintf(stderr, <span class="stringliteral">"ERROR: path too long (%d/%d)\n"</span>,
+<a name="l00168"></a>00168 ci.path_len, <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>);
+<a name="l00169"></a>00169 <span class="keywordflow">return</span> -2;
+<a name="l00170"></a>00170 }
+<a name="l00171"></a>00171
+<a name="l00172"></a>00172 r = read(slave-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>, path, ci.path_len);
+<a name="l00173"></a>00173 <span class="keywordflow">if</span> (r != ci.path_len) {
+<a name="l00174"></a>00174 fprintf(stderr, <span class="stringliteral">"ERROR: could not read whole path %d/%d\n"</span>,
+<a name="l00175"></a>00175 r, ci.path_len);
+<a name="l00176"></a>00176 <span class="keywordflow">return</span> -3;
+<a name="l00177"></a>00177 }
+<a name="l00178"></a>00178
+<a name="l00179"></a>00179 path[ci.path_len] = 0;
+<a name="l00180"></a>00180 finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a> = path;
+<a name="l00181"></a>00181 <span class="keywordflow">return</span> 0;
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183
+<a name="l00184"></a>00184
+<a name="l00185"></a>00185 <span class="comment">/***********************************************************************</span>
+<a name="l00186"></a>00186 <span class="comment"> * Slave-side.</span>
+<a name="l00187"></a>00187 <span class="comment"> ***********************************************************************/</span>
+<a name="l00188"></a>00188
+<a name="l00189"></a>00189 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00190"></a>00190 _slave_db_compile_all_stmts(<span class="keyword">struct</span> slave_db *db)
+<a name="l00191"></a>00191 {
+<a name="l00192"></a>00192 sqlite3 *handle;
+<a name="l00193"></a>00193
+<a name="l00194"></a>00194 handle = db->handle;
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196 db->transaction_begin = <a class="code" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lms_db_compile_stmt_begin_transaction</a>(handle);
+<a name="l00197"></a>00197 <span class="keywordflow">if</span> (!db->transaction_begin)
+<a name="l00198"></a>00198 <span class="keywordflow">return</span> -1;
+<a name="l00199"></a>00199
+<a name="l00200"></a>00200 db->transaction_commit = <a class="code" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lms_db_compile_stmt_end_transaction</a>(handle);
+<a name="l00201"></a>00201 <span class="keywordflow">if</span> (!db->transaction_commit)
+<a name="l00202"></a>00202 <span class="keywordflow">return</span> -2;
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 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="l00205"></a>00205 <span class="keywordflow">if</span> (!db->delete_file_info)
+<a name="l00206"></a>00206 <span class="keywordflow">return</span> -3;
+<a name="l00207"></a>00207
+<a name="l00208"></a>00208 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="l00209"></a>00209 <span class="keywordflow">if</span> (!db->update_file_info)
+<a name="l00210"></a>00210 <span class="keywordflow">return</span> -4;
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 <span class="keywordflow">return</span> 0;
+<a name="l00213"></a>00213 }
+<a name="l00214"></a>00214
+<a name="l00215"></a>00215 <span class="keyword">static</span> <span class="keyword">struct </span>slave_db *
+<a name="l00216"></a>00216 _slave_db_open(<span class="keyword">const</span> <span class="keywordtype">char</span> *db_path)
+<a name="l00217"></a>00217 {
+<a name="l00218"></a>00218 <span class="keyword">struct </span>slave_db *db;
+<a name="l00219"></a>00219
+<a name="l00220"></a>00220 db = calloc(1, <span class="keyword">sizeof</span>(*db));
+<a name="l00221"></a>00221 <span class="keywordflow">if</span> (!db) {
+<a name="l00222"></a>00222 perror(<span class="stringliteral">"calloc"</span>);
+<a name="l00223"></a>00223 <span class="keywordflow">return</span> NULL;
+<a name="l00224"></a>00224 }
+<a name="l00225"></a>00225
+<a name="l00226"></a>00226 <span class="keywordflow">if</span> (sqlite3_open(db_path, &db->handle) != SQLITE_OK) {
+<a name="l00227"></a>00227 fprintf(stderr, <span class="stringliteral">"ERROR: could not open DB \"%s\": %s\n"</span>,
+<a name="l00228"></a>00228 db_path, sqlite3_errmsg(db->handle));
+<a name="l00229"></a>00229 <span class="keywordflow">goto</span> error;
+<a name="l00230"></a>00230 }
+<a name="l00231"></a>00231
+<a name="l00232"></a>00232 <span class="keywordflow">return</span> db;
+<a name="l00233"></a>00233
+<a name="l00234"></a>00234 error:
+<a name="l00235"></a>00235 sqlite3_close(db->handle);
+<a name="l00236"></a>00236 free(db);
+<a name="l00237"></a>00237 <span class="keywordflow">return</span> NULL;
+<a name="l00238"></a>00238 }
+<a name="l00239"></a>00239
+<a name="l00240"></a>00240 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00241"></a>00241 _slave_db_close(<span class="keyword">struct</span> slave_db *db)
+<a name="l00242"></a>00242 {
+<a name="l00243"></a>00243 <span class="keywordflow">if</span> (db->transaction_begin)
+<a name="l00244"></a>00244 <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="l00245"></a>00245
+<a name="l00246"></a>00246 <span class="keywordflow">if</span> (db->transaction_commit)
+<a name="l00247"></a>00247 <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="l00248"></a>00248
+<a name="l00249"></a>00249 <span class="keywordflow">if</span> (db->delete_file_info)
+<a name="l00250"></a>00250 <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="l00251"></a>00251
+<a name="l00252"></a>00252 <span class="keywordflow">if</span> (db->update_file_info)
+<a name="l00253"></a>00253 <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="l00254"></a>00254
+<a name="l00255"></a>00255 <span class="keywordflow">if</span> (sqlite3_close(db->handle) != SQLITE_OK) {
+<a name="l00256"></a>00256 fprintf(stderr, <span class="stringliteral">"ERROR: clould not close DB (slave): %s\n"</span>,
+<a name="l00257"></a>00257 sqlite3_errmsg(db->handle));
+<a name="l00258"></a>00258 <span class="keywordflow">return</span> -1;
+<a name="l00259"></a>00259 }
+<a name="l00260"></a>00260 free(db);
+<a name="l00261"></a>00261
+<a name="l00262"></a>00262 <span class="keywordflow">return</span> 0;
+<a name="l00263"></a>00263 }
+<a name="l00264"></a>00264
+<a name="l00265"></a>00265 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00266"></a>00266 _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="l00267"></a>00267 {
+<a name="l00268"></a>00268 <span class="keywordflow">return</span> _slave_send_reply(fds, 0);
+<a name="l00269"></a>00269 }
+<a name="l00270"></a>00270
+<a name="l00271"></a>00271 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00272"></a>00272 _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="l00273"></a>00273 {
+<a name="l00274"></a>00274 <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> finfo;
+<a name="l00275"></a>00275 <span class="keywordtype">void</span> **parser_match;
+<a name="l00276"></a>00276 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> counter, flags;
+<a name="l00277"></a>00277 <span class="keywordtype">int</span> r;
+<a name="l00278"></a>00278
+<a name="l00279"></a>00279 parser_match = malloc(lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> * <span class="keyword">sizeof</span>(*parser_match));
+<a name="l00280"></a>00280 <span class="keywordflow">if</span> (!parser_match) {
+<a name="l00281"></a>00281 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00282"></a>00282 <span class="keywordflow">return</span> -6;
+<a name="l00283"></a>00283 }
+<a name="l00284"></a>00284
+<a name="l00285"></a>00285 _init_sync_send(fds);
+<a name="l00286"></a>00286
+<a name="l00287"></a>00287 counter = 0;
+<a name="l00288"></a>00288 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00289"></a>00289
+<a name="l00290"></a>00290 <span class="keywordflow">while</span> (((r = _slave_recv_file(fds, &finfo, &flags)) == 0) &&
+<a name="l00291"></a>00291 finfo.<a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> > 0) {
+<a name="l00292"></a>00292 r = <a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lms_db_update_file_info</a>(db->update_file_info, &finfo);
+<a name="l00293"></a>00293 <span class="keywordflow">if</span> (r < 0)
+<a name="l00294"></a>00294 fprintf(stderr, <span class="stringliteral">"ERROR: could not update path in DB\n"</span>);
+<a name="l00295"></a>00295 <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="l00296"></a>00296 <span class="keywordtype">int</span> used;
+<a name="l00297"></a>00297
+<a name="l00298"></a>00298 used = <a class="code" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lms_parsers_check_using</a>(lms, parser_match, &finfo);
+<a name="l00299"></a>00299 <span class="keywordflow">if</span> (!used)
+<a name="l00300"></a>00300 r = 0;
+<a name="l00301"></a>00301 <span class="keywordflow">else</span> {
+<a name="l00302"></a>00302 r = <a class="code" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lms_parsers_run</a>(lms, db->handle, parser_match, &finfo);
+<a name="l00303"></a>00303 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00304"></a>00304 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00305"></a>00305 getpid(), finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>);
+<a name="l00306"></a>00306 <a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lms_db_delete_file_info</a>(db->delete_file_info, &finfo);
+<a name="l00307"></a>00307 }
+<a name="l00308"></a>00308 }
+<a name="l00309"></a>00309 }
+<a name="l00310"></a>00310
+<a name="l00311"></a>00311 _slave_send_reply(fds, r);
+<a name="l00312"></a>00312 counter++;
+<a name="l00313"></a>00313 <span class="keywordflow">if</span> (counter > lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>) {
+<a name="l00314"></a>00314 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00315"></a>00315 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00316"></a>00316 counter = 0;
+<a name="l00317"></a>00317 }
+<a name="l00318"></a>00318 }
+<a name="l00319"></a>00319
+<a name="l00320"></a>00320 free(parser_match);
+<a name="l00321"></a>00321 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00322"></a>00322
+<a name="l00323"></a>00323 <span class="keywordflow">return</span> r;
+<a name="l00324"></a>00324 }
+<a name="l00325"></a>00325
+<a name="l00326"></a>00326 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00327"></a>00327 _slave_work(<a class="code" href="structlms.html">lms_t</a> *lms, <span class="keyword">struct</span> fds *fds)
+<a name="l00328"></a>00328 {
+<a name="l00329"></a>00329 <span class="keyword">struct </span>slave_db *db;
+<a name="l00330"></a>00330 <span class="keywordtype">int</span> r;
+<a name="l00331"></a>00331
+<a name="l00332"></a>00332 db = _slave_db_open(lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00333"></a>00333 <span class="keywordflow">if</span> (!db)
+<a name="l00334"></a>00334 <span class="keywordflow">return</span> -1;
+<a name="l00335"></a>00335
+<a name="l00336"></a>00336 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lms_parsers_setup</a>(lms, db->handle) != 0) {
+<a name="l00337"></a>00337 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup parsers.\n"</span>);
+<a name="l00338"></a>00338 r = -2;
+<a name="l00339"></a>00339 <span class="keywordflow">goto</span> end;
+<a name="l00340"></a>00340 }
+<a name="l00341"></a>00341
+<a name="l00342"></a>00342 <span class="keywordflow">if</span> (_slave_db_compile_all_stmts(db) != 0) {
+<a name="l00343"></a>00343 fprintf(stderr, <span class="stringliteral">"ERROR: could not compile statements.\n"</span>);
+<a name="l00344"></a>00344 r = -3;
+<a name="l00345"></a>00345 <span class="keywordflow">goto</span> end;
+<a name="l00346"></a>00346 }
+<a name="l00347"></a>00347
+<a name="l00348"></a>00348 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lms_parsers_start</a>(lms, db->handle) != 0) {
+<a name="l00349"></a>00349 fprintf(stderr, <span class="stringliteral">"ERROR: could not start parsers.\n"</span>);
+<a name="l00350"></a>00350 r = -4;
+<a name="l00351"></a>00351 <span class="keywordflow">goto</span> end;
+<a name="l00352"></a>00352 }
+<a name="l00353"></a>00353 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> < 1) {
+<a name="l00354"></a>00354 fprintf(stderr, <span class="stringliteral">"ERROR: no parser could be started, exit.\n"</span>);
+<a name="l00355"></a>00355 r = -5;
+<a name="l00356"></a>00356 <span class="keywordflow">goto</span> end;
+<a name="l00357"></a>00357 }
+<a name="l00358"></a>00358
+<a name="l00359"></a>00359 r = _slave_work_int(lms, fds, db);
+<a name="l00360"></a>00360
+<a name="l00361"></a>00361 end:
+<a name="l00362"></a>00362 <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(lms, db->handle);
+<a name="l00363"></a>00363 _slave_db_close(db);
+<a name="l00364"></a>00364 _init_sync_send(fds);
+<a name="l00365"></a>00365
+<a name="l00366"></a>00366 <span class="keywordflow">return</span> r;
+<a name="l00367"></a>00367 }
+<a name="l00368"></a>00368
+<a name="l00369"></a>00369
+<a name="l00370"></a>00370 <span class="comment">/***********************************************************************</span>
+<a name="l00371"></a>00371 <span class="comment"> * Master-side.</span>
+<a name="l00372"></a>00372 <span class="comment"> ***********************************************************************/</span>
+<a name="l00373"></a>00373
+<a name="l00374"></a>00374 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00375"></a>00375 _master_db_compile_all_stmts(<span class="keyword">struct</span> master_db *db)
+<a name="l00376"></a>00376 {
+<a name="l00377"></a>00377 sqlite3 *handle;
+<a name="l00378"></a>00378
+<a name="l00379"></a>00379 handle = db->handle;
+<a name="l00380"></a>00380
+<a name="l00381"></a>00381 db->get_files = <a class="code" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lms_db_compile_stmt_get_files</a>(handle);
+<a name="l00382"></a>00382 <span class="keywordflow">if</span> (!db->get_files)
+<a name="l00383"></a>00383 <span class="keywordflow">return</span> -1;
+<a name="l00384"></a>00384
+<a name="l00385"></a>00385 <span class="keywordflow">return</span> 0;
+<a name="l00386"></a>00386 }
+<a name="l00387"></a>00387
+<a name="l00388"></a>00388 <span class="keyword">static</span> <span class="keyword">struct </span>master_db *
+<a name="l00389"></a>00389 _master_db_open(<span class="keyword">const</span> <span class="keywordtype">char</span> *db_path)
+<a name="l00390"></a>00390 {
+<a name="l00391"></a>00391 <span class="keyword">struct </span>master_db *db;
+<a name="l00392"></a>00392
+<a name="l00393"></a>00393 db = calloc(1, <span class="keyword">sizeof</span>(*db));
+<a name="l00394"></a>00394 <span class="keywordflow">if</span> (!db) {
+<a name="l00395"></a>00395 perror(<span class="stringliteral">"calloc"</span>);
+<a name="l00396"></a>00396 <span class="keywordflow">return</span> NULL;
+<a name="l00397"></a>00397 }
+<a name="l00398"></a>00398
+<a name="l00399"></a>00399 <span class="keywordflow">if</span> (sqlite3_open(db_path, &db->handle) != SQLITE_OK) {
+<a name="l00400"></a>00400 fprintf(stderr, <span class="stringliteral">"ERROR: could not open DB \"%s\": %s\n"</span>,
+<a name="l00401"></a>00401 db_path, sqlite3_errmsg(db->handle));
+<a name="l00402"></a>00402 <span class="keywordflow">goto</span> error;
+<a name="l00403"></a>00403 }
+<a name="l00404"></a>00404
+<a name="l00405"></a>00405 <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="l00406"></a>00406 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup tables and indexes.\n"</span>);
+<a name="l00407"></a>00407 <span class="keywordflow">goto</span> error;
+<a name="l00408"></a>00408 }
+<a name="l00409"></a>00409
+<a name="l00410"></a>00410 <span class="keywordflow">if</span> (_master_db_compile_all_stmts(db) != 0) {
+<a name="l00411"></a>00411 fprintf(stderr, <span class="stringliteral">"ERROR: could not compile statements.\n"</span>);
+<a name="l00412"></a>00412 <span class="keywordflow">goto</span> error;
+<a name="l00413"></a>00413 }
+<a name="l00414"></a>00414
+<a name="l00415"></a>00415 <span class="keywordflow">return</span> db;
+<a name="l00416"></a>00416
+<a name="l00417"></a>00417 error:
+<a name="l00418"></a>00418 sqlite3_close(db->handle);
+<a name="l00419"></a>00419 free(db);
+<a name="l00420"></a>00420 <span class="keywordflow">return</span> NULL;
+<a name="l00421"></a>00421 }
+<a name="l00422"></a>00422
+<a name="l00423"></a>00423 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00424"></a>00424 _master_db_close(<span class="keyword">struct</span> master_db *db)
+<a name="l00425"></a>00425 {
+<a name="l00426"></a>00426 <span class="keywordflow">if</span> (db->get_files)
+<a name="l00427"></a>00427 <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="l00428"></a>00428
+<a name="l00429"></a>00429 <span class="keywordflow">if</span> (sqlite3_close(db->handle) != SQLITE_OK) {
+<a name="l00430"></a>00430 fprintf(stderr, <span class="stringliteral">"ERROR: clould not close DB (master): %s\n"</span>,
+<a name="l00431"></a>00431 sqlite3_errmsg(db->handle));
+<a name="l00432"></a>00432 <span class="keywordflow">return</span> -1;
+<a name="l00433"></a>00433 }
+<a name="l00434"></a>00434 free(db);
+<a name="l00435"></a>00435
+<a name="l00436"></a>00436 <span class="keywordflow">return</span> 0;
+<a name="l00437"></a>00437 }
+<a name="l00438"></a>00438
+<a name="l00439"></a>00439 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00440"></a>00440 _calc_base(<span class="keyword">struct</span> <a class="code" href="structlms__file__info.html">lms_file_info</a> *finfo)
+<a name="l00441"></a>00441 {
+<a name="l00442"></a>00442 <span class="keywordtype">int</span> i;
+<a name="l00443"></a>00443
+<a name="l00444"></a>00444 <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="l00445"></a>00445 <span class="keywordflow">if</span> (finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>[i] == <span class="charliteral">'/'</span>) {
+<a name="l00446"></a>00446 finfo-><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a> = i;
+<a name="l00447"></a>00447 <span class="keywordflow">return</span>;
+<a name="l00448"></a>00448 }
+<a name="l00449"></a>00449 }
+<a name="l00450"></a>00450
+<a name="l00451"></a>00451 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
+<a name="l00452"></a>00452 _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="l00453"></a>00453 {
+<a name="l00454"></a>00454 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = sqlite3_column_int64(stmt, 0);
+<a name="l00455"></a>00455 finfo-><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a> = sqlite3_column_blob(stmt, 1);
+<a name="l00456"></a>00456 finfo-><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> = sqlite3_column_bytes(stmt, 1);
+<a name="l00457"></a>00457 finfo-><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a> = 0;
+<a name="l00458"></a>00458 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = sqlite3_column_int(stmt, 2);
+<a name="l00459"></a>00459 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = sqlite3_column_int(stmt, 3);
+<a name="l00460"></a>00460 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = sqlite3_column_int(stmt, 4);
+<a name="l00461"></a>00461 }
+<a name="l00462"></a>00462
+<a name="l00463"></a>00463 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
+<a name="l00464"></a>00464 _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="l00465"></a>00465 {
+<a name="l00466"></a>00466 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = st->st_mtime;
+<a name="l00467"></a>00467 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = st->st_size;
+<a name="l00468"></a>00468 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = 0;
+<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 _check_row(<span class="keyword">struct</span> master_db *db, <span class="keyword">struct</span> <a class="code" href="structpinfo.html">pinfo</a> *<a class="code" href="structpinfo.html">pinfo</a>)
+<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="keyword">struct </span>stat st;
+<a name="l00476"></a>00476 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags;
+<a name="l00477"></a>00477 <span class="keywordtype">int</span> r, reply;
+<a name="l00478"></a>00478
+<a name="l00479"></a>00479 _update_finfo_from_stmt(&finfo, db->get_files);
+<a name="l00480"></a>00480
+<a name="l00481"></a>00481 flags = 0;
+<a name="l00482"></a>00482 <span class="keywordflow">if</span> (stat(finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>, &st) == 0) {
+<a name="l00483"></a>00483 <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="l00484"></a>00484 <span class="keywordflow">if</span> (finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> == 0)
+<a name="l00485"></a>00485 <span class="keywordflow">return</span> 0;
+<a name="l00486"></a>00486 <span class="keywordflow">else</span>
+<a name="l00487"></a>00487 finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = 0;
+<a name="l00488"></a>00488 } <span class="keywordflow">else</span> {
+<a name="l00489"></a>00489 _update_finfo_from_stat(&finfo, &st);
+<a name="l00490"></a>00490 flags |= COMM_FINFO_FLAG_OUTDATED;
+<a name="l00491"></a>00491 }
+<a name="l00492"></a>00492 } <span class="keywordflow">else</span> {
+<a name="l00493"></a>00493 <span class="keywordflow">if</span> (finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>)
+<a name="l00494"></a>00494 <span class="keywordflow">return</span> 0;
+<a name="l00495"></a>00495 <span class="keywordflow">else</span>
+<a name="l00496"></a>00496 finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = time(NULL);
+<a name="l00497"></a>00497 }
+<a name="l00498"></a>00498
+<a name="l00499"></a>00499 _calc_base(&finfo);
+<a name="l00500"></a>00500
+<a name="l00501"></a>00501 <span class="keywordflow">if</span> (_master_send_file(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>, finfo, flags) != 0)
+<a name="l00502"></a>00502 <span class="keywordflow">return</span> -1;
+<a name="l00503"></a>00503
+<a name="l00504"></a>00504 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="l00505"></a>00505 pinfo-><a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>);
+<a name="l00506"></a>00506 <span class="keywordflow">if</span> (r < 0)
+<a name="l00507"></a>00507 <span class="keywordflow">return</span> -2;
+<a name="l00508"></a>00508 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == 1) {
+<a name="l00509"></a>00509 fprintf(stderr, <span class="stringliteral">"ERROR: slave took too long, restart %d\n"</span>,
+<a name="l00510"></a>00510 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00511"></a>00511 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a>(pinfo, _slave_work) != 0)
+<a name="l00512"></a>00512 <span class="keywordflow">return</span> -3;
+<a name="l00513"></a>00513 <span class="keywordflow">return</span> 1;
+<a name="l00514"></a>00514 } <span class="keywordflow">else</span> {
+<a name="l00515"></a>00515 <span class="keywordflow">if</span> (reply < 0) {
+<a name="l00516"></a>00516 <span class="comment">/* XXX callback library users to inform error. */</span>
+<a name="l00517"></a>00517 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00518"></a>00518 getpid(), finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>);
+<a name="l00519"></a>00519 <span class="keywordflow">return</span> (-reply) << 8;
+<a name="l00520"></a>00520 } <span class="keywordflow">else</span>
+<a name="l00521"></a>00521 <span class="keywordflow">return</span> reply;
+<a name="l00522"></a>00522 }
+<a name="l00523"></a>00523 }
+<a name="l00524"></a>00524
+<a name="l00525"></a>00525 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00526"></a>00526 _init_sync_wait(<span class="keyword">struct</span> pinfo *pinfo, <span class="keywordtype">int</span> restart)
+<a name="l00527"></a>00527 {
+<a name="l00528"></a>00528 <span class="keywordtype">int</span> r, reply;
+<a name="l00529"></a>00529
+<a name="l00530"></a>00530 <span class="keywordflow">do</span> {
+<a name="l00531"></a>00531 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="l00532"></a>00532 pinfo-><a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>);
+<a name="l00533"></a>00533 <span class="keywordflow">if</span> (r < 0)
+<a name="l00534"></a>00534 <span class="keywordflow">return</span> -1;
+<a name="l00535"></a>00535 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == 1 && restart) {
+<a name="l00536"></a>00536 fprintf(stderr, <span class="stringliteral">"ERROR: slave took too long, restart %d\n"</span>,
+<a name="l00537"></a>00537 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00538"></a>00538 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a>(pinfo, _slave_work) != 0)
+<a name="l00539"></a>00539 <span class="keywordflow">return</span> -2;
+<a name="l00540"></a>00540 }
+<a name="l00541"></a>00541 } <span class="keywordflow">while</span> (r != 0 && restart);
+<a name="l00542"></a>00542
+<a name="l00543"></a>00543 <span class="keywordflow">return</span> r;
+<a name="l00544"></a>00544 }
+<a name="l00545"></a>00545
+<a name="l00546"></a>00546 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00547"></a>00547 _master_dummy_send_finish(<span class="keyword">const</span> <span class="keyword">struct</span> fds *master)
+<a name="l00548"></a>00548 {
+<a name="l00549"></a>00549 <span class="keywordflow">return</span> 0;
+<a name="l00550"></a>00550 }
+<a name="l00551"></a>00551
+<a name="l00552"></a>00552 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00553"></a>00553 _check(<span class="keyword">struct</span> pinfo *pinfo, <span class="keywordtype">int</span> len, <span class="keywordtype">char</span> *path)
+<a name="l00554"></a>00554 {
+<a name="l00555"></a>00555 <span class="keywordtype">char</span> query[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a> + 2];
+<a name="l00556"></a>00556 <span class="keyword">struct </span>master_db *db;
+<a name="l00557"></a>00557 <span class="keywordtype">int</span> r, ret;
+<a name="l00558"></a>00558
+<a name="l00559"></a>00559 db = _master_db_open(pinfo-><a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00560"></a>00560 <span class="keywordflow">if</span> (!db)
+<a name="l00561"></a>00561 <span class="keywordflow">return</span> -1;
+<a name="l00562"></a>00562
+<a name="l00563"></a>00563 memcpy(query, path, len);
+<a name="l00564"></a>00564 query[len] = <span class="charliteral">'%'</span>;
+<a name="l00565"></a>00565 query[len + 1] = <span class="charliteral">'\0'</span>;
+<a name="l00566"></a>00566 ret = <a class="code" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">lms_db_get_files</a>(db->get_files, query, len + 1);
+<a name="l00567"></a>00567 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00568"></a>00568 <span class="keywordflow">goto</span> end;
+<a name="l00569"></a>00569
+<a name="l00570"></a>00570 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a>(pinfo, _slave_work) != 0) {
+<a name="l00571"></a>00571 ret = -2;
+<a name="l00572"></a>00572 <span class="keywordflow">goto</span> end;
+<a name="l00573"></a>00573 }
+<a name="l00574"></a>00574 _init_sync_wait(pinfo, 1);
+<a name="l00575"></a>00575
+<a name="l00576"></a>00576 <span class="keywordflow">do</span> {
+<a name="l00577"></a>00577 r = sqlite3_step(db->get_files);
+<a name="l00578"></a>00578 <span class="keywordflow">if</span> (r == SQLITE_ROW) {
+<a name="l00579"></a>00579 <span class="keywordflow">if</span> (_check_row(db, pinfo) < 0) {
+<a name="l00580"></a>00580 fprintf(stderr, <span class="stringliteral">"ERROR: could not check row.\n"</span>);
+<a name="l00581"></a>00581 ret = -1;
+<a name="l00582"></a>00582 <span class="keywordflow">goto</span> finish_slave;
+<a name="l00583"></a>00583 }
+<a name="l00584"></a>00584 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00585"></a>00585 fprintf(stderr, <span class="stringliteral">"ERROR: could not begin transaction: %s\n"</span>,
+<a name="l00586"></a>00586 sqlite3_errmsg(db->handle));
+<a name="l00587"></a>00587 ret = -2;
+<a name="l00588"></a>00588 <span class="keywordflow">goto</span> finish_slave;
+<a name="l00589"></a>00589 }
+<a name="l00590"></a>00590 } <span class="keywordflow">while</span> (r != SQLITE_DONE);
+<a name="l00591"></a>00591 ret = 0;
+<a name="l00592"></a>00592
+<a name="l00593"></a>00593 finish_slave:
+<a name="l00594"></a>00594 _master_send_finish(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>);
+<a name="l00595"></a>00595 _init_sync_wait(pinfo, 0);
+<a name="l00596"></a>00596 <a class="code" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave</a>(pinfo, _master_dummy_send_finish);
+<a name="l00597"></a>00597
+<a name="l00598"></a>00598 end:
+<a name="l00599"></a>00599 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(db->get_files);
+<a name="l00600"></a>00600 _master_db_close(db);
+<a name="l00601"></a>00601
+<a name="l00602"></a>00602 <span class="keywordflow">return</span> ret;
+<a name="l00603"></a>00603 }
+<a name="l00604"></a>00604
+<a name="l00617"></a>00617 <span class="keywordtype">int</span>
+<a name="l00618"></a><a class="code" href="lightmediascanner__check_8c.html#859492d896e816498edb471315efced1">00618</a> <a class="code" href="lightmediascanner_8h.html#890f1af4c54c88a63abdbeff5ecd49a3">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="l00619"></a>00619 {
+<a name="l00620"></a>00620 <span class="keyword">struct </span>pinfo pinfo;
+<a name="l00621"></a>00621 <span class="keywordtype">int</span> r;
+<a name="l00622"></a>00622 <span class="keywordtype">char</span> path[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>];
+<a name="l00623"></a>00623
+<a name="l00624"></a>00624 <span class="keywordflow">if</span> (!<a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>) {
+<a name="l00625"></a>00625 r = -1;
+<a name="l00626"></a>00626 <span class="keywordflow">goto</span> end;
+<a name="l00627"></a>00627 }
+<a name="l00628"></a>00628
+<a name="l00629"></a>00629 <span class="keywordflow">if</span> (!top_path) {
+<a name="l00630"></a>00630 r = -2;
+<a name="l00631"></a>00631 <span class="keywordflow">goto</span> end;
+<a name="l00632"></a>00632 }
+<a name="l00633"></a>00633
+<a name="l00634"></a>00634 <span class="keywordflow">if</span> (<a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>) {
+<a name="l00635"></a>00635 fprintf(stderr, <span class="stringliteral">"ERROR: is already processing.\n"</span>);
+<a name="l00636"></a>00636 r = -3;
+<a name="l00637"></a>00637 <span class="keywordflow">goto</span> end;
+<a name="l00638"></a>00638 }
+<a name="l00639"></a>00639
+<a name="l00640"></a>00640 <span class="keywordflow">if</span> (!<a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00641"></a>00641 fprintf(stderr, <span class="stringliteral">"ERROR: no plugins registered.\n"</span>);
+<a name="l00642"></a>00642 r = -4;
+<a name="l00643"></a>00643 <span class="keywordflow">goto</span> end;
+<a name="l00644"></a>00644 }
+<a name="l00645"></a>00645
+<a name="l00646"></a>00646 pinfo.<a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a> = <a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>;
+<a name="l00647"></a>00647
+<a name="l00648"></a>00648 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lms_create_pipes</a>(&pinfo) != 0) {
+<a name="l00649"></a>00649 r = -5;
+<a name="l00650"></a>00650 <span class="keywordflow">goto</span> end;
+<a name="l00651"></a>00651 }
+<a name="l00652"></a>00652
+<a name="l00653"></a>00653 <span class="keywordflow">if</span> (realpath(top_path, path) == NULL) {
+<a name="l00654"></a>00654 perror(<span class="stringliteral">"realpath"</span>);
+<a name="l00655"></a>00655 r = -6;
+<a name="l00656"></a>00656 <span class="keywordflow">goto</span> close_pipes;
+<a name="l00657"></a>00657 }
+<a name="l00658"></a>00658
+<a name="l00659"></a>00659 <a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 1;
+<a name="l00660"></a>00660 r = _check(&pinfo, strlen(path), path);
+<a name="l00661"></a>00661 <a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 0;
+<a name="l00662"></a>00662
+<a name="l00663"></a>00663 close_pipes:
+<a name="l00664"></a>00664 <a class="code" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lms_close_pipes</a>(&pinfo);
+<a name="l00665"></a>00665 end:
+<a name="l00666"></a>00666 <span class="keywordflow">return</span> r;
+<a name="l00667"></a>00667 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_check.c:<p><center><img src="lightmediascanner__check_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_check.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_check.c_map">
+<area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="757,512,885,539"><area shape="rect" href="lightmediascanner__private_8h.html" title="lightmediascanner_private.h" alt="" coords="267,639,440,665"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="257,816,449,843"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="500,765,668,792"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="719,639,924,665"></map>
+
+<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>
+
+</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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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>.
+</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#l00067">67</a> of file <a class="el" href="lightmediascanner__check_8c-source.html">lightmediascanner_check.c</a>.
+</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 width="100%"></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#l00618">618</a> of file <a class="el" href="lightmediascanner__check_8c-source.html">lightmediascanner_check.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00071">lms::is_processing</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00054">pinfo::lms</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00566">lms_close_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00577">lms_create_pipes()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00042">PATH_SIZE</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__check_8c_859492d896e816498edb471315efced1_cgraph.png" border="0" usemap="#lightmediascanner__check_8c_859492d896e816498edb471315efced1_cgraph_map" alt=""></center>
+<map name="lightmediascanner__check_8c_859492d896e816498edb471315efced1_cgraph_map">
+<area shape="rect" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed" title="lms_close_pipes" alt="" coords="136,5,245,32"><area shape="rect" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4" title="lms_create_pipes" alt="" coords="135,56,247,83"></map>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed" title="lms_close_pipes" alt="" coords="136,5,245,32">
+<area shape="rect" href="$lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4" title="lms_create_pipes" alt="" coords="135,56,247,83">
--- /dev/null
+c182c7304ee5dc5f9c382186673e0b3f
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="757,512,885,539">
+<area shape="rect" href="$lightmediascanner__private_8h.html" title="lightmediascanner_private.h" alt="" coords="267,639,440,665">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="257,816,449,843">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="500,765,668,792">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="719,639,924,665">
--- /dev/null
+6cd5c7de94121a998b8300cf1a0a053a
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 lms_db_image_t;
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> lms_db_image_t *<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>(lms_db_image_t *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>(lms_db_image_t *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>(lms_db_image_t *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 lms_db_audio_t;
+<a name="l00098"></a>00098
+<a name="l00099"></a>00099 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> lms_db_audio_t *<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>(lms_db_audio_t *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>(lms_db_audio_t *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>(lms_db_audio_t *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 lms_db_video_t;
+<a name="l00112"></a>00112
+<a name="l00113"></a>00113 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> lms_db_video_t *<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>(lms_db_video_t *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>(lms_db_video_t *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>(lms_db_video_t *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 lms_db_playlist_t;
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 <a class="code" href="lightmediascanner_8h.html#d8ce4efaa307683d3d763b37b4711c53">API</a> lms_db_playlist_t *<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>(lms_db_playlist_t *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>(lms_db_playlist_t *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>(lms_db_playlist_t *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><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_db.h:<p><center><img src="lightmediascanner__db_8h__incl.png" border="0" usemap="#src/lib/lightmediascanner_db.h_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db.h_map">
+<area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="241,81,409,108"><area shape="rect" href="lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="247,132,404,159"><area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="499,5,627,32"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="460,56,665,83"></map>
+
+<p>
+This graph shows which files directly or indirectly include this file:<p><center><img src="lightmediascanner__db_8h__dep__incl.png" border="0" usemap="#src/lib/lightmediascanner_db.hdep_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db.hdep_map">
+<area shape="rect" href="lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="245,5,467,32"><area shape="rect" href="lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="244,56,468,83"><area shape="rect" href="lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="241,107,471,133"><area shape="rect" href="lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="245,157,467,184"></map>
+
+<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 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 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 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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>.
+</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>.
+</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 width="100%"></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>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="245,5,467,32">
+<area shape="rect" href="$lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="244,56,468,83">
+<area shape="rect" href="$lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="241,107,471,133">
+<area shape="rect" href="$lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="245,157,467,184">
--- /dev/null
+754b6d086ad7fe3e71ecb28b280bf3a8
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="241,81,409,108">
+<area shape="rect" href="$lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="247,132,404,159">
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="499,5,627,32">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="460,56,665,83">
--- /dev/null
+86eae6935af25b0833e6ae400acdd942
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a>></span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00005"></a>00005
+<a name="l00006"></a>00006 <span class="keyword">struct </span>lms_db_audio {
+<a name="l00007"></a>00007 sqlite3 *db;
+<a name="l00008"></a>00008 sqlite3_stmt *insert_audio;
+<a name="l00009"></a>00009 sqlite3_stmt *insert_artist;
+<a name="l00010"></a>00010 sqlite3_stmt *insert_album;
+<a name="l00011"></a>00011 sqlite3_stmt *insert_genre;
+<a name="l00012"></a>00012 sqlite3_stmt *get_artist;
+<a name="l00013"></a>00013 sqlite3_stmt *get_album;
+<a name="l00014"></a>00014 sqlite3_stmt *get_genre;
+<a name="l00015"></a>00015 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _references;
+<a name="l00016"></a>00016 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _is_started:1;
+<a name="l00017"></a>00017 };
+<a name="l00018"></a>00018
+<a name="l00019"></a>00019 <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="l00020"></a>00020
+<a name="l00021"></a>00021 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00022"></a>00022 _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="l00023"></a>00023 {
+<a name="l00024"></a>00024 <span class="keywordtype">char</span> *err;
+<a name="l00025"></a>00025 <span class="keywordtype">int</span> r;
+<a name="l00026"></a>00026
+<a name="l00027"></a>00027 r = sqlite3_exec(db, sql, NULL, NULL, &err);
+<a name="l00028"></a>00028 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00029"></a>00029 fprintf(stderr, <span class="stringliteral">"ERROR: could not create \"%s\": %s\n"</span>, name, err);
+<a name="l00030"></a>00030 sqlite3_free(err);
+<a name="l00031"></a>00031 <span class="keywordflow">return</span> -1;
+<a name="l00032"></a>00032 }
+<a name="l00033"></a>00033
+<a name="l00034"></a>00034 <span class="keywordflow">return</span> 0;
+<a name="l00035"></a>00035 }
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00038"></a>00038 _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="l00039"></a>00039 <span class="keywordtype">int</span> ret;
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041 ret = _db_create(db, <span class="stringliteral">"audios"</span>,
+<a name="l00042"></a>00042 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS audios ("</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">"album_id INTEGER, "</span>
+<a name="l00046"></a>00046 <span class="stringliteral">"genre_id INTEGER, "</span>
+<a name="l00047"></a>00047 <span class="stringliteral">"trackno INTEGER, "</span>
+<a name="l00048"></a>00048 <span class="stringliteral">"rating INTEGER, "</span>
+<a name="l00049"></a>00049 <span class="stringliteral">"playcnt INTEGER"</span>
+<a name="l00050"></a>00050 <span class="stringliteral">")"</span>);
+<a name="l00051"></a>00051 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00052"></a>00052 <span class="keywordflow">goto</span> done;
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 ret = _db_create(db, <span class="stringliteral">"audios_title_idx"</span>,
+<a name="l00055"></a>00055 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00056"></a>00056 <span class="stringliteral">"audios_title_idx ON audios (title)"</span>);
+<a name="l00057"></a>00057 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00058"></a>00058 <span class="keywordflow">goto</span> done;
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 ret = _db_create(db, <span class="stringliteral">"audios_album_idx"</span>,
+<a name="l00061"></a>00061 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00062"></a>00062 <span class="stringliteral">"audios_album_idx ON audios (album_id)"</span>);
+<a name="l00063"></a>00063 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00064"></a>00064 <span class="keywordflow">goto</span> done;
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 ret = _db_create(db, <span class="stringliteral">"audios_genre_idx"</span>,
+<a name="l00067"></a>00067 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00068"></a>00068 <span class="stringliteral">"audios_genre_idx ON audios (genre_id)"</span>);
+<a name="l00069"></a>00069 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00070"></a>00070 <span class="keywordflow">goto</span> done;
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 ret = _db_create(db, <span class="stringliteral">"audios_trackno_idx"</span>,
+<a name="l00073"></a>00073 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00074"></a>00074 <span class="stringliteral">"audios_trackno_idx ON audios (trackno)"</span>);
+<a name="l00075"></a>00075 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00076"></a>00076 <span class="keywordflow">goto</span> done;
+<a name="l00077"></a>00077
+<a name="l00078"></a>00078 ret = _db_create(db, <span class="stringliteral">"audios_playcnt_idx"</span>,
+<a name="l00079"></a>00079 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00080"></a>00080 <span class="stringliteral">"audios_playcnt_idx ON audios (playcnt)"</span>);
+<a name="l00081"></a>00081 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00082"></a>00082 <span class="keywordflow">goto</span> done;
+<a name="l00083"></a>00083
+<a name="l00084"></a>00084 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00085"></a>00085 <span class="stringliteral">"delete_audios_on_files_deleted "</span>
+<a name="l00086"></a>00086 <span class="stringliteral">"DELETE ON files FOR EACH ROW BEGIN"</span>
+<a name="l00087"></a>00087 <span class="stringliteral">" DELETE FROM audios WHERE id = OLD.id; END;"</span>);
+<a name="l00088"></a>00088 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00089"></a>00089 <span class="keywordflow">goto</span> done;
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00092"></a>00092 <span class="stringliteral">"delete_files_on_audios_deleted "</span>
+<a name="l00093"></a>00093 <span class="stringliteral">"DELETE ON audios FOR EACH ROW BEGIN"</span>
+<a name="l00094"></a>00094 <span class="stringliteral">" DELETE FROM files WHERE id = OLD.id; END;"</span>);
+<a name="l00095"></a>00095
+<a name="l00096"></a>00096 done:
+<a name="l00097"></a>00097 <span class="keywordflow">return</span> ret;
+<a name="l00098"></a>00098 }
+<a name="l00099"></a>00099
+<a name="l00100"></a>00100 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> _db_table_updater_audios[] = {
+<a name="l00101"></a>00101 _db_table_updater_audios_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 _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="l00106"></a>00106 <span class="keywordtype">int</span> ret;
+<a name="l00107"></a>00107
+<a name="l00108"></a>00108 ret = _db_create(db, <span class="stringliteral">"audio_artists"</span>,
+<a name="l00109"></a>00109 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS audio_artists ("</span>
+<a name="l00110"></a>00110 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00111"></a>00111 <span class="stringliteral">"name TEXT UNIQUE"</span>
+<a name="l00112"></a>00112 <span class="stringliteral">")"</span>);
+<a name="l00113"></a>00113 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00114"></a>00114 <span class="keywordflow">goto</span> done;
+<a name="l00115"></a>00115
+<a name="l00116"></a>00116 ret = _db_create(db, <span class="stringliteral">"audio_artists_name_idx"</span>,
+<a name="l00117"></a>00117 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00118"></a>00118 <span class="stringliteral">"audio_artists_name_idx ON audio_artists (name)"</span>);
+<a name="l00119"></a>00119
+<a name="l00120"></a>00120 done:
+<a name="l00121"></a>00121 <span class="keywordflow">return</span> ret;
+<a name="l00122"></a>00122 }
+<a name="l00123"></a>00123
+<a name="l00124"></a>00124 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> _db_table_updater_audio_artists[] = {
+<a name="l00125"></a>00125 _db_table_updater_audio_artists_0
+<a name="l00126"></a>00126 };
+<a name="l00127"></a>00127
+<a name="l00128"></a>00128 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00129"></a>00129 _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="l00130"></a>00130 <span class="keywordtype">int</span> ret;
+<a name="l00131"></a>00131
+<a name="l00132"></a>00132 ret = _db_create(db, <span class="stringliteral">"audio_albums"</span>,
+<a name="l00133"></a>00133 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS audio_albums ("</span>
+<a name="l00134"></a>00134 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00135"></a>00135 <span class="stringliteral">"artist_id INTEGER, "</span>
+<a name="l00136"></a>00136 <span class="stringliteral">"name TEXT"</span>
+<a name="l00137"></a>00137 <span class="stringliteral">")"</span>);
+<a name="l00138"></a>00138 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00139"></a>00139 <span class="keywordflow">goto</span> done;
+<a name="l00140"></a>00140
+<a name="l00141"></a>00141 ret = _db_create(db, <span class="stringliteral">"audio_albums_name_idx"</span>,
+<a name="l00142"></a>00142 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00143"></a>00143 <span class="stringliteral">"audio_albums_name_idx ON audio_albums (name)"</span>);
+<a name="l00144"></a>00144 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00145"></a>00145 <span class="keywordflow">goto</span> done;
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 ret = _db_create(db, <span class="stringliteral">"audio_albums_artist_idx"</span>,
+<a name="l00148"></a>00148 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00149"></a>00149 <span class="stringliteral">"audio_albums_artist_idx ON audio_albums (artist_id)"</span>);
+<a name="l00150"></a>00150 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00151"></a>00151 <span class="keywordflow">goto</span> done;
+<a name="l00152"></a>00152
+<a name="l00153"></a>00153 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00154"></a>00154 <span class="stringliteral">"delete_audios_on_albums_deleted "</span>
+<a name="l00155"></a>00155 <span class="stringliteral">"DELETE ON audio_albums FOR EACH ROW BEGIN"</span>
+<a name="l00156"></a>00156 <span class="stringliteral">" DELETE FROM audios WHERE album_id = OLD.id; END;"</span>);
+<a name="l00157"></a>00157 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00158"></a>00158 <span class="keywordflow">goto</span> done;
+<a name="l00159"></a>00159
+<a name="l00160"></a>00160 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00161"></a>00161 <span class="stringliteral">"delete_audio_albums_on_artists_deleted "</span>
+<a name="l00162"></a>00162 <span class="stringliteral">"DELETE ON audio_artists FOR EACH ROW BEGIN"</span>
+<a name="l00163"></a>00163 <span class="stringliteral">" DELETE FROM audio_albums WHERE artist_id = OLD.id; END;"</span>);
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 done:
+<a name="l00166"></a>00166 <span class="keywordflow">return</span> ret;
+<a name="l00167"></a>00167 }
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> _db_table_updater_audio_albums[] = {
+<a name="l00170"></a>00170 _db_table_updater_audio_albums_0
+<a name="l00171"></a>00171 };
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00174"></a>00174 _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="l00175"></a>00175 <span class="keywordtype">int</span> ret;
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177 ret = _db_create(db, <span class="stringliteral">"audio_genres"</span>,
+<a name="l00178"></a>00178 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS audio_genres ("</span>
+<a name="l00179"></a>00179 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00180"></a>00180 <span class="stringliteral">"name TEXT UNIQUE"</span>
+<a name="l00181"></a>00181 <span class="stringliteral">")"</span>);
+<a name="l00182"></a>00182 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00183"></a>00183 <span class="keywordflow">goto</span> done;
+<a name="l00184"></a>00184
+<a name="l00185"></a>00185 ret = _db_create(db, <span class="stringliteral">"audio_genres_name_idx"</span>,
+<a name="l00186"></a>00186 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS "</span>
+<a name="l00187"></a>00187 <span class="stringliteral">"audio_albums_name_idx ON audio_albums (name)"</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 = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00192"></a>00192 <span class="stringliteral">"delete_audios_on_genres_deleted "</span>
+<a name="l00193"></a>00193 <span class="stringliteral">"DELETE ON audio_genres FOR EACH ROW BEGIN"</span>
+<a name="l00194"></a>00194 <span class="stringliteral">" DELETE FROM audios WHERE genre_id = OLD.id; END;"</span>);
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196 done:
+<a name="l00197"></a>00197 <span class="keywordflow">return</span> ret;
+<a name="l00198"></a>00198 }
+<a name="l00199"></a>00199
+<a name="l00200"></a>00200 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> _db_table_updater_audio_genres[] = {
+<a name="l00201"></a>00201 _db_table_updater_audio_genres_0
+<a name="l00202"></a>00202 };
+<a name="l00203"></a>00203
+<a name="l00204"></a><a class="code" href="lightmediascanner__db__audio_8c.html#d2a4e90aa49af7291552e6ac172aaa51">00204</a> <span class="preprocessor">#define _DB_T_UPDATE(db, name, array) \</span>
+<a name="l00205"></a>00205 <span class="preprocessor"> lms_db_table_update_if_required(db, name, LMS_ARRAY_SIZE(array), array)</span>
+<a name="l00206"></a>00206 <span class="preprocessor"></span>
+<a name="l00207"></a>00207 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00208"></a>00208 _db_create_tables_if_required(sqlite3 *db)
+<a name="l00209"></a>00209 {
+<a name="l00210"></a>00210 <span class="keywordtype">int</span> ret;
+<a name="l00211"></a>00211
+<a name="l00212"></a>00212 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="l00213"></a>00213 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00214"></a>00214 <span class="keywordflow">goto</span> done;
+<a name="l00215"></a>00215
+<a name="l00216"></a>00216 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="l00217"></a>00217 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00218"></a>00218 <span class="keywordflow">goto</span> done;
+<a name="l00219"></a>00219
+<a name="l00220"></a>00220 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="l00221"></a>00221 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00222"></a>00222 <span class="keywordflow">goto</span> done;
+<a name="l00223"></a>00223
+<a name="l00224"></a>00224 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="l00225"></a>00225
+<a name="l00226"></a>00226 done:
+<a name="l00227"></a>00227 <span class="keywordflow">return</span> ret;
+<a name="l00228"></a>00228 }
+<a name="l00229"></a>00229
+<a name="l00230"></a>00230 <span class="preprocessor">#undef _DB_T_UPDATE</span>
+<a name="l00231"></a>00231 <span class="preprocessor"></span>
+<a name="l00246"></a>00246 <a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *
+<a name="l00247"></a><a class="code" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">00247</a> <a class="code" href="group__LMS__DB.html#g09c4349148be1bdf02f069f8acb191ee">lms_db_audio_new</a>(sqlite3 *db)
+<a name="l00248"></a>00248 {
+<a name="l00249"></a>00249 <a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a> *lda;
+<a name="l00250"></a>00250 <span class="keywordtype">void</span> *p;
+<a name="l00251"></a>00251
+<a name="l00252"></a>00252 <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="l00253"></a>00253 lda = p;
+<a name="l00254"></a>00254 lda->_references++;
+<a name="l00255"></a>00255 <span class="keywordflow">return</span> lda;
+<a name="l00256"></a>00256 }
+<a name="l00257"></a>00257
+<a name="l00258"></a>00258 <span class="keywordflow">if</span> (!db)
+<a name="l00259"></a>00259 <span class="keywordflow">return</span> NULL;
+<a name="l00260"></a>00260
+<a name="l00261"></a>00261 <span class="keywordflow">if</span> (_db_create_tables_if_required(db) != 0) {
+<a name="l00262"></a>00262 fprintf(stderr, <span class="stringliteral">"ERROR: could not create tables.\n"</span>);
+<a name="l00263"></a>00263 <span class="keywordflow">return</span> NULL;
+<a name="l00264"></a>00264 }
+<a name="l00265"></a>00265
+<a name="l00266"></a>00266 lda = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="group__LMS__DB.html#ge13e30aaedfabd6f1eec256649d9bc98">lms_db_audio_t</a>));
+<a name="l00267"></a>00267 lda->_references = 1;
+<a name="l00268"></a>00268 lda->db = db;
+<a name="l00269"></a>00269
+<a name="l00270"></a>00270 <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="l00271"></a>00271 <a class="code" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">lms_db_audio_free</a>(lda);
+<a name="l00272"></a>00272 <span class="keywordflow">return</span> NULL;
+<a name="l00273"></a>00273 }
+<a name="l00274"></a>00274
+<a name="l00275"></a>00275 <span class="keywordflow">return</span> lda;
+<a name="l00276"></a>00276 }
+<a name="l00277"></a>00277
+<a name="l00290"></a>00290 <span class="keywordtype">int</span>
+<a name="l00291"></a><a class="code" href="group__LMS__DB.html#g39731623b0bc5436858820a94487fdc1">00291</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="l00292"></a>00292 {
+<a name="l00293"></a>00293 <span class="keywordflow">if</span> (!lda)
+<a name="l00294"></a>00294 <span class="keywordflow">return</span> -1;
+<a name="l00295"></a>00295 <span class="keywordflow">if</span> (lda->_is_started)
+<a name="l00296"></a>00296 <span class="keywordflow">return</span> 0;
+<a name="l00297"></a>00297
+<a name="l00298"></a>00298 lda->insert_audio = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00299"></a>00299 <span class="stringliteral">"INSERT OR REPLACE INTO audios "</span>
+<a name="l00300"></a>00300 <span class="stringliteral">"(id, title, album_id, genre_id, trackno, rating, playcnt) "</span>
+<a name="l00301"></a>00301 <span class="stringliteral">"VALUES (?, ?, ?, ?, ?, ?, ?)"</span>);
+<a name="l00302"></a>00302 <span class="keywordflow">if</span> (!lda->insert_audio)
+<a name="l00303"></a>00303 <span class="keywordflow">return</span> -2;
+<a name="l00304"></a>00304
+<a name="l00305"></a>00305 lda->insert_artist = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00306"></a>00306 <span class="stringliteral">"INSERT INTO audio_artists (name) VALUES (?)"</span>);
+<a name="l00307"></a>00307 <span class="keywordflow">if</span> (!lda->insert_artist)
+<a name="l00308"></a>00308 <span class="keywordflow">return</span> -3;
+<a name="l00309"></a>00309
+<a name="l00310"></a>00310 lda->insert_album = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00311"></a>00311 <span class="stringliteral">"INSERT INTO audio_albums (artist_id, name) VALUES (?, ?)"</span>);
+<a name="l00312"></a>00312 <span class="keywordflow">if</span> (!lda->insert_album)
+<a name="l00313"></a>00313 <span class="keywordflow">return</span> -4;
+<a name="l00314"></a>00314
+<a name="l00315"></a>00315 lda->insert_genre = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00316"></a>00316 <span class="stringliteral">"INSERT INTO audio_genres (name) VALUES (?)"</span>);
+<a name="l00317"></a>00317 <span class="keywordflow">if</span> (!lda->insert_genre)
+<a name="l00318"></a>00318 <span class="keywordflow">return</span> -5;
+<a name="l00319"></a>00319
+<a name="l00320"></a>00320 lda->get_artist = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00321"></a>00321 <span class="stringliteral">"SELECT id FROM audio_artists WHERE name = ? LIMIT 1"</span>);
+<a name="l00322"></a>00322 <span class="keywordflow">if</span> (!lda->get_artist)
+<a name="l00323"></a>00323 <span class="keywordflow">return</span> -6;
+<a name="l00324"></a>00324
+<a name="l00325"></a>00325 lda->get_album = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00326"></a>00326 <span class="stringliteral">"SELECT id FROM audio_albums WHERE name = ? AND artist_id = ? LIMIT 1"</span>);
+<a name="l00327"></a>00327 <span class="keywordflow">if</span> (!lda->get_album)
+<a name="l00328"></a>00328 <span class="keywordflow">return</span> -7;
+<a name="l00329"></a>00329
+<a name="l00330"></a>00330 lda->get_genre = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(lda->db,
+<a name="l00331"></a>00331 <span class="stringliteral">"SELECT id FROM audio_genres WHERE name = ? LIMIT 1"</span>);
+<a name="l00332"></a>00332 <span class="keywordflow">if</span> (!lda->get_genre)
+<a name="l00333"></a>00333 <span class="keywordflow">return</span> -8;
+<a name="l00334"></a>00334
+<a name="l00335"></a>00335 lda->_is_started = 1;
+<a name="l00336"></a>00336 <span class="keywordflow">return</span> 0;
+<a name="l00337"></a>00337 }
+<a name="l00338"></a>00338
+<a name="l00351"></a>00351 <span class="keywordtype">int</span>
+<a name="l00352"></a><a class="code" href="group__LMS__DB.html#g7560f9dab2ecd309290d200ea809375d">00352</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="l00353"></a>00353 {
+<a name="l00354"></a>00354 <span class="keywordtype">int</span> r;
+<a name="l00355"></a>00355
+<a name="l00356"></a>00356 <span class="keywordflow">if</span> (!lda)
+<a name="l00357"></a>00357 <span class="keywordflow">return</span> -1;
+<a name="l00358"></a>00358 <span class="keywordflow">if</span> (lda->_references == 0) {
+<a name="l00359"></a>00359 fprintf(stderr, <span class="stringliteral">"ERROR: over-called lms_db_audio_free(%p)\n"</span>, lda);
+<a name="l00360"></a>00360 <span class="keywordflow">return</span> -1;
+<a name="l00361"></a>00361 }
+<a name="l00362"></a>00362
+<a name="l00363"></a>00363 lda->_references--;
+<a name="l00364"></a>00364 <span class="keywordflow">if</span> (lda->_references > 0)
+<a name="l00365"></a>00365 <span class="keywordflow">return</span> 0;
+<a name="l00366"></a>00366
+<a name="l00367"></a>00367 <span class="keywordflow">if</span> (lda->insert_audio)
+<a name="l00368"></a>00368 <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="l00369"></a>00369
+<a name="l00370"></a>00370 <span class="keywordflow">if</span> (lda->insert_artist)
+<a name="l00371"></a>00371 <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="l00372"></a>00372
+<a name="l00373"></a>00373 <span class="keywordflow">if</span> (lda->insert_album)
+<a name="l00374"></a>00374 <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="l00375"></a>00375
+<a name="l00376"></a>00376 <span class="keywordflow">if</span> (lda->insert_genre)
+<a name="l00377"></a>00377 <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="l00378"></a>00378
+<a name="l00379"></a>00379 <span class="keywordflow">if</span> (lda->get_artist)
+<a name="l00380"></a>00380 <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="l00381"></a>00381
+<a name="l00382"></a>00382 <span class="keywordflow">if</span> (lda->get_album)
+<a name="l00383"></a>00383 <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="l00384"></a>00384
+<a name="l00385"></a>00385 <span class="keywordflow">if</span> (lda->get_genre)
+<a name="l00386"></a>00386 <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="l00387"></a>00387
+<a name="l00388"></a>00388 r = <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(&_cache, lda->db, lda);
+<a name="l00389"></a>00389 free(lda);
+<a name="l00390"></a>00390
+<a name="l00391"></a>00391 <span class="keywordflow">return</span> r;
+<a name="l00392"></a>00392 }
+<a name="l00393"></a>00393
+<a name="l00394"></a>00394 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00395"></a>00395 _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="l00396"></a>00396 {
+<a name="l00397"></a>00397 <span class="keywordtype">int</span> r, ret;
+<a name="l00398"></a>00398
+<a name="l00399"></a>00399 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="l00400"></a>00400 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00401"></a>00401 <span class="keywordflow">goto</span> done;
+<a name="l00402"></a>00402
+<a name="l00403"></a>00403 r = sqlite3_step(stmt);
+<a name="l00404"></a>00404 <span class="keywordflow">if</span> (r == SQLITE_DONE) {
+<a name="l00405"></a>00405 ret = 1;
+<a name="l00406"></a>00406 <span class="keywordflow">goto</span> done;
+<a name="l00407"></a>00407 }
+<a name="l00408"></a>00408
+<a name="l00409"></a>00409 <span class="keywordflow">if</span> (r != SQLITE_ROW) {
+<a name="l00410"></a>00410 fprintf(stderr, <span class="stringliteral">"ERROR: could not get id by name: %s\n"</span>,
+<a name="l00411"></a>00411 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00412"></a>00412 ret = -2;
+<a name="l00413"></a>00413 <span class="keywordflow">goto</span> done;
+<a name="l00414"></a>00414 }
+<a name="l00415"></a>00415
+<a name="l00416"></a>00416 *<span class="keywordtype">id</span> = sqlite3_column_int64(stmt, 0);
+<a name="l00417"></a>00417 ret = 0;
+<a name="l00418"></a>00418
+<a name="l00419"></a>00419 done:
+<a name="l00420"></a>00420 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00421"></a>00421
+<a name="l00422"></a>00422 <span class="keywordflow">return</span> ret;
+<a name="l00423"></a>00423
+<a name="l00424"></a>00424 }
+<a name="l00425"></a>00425 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00426"></a>00426 _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="l00427"></a>00427 {
+<a name="l00428"></a>00428 <span class="keywordtype">int</span> r, ret;
+<a name="l00429"></a>00429
+<a name="l00430"></a>00430 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="l00431"></a>00431 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00432"></a>00432 <span class="keywordflow">goto</span> done;
+<a name="l00433"></a>00433
+<a name="l00434"></a>00434 r = sqlite3_step(stmt);
+<a name="l00435"></a>00435 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00436"></a>00436 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert name: %s\n"</span>,
+<a name="l00437"></a>00437 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00438"></a>00438 ret = -2;
+<a name="l00439"></a>00439 <span class="keywordflow">goto</span> done;
+<a name="l00440"></a>00440 }
+<a name="l00441"></a>00441
+<a name="l00442"></a>00442 *<span class="keywordtype">id</span> = sqlite3_last_insert_rowid(sqlite3_db_handle(stmt));
+<a name="l00443"></a>00443 ret = 0;
+<a name="l00444"></a>00444
+<a name="l00445"></a>00445 done:
+<a name="l00446"></a>00446 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00447"></a>00447
+<a name="l00448"></a>00448 <span class="keywordflow">return</span> ret;
+<a name="l00449"></a>00449 }
+<a name="l00450"></a>00450
+<a name="l00451"></a>00451 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00452"></a>00452 _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="l00453"></a>00453 {
+<a name="l00454"></a>00454 <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="l00455"></a>00455 }
+<a name="l00456"></a>00456
+<a name="l00457"></a>00457 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00458"></a>00458 _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="l00459"></a>00459 {
+<a name="l00460"></a>00460 <span class="keywordtype">int</span> r;
+<a name="l00461"></a>00461
+<a name="l00462"></a>00462 <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="l00463"></a>00463 <span class="keywordflow">return</span> 1;
+<a name="l00464"></a>00464
+<a name="l00465"></a>00465 r =_db_get_artist(lda, info, artist_id);
+<a name="l00466"></a>00466 <span class="keywordflow">if</span> (r == 0)
+<a name="l00467"></a>00467 <span class="keywordflow">return</span> 0;
+<a name="l00468"></a>00468 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r < 0)
+<a name="l00469"></a>00469 <span class="keywordflow">return</span> -1;
+<a name="l00470"></a>00470
+<a name="l00471"></a>00471 <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="l00472"></a>00472 }
+<a name="l00473"></a>00473
+<a name="l00474"></a>00474 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00475"></a>00475 _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="l00476"></a>00476 {
+<a name="l00477"></a>00477 sqlite3_stmt *stmt;
+<a name="l00478"></a>00478 <span class="keywordtype">int</span> r, ret;
+<a name="l00479"></a>00479
+<a name="l00480"></a>00480 stmt = lda->get_album;
+<a name="l00481"></a>00481
+<a name="l00482"></a>00482 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="l00483"></a>00483 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00484"></a>00484 <span class="keywordflow">goto</span> done;
+<a name="l00485"></a>00485
+<a name="l00486"></a>00486 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 2, artist_id);
+<a name="l00487"></a>00487 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00488"></a>00488 <span class="keywordflow">goto</span> done;
+<a name="l00489"></a>00489
+<a name="l00490"></a>00490 r = sqlite3_step(stmt);
+<a name="l00491"></a>00491 <span class="keywordflow">if</span> (r == SQLITE_DONE) {
+<a name="l00492"></a>00492 ret = 1;
+<a name="l00493"></a>00493 <span class="keywordflow">goto</span> done;
+<a name="l00494"></a>00494 }
+<a name="l00495"></a>00495
+<a name="l00496"></a>00496 <span class="keywordflow">if</span> (r != SQLITE_ROW) {
+<a name="l00497"></a>00497 fprintf(stderr, <span class="stringliteral">"ERROR: could not get album from table: %s\n"</span>,
+<a name="l00498"></a>00498 sqlite3_errmsg(lda->db));
+<a name="l00499"></a>00499 ret = -2;
+<a name="l00500"></a>00500 <span class="keywordflow">goto</span> done;
+<a name="l00501"></a>00501 }
+<a name="l00502"></a>00502
+<a name="l00503"></a>00503 *album_id = sqlite3_column_int64(stmt, 0);
+<a name="l00504"></a>00504 ret = 0;
+<a name="l00505"></a>00505
+<a name="l00506"></a>00506 done:
+<a name="l00507"></a>00507 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00508"></a>00508
+<a name="l00509"></a>00509 <span class="keywordflow">return</span> ret;
+<a name="l00510"></a>00510
+<a name="l00511"></a>00511 }
+<a name="l00512"></a>00512
+<a name="l00513"></a>00513 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00514"></a>00514 _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)
+<a name="l00515"></a>00515 {
+<a name="l00516"></a>00516 <span class="keywordtype">int</span> r, ret, ret_artist;
+<a name="l00517"></a>00517 int64_t artist_id;
+<a name="l00518"></a>00518 sqlite3_stmt *stmt;
+<a name="l00519"></a>00519
+<a name="l00520"></a>00520 <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="l00521"></a>00521 <span class="keywordflow">return</span> 1;
+<a name="l00522"></a>00522
+<a name="l00523"></a>00523 ret_artist = _db_insert_artist(lda, info, &artist_id);
+<a name="l00524"></a>00524 <span class="keywordflow">if</span> (ret_artist < 0)
+<a name="l00525"></a>00525 <span class="keywordflow">return</span> -1;
+<a name="l00526"></a>00526
+<a name="l00527"></a>00527 r =_db_get_album(lda, info,
+<a name="l00528"></a>00528 (ret_artist == 0) ? &artist_id : NULL,
+<a name="l00529"></a>00529 album_id);
+<a name="l00530"></a>00530 <span class="keywordflow">if</span> (r == 0)
+<a name="l00531"></a>00531 <span class="keywordflow">return</span> 0;
+<a name="l00532"></a>00532 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r < 0)
+<a name="l00533"></a>00533 <span class="keywordflow">return</span> -1;
+<a name="l00534"></a>00534
+<a name="l00535"></a>00535 stmt = lda->insert_album;
+<a name="l00536"></a>00536 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 1,
+<a name="l00537"></a>00537 (ret_artist == 0) ? &artist_id : NULL);
+<a name="l00538"></a>00538 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00539"></a>00539 <span class="keywordflow">goto</span> done;
+<a name="l00540"></a>00540
+<a name="l00541"></a>00541 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="l00542"></a>00542 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00543"></a>00543 <span class="keywordflow">goto</span> done;
+<a name="l00544"></a>00544
+<a name="l00545"></a>00545 r = sqlite3_step(stmt);
+<a name="l00546"></a>00546 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00547"></a>00547 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert audio album: %s\n"</span>,
+<a name="l00548"></a>00548 sqlite3_errmsg(lda->db));
+<a name="l00549"></a>00549 ret = -3;
+<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_last_insert_rowid(lda->db);
+<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 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00563"></a>00563 _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="l00564"></a>00564 {
+<a name="l00565"></a>00565 <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="l00566"></a>00566 }
+<a name="l00567"></a>00567
+<a name="l00568"></a>00568 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00569"></a>00569 _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="l00570"></a>00570 {
+<a name="l00571"></a>00571 <span class="keywordtype">int</span> r;
+<a name="l00572"></a>00572
+<a name="l00573"></a>00573 <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="l00574"></a>00574 <span class="keywordflow">return</span> 1;
+<a name="l00575"></a>00575
+<a name="l00576"></a>00576 r =_db_get_genre(lda, info, genre_id);
+<a name="l00577"></a>00577 <span class="keywordflow">if</span> (r == 0)
+<a name="l00578"></a>00578 <span class="keywordflow">return</span> 0;
+<a name="l00579"></a>00579 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r < 0)
+<a name="l00580"></a>00580 <span class="keywordflow">return</span> -1;
+<a name="l00581"></a>00581
+<a name="l00582"></a>00582 <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="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 _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 *genre_id)
+<a name="l00587"></a>00587 {
+<a name="l00588"></a>00588 sqlite3_stmt *stmt;
+<a name="l00589"></a>00589 <span class="keywordtype">int</span> r, ret;
+<a name="l00590"></a>00590
+<a name="l00591"></a>00591 stmt = lda->insert_audio;
+<a name="l00592"></a>00592 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="l00593"></a>00593 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00594"></a>00594 <span class="keywordflow">goto</span> done;
+<a name="l00595"></a>00595
+<a name="l00596"></a>00596 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="l00597"></a>00597 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00598"></a>00598 <span class="keywordflow">goto</span> done;
+<a name="l00599"></a>00599
+<a name="l00600"></a>00600 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 3, album_id);
+<a name="l00601"></a>00601 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00602"></a>00602 <span class="keywordflow">goto</span> done;
+<a name="l00603"></a>00603
+<a name="l00604"></a>00604 ret = <a class="code" href="lightmediascanner__db__common_8c.html#2a0a5d3a27fdee8508b2b0cc59979417">lms_db_bind_int64_or_null</a>(stmt, 4, genre_id);
+<a name="l00605"></a>00605 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00606"></a>00606 <span class="keywordflow">goto</span> done;
+<a name="l00607"></a>00607
+<a name="l00608"></a>00608 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 5, info-><a class="code" href="structlms__audio__info.html#d372f08ada955f75be8f218d90093242">trackno</a>);
+<a name="l00609"></a>00609 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00610"></a>00610 <span class="keywordflow">goto</span> done;
+<a name="l00611"></a>00611
+<a name="l00612"></a>00612 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#932e73ccd8ff946831930be65d1ba2d2">rating</a>);
+<a name="l00613"></a>00613 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00614"></a>00614 <span class="keywordflow">goto</span> done;
+<a name="l00615"></a>00615
+<a name="l00616"></a>00616 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#7197e471d313274c4e361b2ff9e60e8a">playcnt</a>);
+<a name="l00617"></a>00617 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00618"></a>00618 <span class="keywordflow">goto</span> done;
+<a name="l00619"></a>00619
+<a name="l00620"></a>00620 r = sqlite3_step(stmt);
+<a name="l00621"></a>00621 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00622"></a>00622 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert audio info: %s\n"</span>,
+<a name="l00623"></a>00623 sqlite3_errmsg(lda->db));
+<a name="l00624"></a>00624 ret = -8;
+<a name="l00625"></a>00625 <span class="keywordflow">goto</span> done;
+<a name="l00626"></a>00626 }
+<a name="l00627"></a>00627
+<a name="l00628"></a>00628 ret = 0;
+<a name="l00629"></a>00629
+<a name="l00630"></a>00630 done:
+<a name="l00631"></a>00631 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00632"></a>00632
+<a name="l00633"></a>00633 <span class="keywordflow">return</span> ret;
+<a name="l00634"></a>00634 }
+<a name="l00635"></a>00635
+<a name="l00647"></a>00647 <span class="keywordtype">int</span>
+<a name="l00648"></a><a class="code" href="lightmediascanner__db__audio_8c.html#334b8c49f8dbf76024ee6b1d69f56c8c">00648</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="l00649"></a>00649 {
+<a name="l00650"></a>00650 int64_t album_id, genre_id;
+<a name="l00651"></a>00651 <span class="keywordtype">int</span> ret_album, ret_genre;
+<a name="l00652"></a>00652
+<a name="l00653"></a>00653 <span class="keywordflow">if</span> (!lda)
+<a name="l00654"></a>00654 <span class="keywordflow">return</span> -1;
+<a name="l00655"></a>00655 <span class="keywordflow">if</span> (!info)
+<a name="l00656"></a>00656 <span class="keywordflow">return</span> -2;
+<a name="l00657"></a>00657 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__audio__info.html#b59ffe210521786be5fe579167b24bc4">id</a> < 1)
+<a name="l00658"></a>00658 <span class="keywordflow">return</span> -3;
+<a name="l00659"></a>00659
+<a name="l00660"></a>00660 ret_album = _db_insert_album(lda, info, &album_id);
+<a name="l00661"></a>00661 <span class="keywordflow">if</span> (ret_album < 0)
+<a name="l00662"></a>00662 <span class="keywordflow">return</span> -4;
+<a name="l00663"></a>00663
+<a name="l00664"></a>00664 ret_genre = _db_insert_genre(lda, info, &genre_id);
+<a name="l00665"></a>00665 <span class="keywordflow">if</span> (ret_genre < 0)
+<a name="l00666"></a>00666 <span class="keywordflow">return</span> -5;
+<a name="l00667"></a>00667
+<a name="l00668"></a>00668 <span class="keywordflow">return</span> _db_insert_audio(lda, info,
+<a name="l00669"></a>00669 (ret_album == 0) ? &album_id : NULL,
+<a name="l00670"></a>00670 (ret_genre == 0) ? &genre_id : NULL);
+<a name="l00671"></a>00671 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_db_audio.c:<p><center><img src="lightmediascanner__db__audio_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_db_audio.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db_audio.c_map">
+<area shape="rect" href="lightmediascanner__db_8h.html" title="lightmediascanner_db.h" alt="" coords="297,107,447,133"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="276,56,468,83"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="519,107,687,133"><area shape="rect" href="lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="524,157,681,184"><area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="776,107,904,133"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="737,157,943,184"></map>
+
+<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 width="100%"> 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#l00204">204</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.
+</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 width="100%"></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#l00648">648</a> of file <a class="el" href="lightmediascanner__db__audio_8c-source.html">lightmediascanner_db_audio.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db_8h-source.html#l00087">lms_audio_info::id</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db_8h.html" title="lightmediascanner_db.h" alt="" coords="297,107,447,133">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="276,56,468,83">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="519,107,687,133">
+<area shape="rect" href="$lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="524,157,681,184">
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="776,107,904,133">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="737,157,943,184">
--- /dev/null
+4c77f05e70422b3473612da15f99cfc5
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include <string.h></span>
+<a name="l00005"></a>00005
+<a name="l00006"></a>00006 <span class="preprocessor">#if SQLITE_VERSION_NUMBER < 3003009</span>
+<a name="l00007"></a>00007 <span class="preprocessor"></span><span class="keywordtype">int</span>
+<a name="l00008"></a><a class="code" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405">00008</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="l00009"></a>00009 {
+<a name="l00010"></a>00010 <span class="keywordflow">return</span> sqlite3_prepare(db, sql, len, stmt, tail);
+<a name="l00011"></a>00011 }
+<a name="l00012"></a>00012 <span class="preprocessor">#endif </span><span class="comment">/* SQLITE_VERSION_NUMBER < 3003009 */</span>
+<a name="l00013"></a>00013
+<a name="l00014"></a>00014 <span class="preprocessor">#if SQLITE_VERSION_NUMBER < 3003007</span>
+<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="keywordtype">int</span>
+<a name="l00016"></a><a class="code" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">00016</a> <a class="code" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">sqlite3_clear_bindings</a>(sqlite3_stmt *stmt)
+<a name="l00017"></a>00017 {
+<a name="l00018"></a>00018 <span class="keywordtype">int</span> i, last;
+<a name="l00019"></a>00019 <span class="keywordtype">int</span> rc;
+<a name="l00020"></a>00020
+<a name="l00021"></a>00021 rc = SQLITE_OK;
+<a name="l00022"></a>00022 last = sqlite3_bind_parameter_count(stmt);
+<a name="l00023"></a>00023 <span class="keywordflow">for</span>(i = 1; rc == SQLITE_OK && i <= last; i++) {
+<a name="l00024"></a>00024 rc = sqlite3_bind_null(stmt, i);
+<a name="l00025"></a>00025 }
+<a name="l00026"></a>00026 <span class="keywordflow">return</span> rc;
+<a name="l00027"></a>00027 }
+<a name="l00028"></a>00028 <span class="preprocessor">#endif </span><span class="comment">/* SQLITE_VERSION_NUMBER < 3003007 */</span>
+<a name="l00029"></a>00029
+<a name="l00030"></a>00030 <span class="preprocessor">#if SQLITE_VERSION_NUMBER < 3003008</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">/* Until 3.3.8 it doesn't support CREATE TRIGGER IF NOT EXISTS, so</span>
+<a name="l00032"></a>00032 <span class="comment"> * just ignore errors :-(</span>
+<a name="l00033"></a>00033 <span class="comment"> */</span>
+<a name="l00034"></a>00034 <span class="keywordtype">int</span>
+<a name="l00035"></a><a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">00035</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="l00036"></a>00036 {
+<a name="l00037"></a>00037 <span class="keywordtype">char</span> *errmsg, *query;
+<a name="l00038"></a>00038 <span class="keywordtype">int</span> r, sql_len, prefix_len;
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040 prefix_len = <span class="keyword">sizeof</span>(<span class="stringliteral">"CREATE TRIGGER "</span>) - 1;
+<a name="l00041"></a>00041 sql_len = strlen(sql);
+<a name="l00042"></a>00042 query = malloc((prefix_len + sql_len + 1) * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
+<a name="l00043"></a>00043 <span class="keywordflow">if</span> (!query)
+<a name="l00044"></a>00044 <span class="keywordflow">return</span> -1;
+<a name="l00045"></a>00045
+<a name="l00046"></a>00046 memcpy(query, <span class="stringliteral">"CREATE TRIGGER "</span>, prefix_len);
+<a name="l00047"></a>00047 memcpy(query + prefix_len, sql, sql_len + 1);
+<a name="l00048"></a>00048 r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
+<a name="l00049"></a>00049 free(query);
+<a name="l00050"></a>00050 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00051"></a>00051 sqlite3_free(errmsg);
+<a name="l00052"></a>00052 <span class="keywordflow">return</span> 0;
+<a name="l00053"></a>00053 }
+<a name="l00054"></a>00054 <span class="preprocessor">#else </span><span class="comment">/* SQLITE_VERSION_NUMBER < 3003008 */</span>
+<a name="l00055"></a>00055 <span class="keywordtype">int</span>
+<a name="l00056"></a>00056 <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="l00057"></a>00057 {
+<a name="l00058"></a>00058 <span class="keywordtype">char</span> *errmsg, *query;
+<a name="l00059"></a>00059 <span class="keywordtype">int</span> r, sql_len, prefix_len;
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061 prefix_len = <span class="keyword">sizeof</span>(<span class="stringliteral">"CREATE TRIGGER IF NOT EXISTS "</span>) - 1;
+<a name="l00062"></a>00062 sql_len = strlen(sql);
+<a name="l00063"></a>00063 query = malloc((prefix_len + sql_len + 1) * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
+<a name="l00064"></a>00064 <span class="keywordflow">if</span> (!query)
+<a name="l00065"></a>00065 <span class="keywordflow">return</span> -1;
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 memcpy(query, <span class="stringliteral">"CREATE TRIGGER IF NOT EXISTS "</span>, prefix_len);
+<a name="l00068"></a>00068 memcpy(query + prefix_len, sql, sql_len + 1);
+<a name="l00069"></a>00069 r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
+<a name="l00070"></a>00070 free(query);
+<a name="l00071"></a>00071 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00072"></a>00072 fprintf(stderr, <span class="stringliteral">"ERROR: could not create trigger: %s\n"</span>, errmsg);
+<a name="l00073"></a>00073 sqlite3_free(errmsg);
+<a name="l00074"></a>00074 <span class="keywordflow">return</span> -2;
+<a name="l00075"></a>00075 }
+<a name="l00076"></a>00076 <span class="keywordflow">return</span> 0;
+<a name="l00077"></a>00077 }
+<a name="l00078"></a>00078 <span class="preprocessor">#endif </span><span class="comment">/* SQLITE_VERSION_NUMBER < 3003008 */</span>
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080 sqlite3_stmt *
+<a name="l00081"></a><a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">00081</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="l00082"></a>00082 {
+<a name="l00083"></a>00083 sqlite3_stmt *stmt;
+<a name="l00084"></a>00084
+<a name="l00085"></a>00085 <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="l00086"></a>00086 fprintf(stderr, <span class="stringliteral">"ERROR: could not prepare \"%s\": %s\n"</span>, sql,
+<a name="l00087"></a>00087 sqlite3_errmsg(db));
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keywordflow">return</span> stmt;
+<a name="l00090"></a>00090 }
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 <span class="keywordtype">int</span>
+<a name="l00093"></a><a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">00093</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="l00094"></a>00094 {
+<a name="l00095"></a>00095 <span class="keywordtype">int</span> r;
+<a name="l00096"></a>00096
+<a name="l00097"></a>00097 r = sqlite3_finalize(stmt);
+<a name="l00098"></a>00098 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00099"></a>00099 fprintf(stderr, <span class="stringliteral">"ERROR: could not finalize %s statement: #%d\n"</span>,
+<a name="l00100"></a>00100 name, r);
+<a name="l00101"></a>00101 <span class="keywordflow">return</span> -1;
+<a name="l00102"></a>00102 }
+<a name="l00103"></a>00103
+<a name="l00104"></a>00104 <span class="keywordflow">return</span> 0;
+<a name="l00105"></a>00105 }
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <span class="keywordtype">int</span>
+<a name="l00108"></a><a class="code" href="lightmediascanner__db__private_8h.html#ee78f418f0f3c9ead3023b1453c63556">00108</a> <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(sqlite3_stmt *stmt)
+<a name="l00109"></a>00109 {
+<a name="l00110"></a>00110 <span class="keywordtype">int</span> r, ret;
+<a name="l00111"></a>00111
+<a name="l00112"></a>00112 ret = r = sqlite3_reset(stmt);
+<a name="l00113"></a>00113 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00114"></a>00114 fprintf(stderr, <span class="stringliteral">"ERROR: could not reset SQL statement: #%d\n"</span>, r);
+<a name="l00115"></a>00115
+<a name="l00116"></a>00116 r = <a class="code" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00">sqlite3_clear_bindings</a>(stmt);
+<a name="l00117"></a>00117 ret += r;
+<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 clear SQL: #%d\n"</span>, r);
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 <span class="keywordflow">return</span> ret;
+<a name="l00122"></a>00122 }
+<a name="l00123"></a>00123
+<a name="l00124"></a>00124 <span class="keywordtype">int</span>
+<a name="l00125"></a><a class="code" href="lightmediascanner__db__private_8h.html#14d56e02624ad6130bc59ae9bb950ac3">00125</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="l00126"></a>00126 {
+<a name="l00127"></a>00127 <span class="keywordtype">int</span> r;
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 <span class="keywordflow">if</span> (text)
+<a name="l00130"></a>00130 r = sqlite3_bind_text(stmt, col, text, len, SQLITE_STATIC);
+<a name="l00131"></a>00131 <span class="keywordflow">else</span>
+<a name="l00132"></a>00132 r = sqlite3_bind_null(stmt, col);
+<a name="l00133"></a>00133
+<a name="l00134"></a>00134 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00135"></a>00135 <span class="keywordflow">return</span> 0;
+<a name="l00136"></a>00136 <span class="keywordflow">else</span> {
+<a name="l00137"></a>00137 sqlite3 *db;
+<a name="l00138"></a>00138 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00139"></a>00139
+<a name="l00140"></a>00140 db = sqlite3_db_handle(stmt);
+<a name="l00141"></a>00141 err = sqlite3_errmsg(db);
+<a name="l00142"></a>00142 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00143"></a>00143 <span class="keywordflow">return</span> -col;
+<a name="l00144"></a>00144 }
+<a name="l00145"></a>00145 }
+<a name="l00146"></a>00146
+<a name="l00147"></a>00147 <span class="keywordtype">int</span>
+<a name="l00148"></a><a class="code" href="lightmediascanner__db__private_8h.html#7fd514b582578c18a25cdbf6c561243c">00148</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="l00149"></a>00149 {
+<a name="l00150"></a>00150 <span class="keywordtype">int</span> r;
+<a name="l00151"></a>00151
+<a name="l00152"></a>00152 <span class="keywordflow">if</span> (blob)
+<a name="l00153"></a>00153 r = sqlite3_bind_blob(stmt, col, blob, len, SQLITE_STATIC);
+<a name="l00154"></a>00154 <span class="keywordflow">else</span>
+<a name="l00155"></a>00155 r = sqlite3_bind_null(stmt, col);
+<a name="l00156"></a>00156
+<a name="l00157"></a>00157 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00158"></a>00158 <span class="keywordflow">return</span> 0;
+<a name="l00159"></a>00159 <span class="keywordflow">else</span> {
+<a name="l00160"></a>00160 sqlite3 *db;
+<a name="l00161"></a>00161 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00162"></a>00162
+<a name="l00163"></a>00163 db = sqlite3_db_handle(stmt);
+<a name="l00164"></a>00164 err = sqlite3_errmsg(db);
+<a name="l00165"></a>00165 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00166"></a>00166 <span class="keywordflow">return</span> -col;
+<a name="l00167"></a>00167 }
+<a name="l00168"></a>00168 }
+<a name="l00169"></a>00169
+<a name="l00170"></a>00170 <span class="keywordtype">int</span>
+<a name="l00171"></a><a class="code" href="lightmediascanner__db__private_8h.html#bbb18d7cc44f7e363c0f240849d72c31">00171</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="l00172"></a>00172 {
+<a name="l00173"></a>00173 <span class="keywordtype">int</span> r;
+<a name="l00174"></a>00174
+<a name="l00175"></a>00175 r = sqlite3_bind_int64(stmt, col, value);
+<a name="l00176"></a>00176 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00177"></a>00177 <span class="keywordflow">return</span> 0;
+<a name="l00178"></a>00178 <span class="keywordflow">else</span> {
+<a name="l00179"></a>00179 sqlite3 *db;
+<a name="l00180"></a>00180 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00181"></a>00181
+<a name="l00182"></a>00182 db = sqlite3_db_handle(stmt);
+<a name="l00183"></a>00183 err = sqlite3_errmsg(db);
+<a name="l00184"></a>00184 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00185"></a>00185 <span class="keywordflow">return</span> -col;
+<a name="l00186"></a>00186 }
+<a name="l00187"></a>00187 }
+<a name="l00188"></a>00188
+<a name="l00189"></a>00189 <span class="keywordtype">int</span>
+<a name="l00190"></a><a class="code" href="lightmediascanner__db__private_8h.html#cd7006f0271b9a47937dc2d2ae5480fe">00190</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="l00191"></a>00191 {
+<a name="l00192"></a>00192 <span class="keywordtype">int</span> r;
+<a name="l00193"></a>00193
+<a name="l00194"></a>00194 <span class="keywordflow">if</span> (p_value)
+<a name="l00195"></a>00195 r = sqlite3_bind_int64(stmt, col, *p_value);
+<a name="l00196"></a>00196 <span class="keywordflow">else</span>
+<a name="l00197"></a>00197 r = sqlite3_bind_null(stmt, col);
+<a name="l00198"></a>00198 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00199"></a>00199 <span class="keywordflow">return</span> 0;
+<a name="l00200"></a>00200 <span class="keywordflow">else</span> {
+<a name="l00201"></a>00201 sqlite3 *db;
+<a name="l00202"></a>00202 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00203"></a>00203
+<a name="l00204"></a>00204 db = sqlite3_db_handle(stmt);
+<a name="l00205"></a>00205 err = sqlite3_errmsg(db);
+<a name="l00206"></a>00206 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00207"></a>00207 <span class="keywordflow">return</span> -col;
+<a name="l00208"></a>00208 }
+<a name="l00209"></a>00209 }
+<a name="l00210"></a>00210
+<a name="l00211"></a>00211 <span class="keywordtype">int</span>
+<a name="l00212"></a><a class="code" href="lightmediascanner__db__private_8h.html#37815f859116b46089bea4ba84bb23d2">00212</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="l00213"></a>00213 {
+<a name="l00214"></a>00214 <span class="keywordtype">int</span> r;
+<a name="l00215"></a>00215
+<a name="l00216"></a>00216 r = sqlite3_bind_int(stmt, col, value);
+<a name="l00217"></a>00217 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00218"></a>00218 <span class="keywordflow">return</span> 0;
+<a name="l00219"></a>00219 <span class="keywordflow">else</span> {
+<a name="l00220"></a>00220 sqlite3 *db;
+<a name="l00221"></a>00221 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00222"></a>00222
+<a name="l00223"></a>00223 db = sqlite3_db_handle(stmt);
+<a name="l00224"></a>00224 err = sqlite3_errmsg(db);
+<a name="l00225"></a>00225 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00226"></a>00226 <span class="keywordflow">return</span> -col;
+<a name="l00227"></a>00227 }
+<a name="l00228"></a>00228 }
+<a name="l00229"></a>00229
+<a name="l00230"></a>00230 <span class="keywordtype">int</span>
+<a name="l00231"></a><a class="code" href="lightmediascanner__db__private_8h.html#9e78297037179998924354e73ca69349">00231</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="l00232"></a>00232 {
+<a name="l00233"></a>00233 <span class="keywordtype">int</span> r;
+<a name="l00234"></a>00234
+<a name="l00235"></a>00235 r = sqlite3_bind_double(stmt, col, value);
+<a name="l00236"></a>00236 <span class="keywordflow">if</span> (r == SQLITE_OK)
+<a name="l00237"></a>00237 <span class="keywordflow">return</span> 0;
+<a name="l00238"></a>00238 <span class="keywordflow">else</span> {
+<a name="l00239"></a>00239 sqlite3 *db;
+<a name="l00240"></a>00240 <span class="keyword">const</span> <span class="keywordtype">char</span> *err;
+<a name="l00241"></a>00241
+<a name="l00242"></a>00242 db = sqlite3_db_handle(stmt);
+<a name="l00243"></a>00243 err = sqlite3_errmsg(db);
+<a name="l00244"></a>00244 fprintf(stderr, <span class="stringliteral">"ERROR: could not bind SQL value %d: %s\n"</span>, col, err);
+<a name="l00245"></a>00245 <span class="keywordflow">return</span> -col;
+<a name="l00246"></a>00246 }
+<a name="l00247"></a>00247 }
+<a name="l00248"></a>00248
+<a name="l00249"></a>00249 <span class="keywordtype">int</span>
+<a name="l00250"></a><a class="code" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">00250</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="l00251"></a>00251 {
+<a name="l00252"></a>00252 <span class="keywordtype">int</span> r, version;
+<a name="l00253"></a>00253 sqlite3_stmt *stmt;
+<a name="l00254"></a>00254
+<a name="l00255"></a>00255 stmt = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00256"></a>00256 <span class="stringliteral">"SELECT version FROM lms_internal WHERE tab = ?"</span>);
+<a name="l00257"></a>00257 <span class="keywordflow">if</span> (!stmt)
+<a name="l00258"></a>00258 <span class="keywordflow">return</span> -1;
+<a name="l00259"></a>00259
+<a name="l00260"></a>00260 <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="l00261"></a>00261 version = -1;
+<a name="l00262"></a>00262 <span class="keywordflow">goto</span> done;
+<a name="l00263"></a>00263 }
+<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 version = 0;
+<a name="l00268"></a>00268 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == SQLITE_ROW)
+<a name="l00269"></a>00269 version = sqlite3_column_int(stmt, 1);
+<a name="l00270"></a>00270 <span class="keywordflow">else</span> {
+<a name="l00271"></a>00271 version = -1;
+<a name="l00272"></a>00272 fprintf(stderr, <span class="stringliteral">"ERROR: could not get table '%s' version: %s\n"</span>,
+<a name="l00273"></a>00273 table, sqlite3_errmsg(db));
+<a name="l00274"></a>00274 }
+<a name="l00275"></a>00275
+<a name="l00276"></a>00276 done:
+<a name="l00277"></a>00277 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00278"></a>00278 <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="l00279"></a>00279
+<a name="l00280"></a>00280 <span class="keywordflow">return</span> version;
+<a name="l00281"></a>00281 }
+<a name="l00282"></a>00282
+<a name="l00283"></a>00283 <span class="keywordtype">int</span>
+<a name="l00284"></a><a class="code" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">00284</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="l00285"></a>00285 {
+<a name="l00286"></a>00286 <span class="keywordtype">int</span> r, ret;
+<a name="l00287"></a>00287 sqlite3_stmt *stmt;
+<a name="l00288"></a>00288
+<a name="l00289"></a>00289 stmt = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00290"></a>00290 <span class="stringliteral">"INSERT OR REPLACE INTO lms_internal (tab, version) VALUES (?, ?)"</span>);
+<a name="l00291"></a>00291 <span class="keywordflow">if</span> (!stmt)
+<a name="l00292"></a>00292 <span class="keywordflow">return</span> -1;
+<a name="l00293"></a>00293
+<a name="l00294"></a>00294 ret = <a class="code" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888">lms_db_bind_text</a>(stmt, 1, table, -1);
+<a name="l00295"></a>00295 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00296"></a>00296 <span class="keywordflow">goto</span> done;
+<a name="l00297"></a>00297
+<a name="l00298"></a>00298 ret = <a class="code" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 2, version);
+<a name="l00299"></a>00299 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00300"></a>00300 <span class="keywordflow">goto</span> done;
+<a name="l00301"></a>00301
+<a name="l00302"></a>00302 r = sqlite3_step(stmt);
+<a name="l00303"></a>00303 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00304"></a>00304 ret = -1;
+<a name="l00305"></a>00305 fprintf(stderr, <span class="stringliteral">"ERROR: could not set table '%s' version: %s\n"</span>,
+<a name="l00306"></a>00306 table, sqlite3_errmsg(db));
+<a name="l00307"></a>00307 }
+<a name="l00308"></a>00308
+<a name="l00309"></a>00309 done:
+<a name="l00310"></a>00310 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00311"></a>00311 <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="l00312"></a>00312
+<a name="l00313"></a>00313 <span class="keywordflow">return</span> ret;
+<a name="l00314"></a>00314 }
+<a name="l00315"></a>00315
+<a name="l00316"></a>00316 <span class="keywordtype">int</span>
+<a name="l00317"></a><a class="code" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558">00317</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#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> *updaters)
+<a name="l00318"></a>00318 {
+<a name="l00319"></a>00319 <span class="keywordflow">if</span> (current_version == last_version)
+<a name="l00320"></a>00320 <span class="keywordflow">return</span> 0;
+<a name="l00321"></a>00321 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (current_version > last_version) {
+<a name="l00322"></a>00322 fprintf(stderr,
+<a name="l00323"></a>00323 <span class="stringliteral">"WARNING: current version (%d) of table '%s' is greater than "</span>
+<a name="l00324"></a>00324 <span class="stringliteral">"last known version (%d), no updates will be made.\n"</span>,
+<a name="l00325"></a>00325 current_version, table, last_version);
+<a name="l00326"></a>00326 <span class="keywordflow">return</span> 0;
+<a name="l00327"></a>00327 }
+<a name="l00328"></a>00328
+<a name="l00329"></a>00329 <span class="keywordflow">for</span> (; current_version < last_version; current_version++) {
+<a name="l00330"></a>00330 <span class="keywordtype">int</span> r, is_last_run;
+<a name="l00331"></a>00331
+<a name="l00332"></a>00332 is_last_run = current_version == (last_version - 1);
+<a name="l00333"></a>00333 r = updaters[current_version](db, table, current_version, is_last_run);
+<a name="l00334"></a>00334 <span class="keywordflow">if</span> (r != 0) {
+<a name="l00335"></a>00335 fprintf(stderr,
+<a name="l00336"></a>00336 <span class="stringliteral">"ERROR: could not update table '%s' from version %d->%d\n"</span>,
+<a name="l00337"></a>00337 table, current_version, current_version + 1);
+<a name="l00338"></a>00338 <span class="keywordflow">return</span> r;
+<a name="l00339"></a>00339 }
+<a name="l00340"></a>00340 <a class="code" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7">lms_db_table_version_set</a>(db, table, current_version + 1);
+<a name="l00341"></a>00341 }
+<a name="l00342"></a>00342
+<a name="l00343"></a>00343 <span class="keywordflow">return</span> 0;
+<a name="l00344"></a>00344 }
+<a name="l00345"></a>00345
+<a name="l00346"></a>00346 <span class="keywordtype">int</span>
+<a name="l00347"></a><a class="code" href="lightmediascanner__db__common_8c.html#86b766535f9dc7895da7d0f606201700">00347</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#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> *updaters)
+<a name="l00348"></a>00348 {
+<a name="l00349"></a>00349 <span class="keywordtype">int</span> current_version;
+<a name="l00350"></a>00350
+<a name="l00351"></a>00351 current_version = <a class="code" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd">lms_db_table_version_get</a>(db, table);
+<a name="l00352"></a>00352 <span class="keywordflow">if</span> (current_version < 0)
+<a name="l00353"></a>00353 <span class="keywordflow">return</span> -1;
+<a name="l00354"></a>00354 <span class="keywordflow">else</span>
+<a name="l00355"></a>00355 <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="l00356"></a>00356 updaters);
+<a name="l00357"></a>00357 }
+<a name="l00358"></a>00358
+<a name="l00359"></a>00359 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00360"></a>00360 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="l00361"></a>00361 {
+<a name="l00362"></a>00362 <span class="keywordtype">int</span> i;
+<a name="l00363"></a>00363
+<a name="l00364"></a>00364 <span class="keywordflow">for</span> (i = 0; i < cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a>; i++)
+<a name="l00365"></a>00365 <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="l00366"></a>00366 <span class="keywordflow">return</span> i;
+<a name="l00367"></a>00367
+<a name="l00368"></a>00368 <span class="keywordflow">return</span> -1;
+<a name="l00369"></a>00369 }
+<a name="l00370"></a>00370
+<a name="l00371"></a>00371 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00372"></a>00372 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="l00373"></a>00373 {
+<a name="l00374"></a>00374 cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> = new_size;
+<a name="l00375"></a>00375 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="l00376"></a>00376 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="l00377"></a>00377 <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="l00378"></a>00378 perror(<span class="stringliteral">"realloc"</span>);
+<a name="l00379"></a>00379 cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> = 0;
+<a name="l00380"></a>00380 <span class="keywordflow">return</span> -1;
+<a name="l00381"></a>00381 }
+<a name="l00382"></a>00382
+<a name="l00383"></a>00383 <span class="keywordflow">return</span> 0;
+<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__db__common_8c.html#19b0458b9d7b76370588156e931a9c04">00387</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="l00388"></a>00388 {
+<a name="l00389"></a>00389 <span class="keyword">struct </span><a class="code" href="structlms__db__cache__entry.html">lms_db_cache_entry</a> *e;
+<a name="l00390"></a>00390 <span class="keywordtype">int</span> idx;
+<a name="l00391"></a>00391
+<a name="l00392"></a>00392 idx = lms_db_cache_find_db(cache, db);
+<a name="l00393"></a>00393 <span class="keywordflow">if</span> (idx >= 0) {
+<a name="l00394"></a>00394 e = cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a> + idx;
+<a name="l00395"></a>00395 <span class="keywordflow">if</span> (e-><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a> == data)
+<a name="l00396"></a>00396 <span class="keywordflow">return</span> 0;
+<a name="l00397"></a>00397 <span class="keywordflow">else</span> {
+<a name="l00398"></a>00398 fprintf(stderr,
+<a name="l00399"></a>00399 <span class="stringliteral">"ERROR: cache %p for db %p has another data registered"</span>
+<a name="l00400"></a>00400 <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="l00401"></a>00401 <span class="keywordflow">return</span> -1;
+<a name="l00402"></a>00402 }
+<a name="l00403"></a>00403 }
+<a name="l00404"></a>00404
+<a name="l00405"></a>00405 idx = cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a>;
+<a name="l00406"></a>00406 <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="l00407"></a>00407 <span class="keywordflow">return</span> -2;
+<a name="l00408"></a>00408 }
+<a name="l00409"></a>00409
+<a name="l00410"></a>00410 e = cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a> + idx;
+<a name="l00411"></a>00411 e-><a class="code" href="structlms__db__cache__entry.html#01aadf6d9a8161696019d39566b15760">db</a> = db;
+<a name="l00412"></a>00412 e-><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a> = data;
+<a name="l00413"></a>00413 <span class="keywordflow">return</span> 0;
+<a name="l00414"></a>00414 }
+<a name="l00415"></a>00415
+<a name="l00416"></a>00416 <span class="keywordtype">int</span>
+<a name="l00417"></a><a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">00417</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="l00418"></a>00418 {
+<a name="l00419"></a>00419 <span class="keywordtype">int</span> idx;
+<a name="l00420"></a>00420 <span class="keyword">struct </span><a class="code" href="structlms__db__cache__entry.html">lms_db_cache_entry</a> *e;
+<a name="l00421"></a>00421
+<a name="l00422"></a>00422 idx = lms_db_cache_find_db(cache, db);
+<a name="l00423"></a>00423 <span class="keywordflow">if</span> (idx < 0) {
+<a name="l00424"></a>00424 fprintf(stderr, <span class="stringliteral">"ERROR: no db %p found in cache %p\n"</span>, db, cache);
+<a name="l00425"></a>00425 <span class="keywordflow">return</span> -1;
+<a name="l00426"></a>00426 }
+<a name="l00427"></a>00427
+<a name="l00428"></a>00428 e = cache-><a class="code" href="structlms__db__cache.html#0056bfe95b38863dc9b067d699230690">entries</a> + idx;
+<a name="l00429"></a>00429 <span class="keywordflow">if</span> (e-><a class="code" href="structlms__db__cache__entry.html#53488063740ff72c830be3103e7150fe">data</a> != data) {
+<a name="l00430"></a>00430 fprintf(stderr, <span class="stringliteral">"ERROR: data mismatch in request to delete from cache: "</span>
+<a name="l00431"></a>00431 <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="l00432"></a>00432 <span class="keywordflow">return</span> -2;
+<a name="l00433"></a>00433 }
+<a name="l00434"></a>00434
+<a name="l00435"></a>00435 <span class="keywordflow">for</span> (; idx < cache-><a class="code" href="structlms__db__cache.html#b325e01e42fd3b0f11d52328522c6414">size</a> - 1; idx++)
+<a name="l00436"></a>00436 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="l00437"></a>00437
+<a name="l00438"></a>00438 <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="l00439"></a>00439 }
+<a name="l00440"></a>00440
+<a name="l00441"></a>00441 <span class="keywordtype">int</span>
+<a name="l00442"></a><a class="code" href="lightmediascanner__db__common_8c.html#e7a672fa5760bae1a669c737648fe7d3">00442</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="l00443"></a>00443 {
+<a name="l00444"></a>00444 <span class="keywordtype">int</span> idx;
+<a name="l00445"></a>00445
+<a name="l00446"></a>00446 idx = lms_db_cache_find_db(cache, db);
+<a name="l00447"></a>00447 <span class="keywordflow">if</span> (idx < 0)
+<a name="l00448"></a>00448 <span class="keywordflow">return</span> -1;
+<a name="l00449"></a>00449
+<a name="l00450"></a>00450 *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="l00451"></a>00451 <span class="keywordflow">return</span> 0;
+<a name="l00452"></a>00452 }
+<a name="l00453"></a>00453
+<a name="l00454"></a>00454 <span class="keywordtype">int</span>
+<a name="l00455"></a><a class="code" href="lightmediascanner__db__private_8h.html#13ca09c885535a2968e707120e935268">00455</a> <a class="code" href="lightmediascanner__db__common_8c.html#3798a46baaedc4d466879865456acc94">lms_db_create_core_tables_if_required</a>(sqlite3 *db)
+<a name="l00456"></a>00456 {
+<a name="l00457"></a>00457 <span class="keywordtype">char</span> *errmsg;
+<a name="l00458"></a>00458 <span class="keywordtype">int</span> r;
+<a name="l00459"></a>00459
+<a name="l00460"></a>00460 errmsg = NULL;
+<a name="l00461"></a>00461 r = sqlite3_exec(db,
+<a name="l00462"></a>00462 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS lms_internal ("</span>
+<a name="l00463"></a>00463 <span class="stringliteral">"tab TEXT NOT NULL UNIQUE, "</span>
+<a name="l00464"></a>00464 <span class="stringliteral">"version INTEGER NOT NULL"</span>
+<a name="l00465"></a>00465 <span class="stringliteral">")"</span>,
+<a name="l00466"></a>00466 NULL, NULL, &errmsg);
+<a name="l00467"></a>00467 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00468"></a>00468 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'lms_internal' table: %s\n"</span>,
+<a name="l00469"></a>00469 errmsg);
+<a name="l00470"></a>00470 sqlite3_free(errmsg);
+<a name="l00471"></a>00471 <span class="keywordflow">return</span> -1;
+<a name="l00472"></a>00472 }
+<a name="l00473"></a>00473
+<a name="l00474"></a>00474 r = sqlite3_exec(db,
+<a name="l00475"></a>00475 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS files ("</span>
+<a name="l00476"></a>00476 <span class="stringliteral">"id INTEGER PRIMARY KEY AUTOINCREMENT, "</span>
+<a name="l00477"></a>00477 <span class="stringliteral">"path BLOB NOT NULL UNIQUE, "</span>
+<a name="l00478"></a>00478 <span class="stringliteral">"mtime INTEGER NOT NULL, "</span>
+<a name="l00479"></a>00479 <span class="stringliteral">"dtime INTEGER NOT NULL, "</span>
+<a name="l00480"></a>00480 <span class="stringliteral">"size INTEGER NOT NULL"</span>
+<a name="l00481"></a>00481 <span class="stringliteral">")"</span>,
+<a name="l00482"></a>00482 NULL, NULL, &errmsg);
+<a name="l00483"></a>00483 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00484"></a>00484 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'files' table: %s\n"</span>, errmsg);
+<a name="l00485"></a>00485 sqlite3_free(errmsg);
+<a name="l00486"></a>00486 <span class="keywordflow">return</span> -2;
+<a name="l00487"></a>00487 }
+<a name="l00488"></a>00488
+<a name="l00489"></a>00489 r = sqlite3_exec(db,
+<a name="l00490"></a>00490 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS files_path_idx ON files ("</span>
+<a name="l00491"></a>00491 <span class="stringliteral">"path"</span>
+<a name="l00492"></a>00492 <span class="stringliteral">")"</span>,
+<a name="l00493"></a>00493 NULL, NULL, &errmsg);
+<a name="l00494"></a>00494 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00495"></a>00495 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'files_path_idx' index: %s\n"</span>,
+<a name="l00496"></a>00496 errmsg);
+<a name="l00497"></a>00497 sqlite3_free(errmsg);
+<a name="l00498"></a>00498 <span class="keywordflow">return</span> -3;
+<a name="l00499"></a>00499 }
+<a name="l00500"></a>00500
+<a name="l00501"></a>00501 <span class="keywordflow">return</span> 0;
+<a name="l00502"></a>00502 }
+<a name="l00503"></a>00503
+<a name="l00504"></a>00504
+<a name="l00505"></a>00505 sqlite3_stmt *
+<a name="l00506"></a><a class="code" href="lightmediascanner__db__private_8h.html#073c254ca7b4d3f42e1be1854bcc42a3">00506</a> <a class="code" href="lightmediascanner__db__common_8c.html#1787fdaf148358c7a518e91dfd871ca1">lms_db_compile_stmt_begin_transaction</a>(sqlite3 *db)
+<a name="l00507"></a>00507 {
+<a name="l00508"></a>00508 <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="l00509"></a>00509 }
+<a name="l00510"></a>00510
+<a name="l00511"></a>00511 <span class="keywordtype">int</span>
+<a name="l00512"></a><a class="code" href="lightmediascanner__db__private_8h.html#3a7256cb653542bbf563feeb2aa2d0ea">00512</a> <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(sqlite3_stmt *stmt)
+<a name="l00513"></a>00513 {
+<a name="l00514"></a>00514 <span class="keywordtype">int</span> r, ret;
+<a name="l00515"></a>00515
+<a name="l00516"></a>00516 ret = 0;
+<a name="l00517"></a>00517 r = sqlite3_step(stmt);
+<a name="l00518"></a>00518 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00519"></a>00519 fprintf(stderr, <span class="stringliteral">"ERROR: could not begin transaction: %s\n"</span>,
+<a name="l00520"></a>00520 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00521"></a>00521 ret = -1;
+<a name="l00522"></a>00522 }
+<a name="l00523"></a>00523
+<a name="l00524"></a>00524 r = sqlite3_reset(stmt);
+<a name="l00525"></a>00525 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00526"></a>00526 fprintf(stderr, <span class="stringliteral">"ERROR: could not reset SQL statement: %s\n"</span>,
+<a name="l00527"></a>00527 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00528"></a>00528
+<a name="l00529"></a>00529 <span class="keywordflow">return</span> ret;
+<a name="l00530"></a>00530 }
+<a name="l00531"></a>00531
+<a name="l00532"></a>00532 sqlite3_stmt *
+<a name="l00533"></a><a class="code" href="lightmediascanner__db__private_8h.html#09feca4fbfde33d5647cdd5cc2de6500">00533</a> <a class="code" href="lightmediascanner__db__common_8c.html#bff1aa6077215f3d70d4d5b1a9b7a498">lms_db_compile_stmt_end_transaction</a>(sqlite3 *db)
+<a name="l00534"></a>00534 {
+<a name="l00535"></a>00535 <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="l00536"></a>00536 }
+<a name="l00537"></a>00537
+<a name="l00538"></a>00538 <span class="keywordtype">int</span>
+<a name="l00539"></a><a class="code" href="lightmediascanner__db__private_8h.html#8ee7bfba83958b80f717a6ccbad2a84c">00539</a> <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(sqlite3_stmt *stmt)
+<a name="l00540"></a>00540 {
+<a name="l00541"></a>00541 <span class="keywordtype">int</span> r, ret;
+<a name="l00542"></a>00542
+<a name="l00543"></a>00543 ret = 0;
+<a name="l00544"></a>00544 r = sqlite3_step(stmt);
+<a name="l00545"></a>00545 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00546"></a>00546 fprintf(stderr, <span class="stringliteral">"ERROR: could not end transaction: %s\n"</span>,
+<a name="l00547"></a>00547 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00548"></a>00548 ret = -1;
+<a name="l00549"></a>00549 }
+<a name="l00550"></a>00550
+<a name="l00551"></a>00551 r = sqlite3_reset(stmt);
+<a name="l00552"></a>00552 <span class="keywordflow">if</span> (r != SQLITE_OK)
+<a name="l00553"></a>00553 fprintf(stderr, <span class="stringliteral">"ERROR: could not reset SQL statement: %s\n"</span>,
+<a name="l00554"></a>00554 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00555"></a>00555
+<a name="l00556"></a>00556 <span class="keywordflow">return</span> ret;
+<a name="l00557"></a>00557 }
+<a name="l00558"></a>00558
+<a name="l00559"></a>00559 sqlite3_stmt *
+<a name="l00560"></a><a class="code" href="lightmediascanner__db__private_8h.html#327d54a6dac083e356fd609298a0cbd5">00560</a> <a class="code" href="lightmediascanner__db__common_8c.html#b00a624bc01da9b796f7bc6e1d507cf8">lms_db_compile_stmt_get_file_info</a>(sqlite3 *db)
+<a name="l00561"></a>00561 {
+<a name="l00562"></a>00562 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00563"></a>00563 <span class="stringliteral">"SELECT id, mtime, dtime, size FROM files WHERE path = ?"</span>);
+<a name="l00564"></a>00564 }
+<a name="l00565"></a>00565
+<a name="l00566"></a>00566 <span class="keywordtype">int</span>
+<a name="l00567"></a><a class="code" href="lightmediascanner__db__common_8c.html#c0b7cf0b2eb0f55fbf8a4103bc9569d1">00567</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="l00568"></a>00568 {
+<a name="l00569"></a>00569 <span class="keywordtype">int</span> r, ret;
+<a name="l00570"></a>00570
+<a name="l00571"></a>00571 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="l00572"></a>00572 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00573"></a>00573 <span class="keywordflow">goto</span> done;
+<a name="l00574"></a>00574
+<a name="l00575"></a>00575 r = sqlite3_step(stmt);
+<a name="l00576"></a>00576 <span class="keywordflow">if</span> (r == SQLITE_DONE) {
+<a name="l00577"></a>00577 ret = 1;
+<a name="l00578"></a>00578 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = -1;
+<a name="l00579"></a>00579 <span class="keywordflow">goto</span> done;
+<a name="l00580"></a>00580 }
+<a name="l00581"></a>00581
+<a name="l00582"></a>00582 <span class="keywordflow">if</span> (r != SQLITE_ROW) {
+<a name="l00583"></a>00583 fprintf(stderr, <span class="stringliteral">"ERROR: could not get file info from table: %s\n"</span>,
+<a name="l00584"></a>00584 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00585"></a>00585 ret = -2;
+<a name="l00586"></a>00586 <span class="keywordflow">goto</span> done;
+<a name="l00587"></a>00587 }
+<a name="l00588"></a>00588
+<a name="l00589"></a>00589 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = sqlite3_column_int64(stmt, 0);
+<a name="l00590"></a>00590 finfo-><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a> = sqlite3_column_int(stmt, 1);
+<a name="l00591"></a>00591 finfo-><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = sqlite3_column_int(stmt, 2);
+<a name="l00592"></a>00592 finfo-><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a> = sqlite3_column_int(stmt, 3);
+<a name="l00593"></a>00593 ret = 0;
+<a name="l00594"></a>00594
+<a name="l00595"></a>00595 done:
+<a name="l00596"></a>00596 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00597"></a>00597
+<a name="l00598"></a>00598 <span class="keywordflow">return</span> ret;
+<a name="l00599"></a>00599 }
+<a name="l00600"></a>00600
+<a name="l00601"></a>00601 sqlite3_stmt *
+<a name="l00602"></a><a class="code" href="lightmediascanner__db__private_8h.html#69eb9d9058d9432f7658f9adffb79ed6">00602</a> <a class="code" href="lightmediascanner__db__common_8c.html#1e6e76cfa9d6faa3c3b8035004eff1a0">lms_db_compile_stmt_update_file_info</a>(sqlite3 *db)
+<a name="l00603"></a>00603 {
+<a name="l00604"></a>00604 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00605"></a>00605 <span class="stringliteral">"UPDATE files SET mtime = ?, dtime = ?, size = ? WHERE id = ?"</span>);
+<a name="l00606"></a>00606 }
+<a name="l00607"></a>00607
+<a name="l00608"></a>00608 <span class="keywordtype">int</span>
+<a name="l00609"></a><a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">00609</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="l00610"></a>00610 {
+<a name="l00611"></a>00611 <span class="keywordtype">int</span> r, ret;
+<a name="l00612"></a>00612
+<a name="l00613"></a>00613 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="l00614"></a>00614 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00615"></a>00615 <span class="keywordflow">goto</span> done;
+<a name="l00616"></a>00616
+<a name="l00617"></a>00617 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="l00618"></a>00618 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00619"></a>00619 <span class="keywordflow">goto</span> done;
+<a name="l00620"></a>00620
+<a name="l00621"></a>00621 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="l00622"></a>00622 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00623"></a>00623 <span class="keywordflow">goto</span> done;
+<a name="l00624"></a>00624
+<a name="l00625"></a>00625 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="l00626"></a>00626 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00627"></a>00627 <span class="keywordflow">goto</span> done;
+<a name="l00628"></a>00628
+<a name="l00629"></a>00629 r = sqlite3_step(stmt);
+<a name="l00630"></a>00630 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00631"></a>00631 fprintf(stderr, <span class="stringliteral">"ERROR: could not update file info: %s\n"</span>,
+<a name="l00632"></a>00632 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00633"></a>00633 ret = -5;
+<a name="l00634"></a>00634 <span class="keywordflow">goto</span> done;
+<a name="l00635"></a>00635 }
+<a name="l00636"></a>00636
+<a name="l00637"></a>00637 ret = 0;
+<a name="l00638"></a>00638
+<a name="l00639"></a>00639 done:
+<a name="l00640"></a>00640 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00641"></a>00641
+<a name="l00642"></a>00642 <span class="keywordflow">return</span> ret;
+<a name="l00643"></a>00643 }
+<a name="l00644"></a>00644
+<a name="l00645"></a>00645 sqlite3_stmt *
+<a name="l00646"></a><a class="code" href="lightmediascanner__db__private_8h.html#bf21f88ddbe28a8290d0df32af0f079c">00646</a> <a class="code" href="lightmediascanner__db__common_8c.html#9a5886e755eb428ac811956144eee0dc">lms_db_compile_stmt_insert_file_info</a>(sqlite3 *db)
+<a name="l00647"></a>00647 {
+<a name="l00648"></a>00648 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00649"></a>00649 <span class="stringliteral">"INSERT INTO files (path, mtime, dtime, size) VALUES(?, ?, ?, ?)"</span>);
+<a name="l00650"></a>00650 }
+<a name="l00651"></a>00651
+<a name="l00652"></a>00652 <span class="keywordtype">int</span>
+<a name="l00653"></a><a class="code" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">00653</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="l00654"></a>00654 {
+<a name="l00655"></a>00655 <span class="keywordtype">int</span> r, ret;
+<a name="l00656"></a>00656
+<a name="l00657"></a>00657 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="l00658"></a>00658 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00659"></a>00659 <span class="keywordflow">goto</span> done;
+<a name="l00660"></a>00660
+<a name="l00661"></a>00661 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="l00662"></a>00662 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00663"></a>00663 <span class="keywordflow">goto</span> done;
+<a name="l00664"></a>00664
+<a name="l00665"></a>00665 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="l00666"></a>00666 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00667"></a>00667 <span class="keywordflow">goto</span> done;
+<a name="l00668"></a>00668
+<a name="l00669"></a>00669 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="l00670"></a>00670 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00671"></a>00671 <span class="keywordflow">goto</span> done;
+<a name="l00672"></a>00672
+<a name="l00673"></a>00673 r = sqlite3_step(stmt);
+<a name="l00674"></a>00674 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00675"></a>00675 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert file info: %s\n"</span>,
+<a name="l00676"></a>00676 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00677"></a>00677 ret = -5;
+<a name="l00678"></a>00678 <span class="keywordflow">goto</span> done;
+<a name="l00679"></a>00679 }
+<a name="l00680"></a>00680
+<a name="l00681"></a>00681 finfo-><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> = sqlite3_last_insert_rowid(sqlite3_db_handle(stmt));
+<a name="l00682"></a>00682 ret = 0;
+<a name="l00683"></a>00683
+<a name="l00684"></a>00684 done:
+<a name="l00685"></a>00685 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00686"></a>00686
+<a name="l00687"></a>00687 <span class="keywordflow">return</span> ret;
+<a name="l00688"></a>00688 }
+<a name="l00689"></a>00689
+<a name="l00690"></a>00690 sqlite3_stmt *
+<a name="l00691"></a><a class="code" href="lightmediascanner__db__private_8h.html#76941bdbbdb711fff821343e91c2cd97">00691</a> <a class="code" href="lightmediascanner__db__common_8c.html#559925f8e4d5bf61d1bcf44844a95699">lms_db_compile_stmt_delete_file_info</a>(sqlite3 *db)
+<a name="l00692"></a>00692 {
+<a name="l00693"></a>00693 <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="l00694"></a>00694 }
+<a name="l00695"></a>00695
+<a name="l00696"></a>00696 <span class="keywordtype">int</span>
+<a name="l00697"></a><a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">00697</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="l00698"></a>00698 {
+<a name="l00699"></a>00699 <span class="keywordtype">int</span> r, ret;
+<a name="l00700"></a>00700
+<a name="l00701"></a>00701 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="l00702"></a>00702 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00703"></a>00703 <span class="keywordflow">goto</span> done;
+<a name="l00704"></a>00704
+<a name="l00705"></a>00705 r = sqlite3_step(stmt);
+<a name="l00706"></a>00706 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00707"></a>00707 fprintf(stderr, <span class="stringliteral">"ERROR: could not delete file info: %s\n"</span>,
+<a name="l00708"></a>00708 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00709"></a>00709 ret = -2;
+<a name="l00710"></a>00710 <span class="keywordflow">goto</span> done;
+<a name="l00711"></a>00711 }
+<a name="l00712"></a>00712 ret = 0;
+<a name="l00713"></a>00713
+<a name="l00714"></a>00714 done:
+<a name="l00715"></a>00715 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00716"></a>00716
+<a name="l00717"></a>00717 <span class="keywordflow">return</span> ret;
+<a name="l00718"></a>00718 }
+<a name="l00719"></a>00719
+<a name="l00720"></a>00720 sqlite3_stmt *
+<a name="l00721"></a><a class="code" href="lightmediascanner__db__private_8h.html#08c34b5b1b6e927a696ff0ce66562f54">00721</a> <a class="code" href="lightmediascanner__db__common_8c.html#1b6950ca9e548670a4cb7fd0ec5220a8">lms_db_compile_stmt_set_file_dtime</a>(sqlite3 *db)
+<a name="l00722"></a>00722 {
+<a name="l00723"></a>00723 <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="l00724"></a>00724 }
+<a name="l00725"></a>00725
+<a name="l00726"></a>00726 <span class="keywordtype">int</span>
+<a name="l00727"></a><a class="code" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">00727</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="l00728"></a>00728 {
+<a name="l00729"></a>00729 <span class="keywordtype">int</span> r, ret;
+<a name="l00730"></a>00730
+<a name="l00731"></a>00731 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="l00732"></a>00732 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00733"></a>00733 <span class="keywordflow">goto</span> done;
+<a name="l00734"></a>00734
+<a name="l00735"></a>00735 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="l00736"></a>00736 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00737"></a>00737 <span class="keywordflow">goto</span> done;
+<a name="l00738"></a>00738
+<a name="l00739"></a>00739 r = sqlite3_step(stmt);
+<a name="l00740"></a>00740 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00741"></a>00741 fprintf(stderr, <span class="stringliteral">"ERROR: could not set file dtime: %s\n"</span>,
+<a name="l00742"></a>00742 sqlite3_errmsg(sqlite3_db_handle(stmt)));
+<a name="l00743"></a>00743 ret = -3;
+<a name="l00744"></a>00744 <span class="keywordflow">goto</span> done;
+<a name="l00745"></a>00745 }
+<a name="l00746"></a>00746
+<a name="l00747"></a>00747 ret = 0;
+<a name="l00748"></a>00748
+<a name="l00749"></a>00749 done:
+<a name="l00750"></a>00750 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00751"></a>00751
+<a name="l00752"></a>00752 <span class="keywordflow">return</span> ret;
+<a name="l00753"></a>00753 }
+<a name="l00754"></a>00754
+<a name="l00755"></a>00755 sqlite3_stmt *
+<a name="l00756"></a><a class="code" href="lightmediascanner__db__private_8h.html#1cc8a80961a0febdd099a028f3da9c30">00756</a> <a class="code" href="lightmediascanner__db__common_8c.html#73ae2cfd7babf80294cf31f02906223b">lms_db_compile_stmt_get_files</a>(sqlite3 *db)
+<a name="l00757"></a>00757 {
+<a name="l00758"></a>00758 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(db,
+<a name="l00759"></a>00759 <span class="stringliteral">"SELECT id, path, mtime, dtime, size FROM files WHERE path LIKE ?"</span>);
+<a name="l00760"></a>00760 }
+<a name="l00761"></a>00761
+<a name="l00762"></a>00762 <span class="keywordtype">int</span>
+<a name="l00763"></a><a class="code" href="lightmediascanner__db__common_8c.html#df572e74e0821a66ebd16f575b4fb7c4">00763</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="l00764"></a>00764 {
+<a name="l00765"></a>00765 <span class="keywordtype">int</span> ret;
+<a name="l00766"></a>00766
+<a name="l00767"></a>00767 ret = <a class="code" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6">lms_db_bind_blob</a>(stmt, 1, path, len);
+<a name="l00768"></a>00768 <span class="keywordflow">return</span> ret;
+<a name="l00769"></a>00769 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_db_common.c:<p><center><img src="lightmediascanner__db__common_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_db_common.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db_common.c_map">
+<area shape="rect" href="lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="295,56,487,83"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="537,107,705,133"><area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="795,107,923,133"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="756,157,961,184"></map>
+
+<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#7964337689117d7dc6fb1822378b5848">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#7964337689117d7dc6fb1822378b5848">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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00512">512</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00148">148</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00763">lms_db_get_files()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00231">231</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00212">212</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">lms_db_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">lms_db_update_file_info()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00171">171</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00697">lms_db_delete_file_info()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">lms_db_set_file_dtime()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00190">190</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00125">125</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00250">lms_db_table_version_get()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">387</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00247">lms_db_audio_new()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00097">lms_db_image_new()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00091">lms_db_playlist_new()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00104">lms_db_video_new()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00417">417</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00352">lms_db_audio_free()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00173">lms_db_image_free()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00165">lms_db_playlist_free()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00177">lms_db_video_free()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00442">442</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00247">lms_db_audio_new()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00097">lms_db_image_new()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00091">lms_db_playlist_new()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00104">lms_db_video_new()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">81</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00008">sqlite3_prepare_v2()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00291">lms_db_audio_start()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00506">lms_db_compile_stmt_begin_transaction()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00691">lms_db_compile_stmt_delete_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00533">lms_db_compile_stmt_end_transaction()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00560">lms_db_compile_stmt_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00756">lms_db_compile_stmt_get_files()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00646">lms_db_compile_stmt_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00721">lms_db_compile_stmt_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00602">lms_db_compile_stmt_update_file_info()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00141">lms_db_image_start()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00135">lms_db_playlist_start()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00250">lms_db_table_version_get()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00148">lms_db_video_start()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_5fddf47521f83929b0c90a481fa01c5b_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_5fddf47521f83929b0c90a481fa01c5b_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_5fddf47521f83929b0c90a481fa01c5b_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="196,5,319,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00506">506</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_1787fdaf148358c7a518e91dfd871ca1_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_1787fdaf148358c7a518e91dfd871ca1_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_1787fdaf148358c7a518e91dfd871ca1_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="297,5,436,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="487,5,609,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00691">691</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_559925f8e4d5bf61d1bcf44844a95699_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_559925f8e4d5bf61d1bcf44844a95699_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_559925f8e4d5bf61d1bcf44844a95699_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="287,5,425,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="476,5,599,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00533">533</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_bff1aa6077215f3d70d4d5b1a9b7a498_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_bff1aa6077215f3d70d4d5b1a9b7a498_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_bff1aa6077215f3d70d4d5b1a9b7a498_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="287,5,425,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="476,5,599,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00560">560</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_b00a624bc01da9b796f7bc6e1d507cf8_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_b00a624bc01da9b796f7bc6e1d507cf8_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_b00a624bc01da9b796f7bc6e1d507cf8_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="271,5,409,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="460,5,583,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00756">756</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_73ae2cfd7babf80294cf31f02906223b_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_73ae2cfd7babf80294cf31f02906223b_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_73ae2cfd7babf80294cf31f02906223b_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="247,5,385,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="436,5,559,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00646">646</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_9a5886e755eb428ac811956144eee0dc_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_9a5886e755eb428ac811956144eee0dc_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_9a5886e755eb428ac811956144eee0dc_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="284,5,423,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="473,5,596,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00721">721</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_1b6950ca9e548670a4cb7fd0ec5220a8_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_1b6950ca9e548670a4cb7fd0ec5220a8_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_1b6950ca9e548670a4cb7fd0ec5220a8_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="279,5,417,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="468,5,591,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00602">602</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_1e6e76cfa9d6faa3c3b8035004eff1a0_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_1e6e76cfa9d6faa3c3b8035004eff1a0_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_1e6e76cfa9d6faa3c3b8035004eff1a0_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="289,5,428,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="479,5,601,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00455">455</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00035">35</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00697">697</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00137">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00171">lms_db_bind_int64()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">lms_db_reset_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_bb2a9cdbbc7680d1ec85ef3f086b3f63_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_bb2a9cdbbc7680d1ec85ef3f086b3f63_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_bb2a9cdbbc7680d1ec85ef3f086b3f63_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c" title="lms_db_bind_int64" alt="" coords="205,5,331,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="207,56,329,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="380,56,521,83"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00539">539</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00093">93</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00352">lms_db_audio_free()</a>, <a class="el" href="lightmediascanner__db__image_8c-source.html#l00173">lms_db_image_free()</a>, <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00165">lms_db_playlist_free()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00250">lms_db_table_version_get()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__video_8c-source.html#l00177">lms_db_video_free()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">567</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00139">lms_file_info::dtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00137">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00148">lms_db_bind_blob()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">lms_db_reset_stmt()</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00138">lms_file_info::mtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00134">lms_file_info::path</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00135">lms_file_info::path_len</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00140">lms_file_info::size</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_c0b7cf0b2eb0f55fbf8a4103bc9569d1_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_c0b7cf0b2eb0f55fbf8a4103bc9569d1_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_c0b7cf0b2eb0f55fbf8a4103bc9569d1_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6" title="lms_db_bind_blob" alt="" coords="191,5,311,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="189,56,312,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="361,56,503,83"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00763">763</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00148">lms_db_bind_blob()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_df572e74e0821a66ebd16f575b4fb7c4_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_df572e74e0821a66ebd16f575b4fb7c4_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_df572e74e0821a66ebd16f575b4fb7c4_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6" title="lms_db_bind_blob" alt="" coords="169,5,289,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">653</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00139">lms_file_info::dtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00137">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00148">lms_db_bind_blob()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00212">lms_db_bind_int()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">lms_db_reset_stmt()</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00138">lms_file_info::mtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00134">lms_file_info::path</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00135">lms_file_info::path_len</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00140">lms_file_info::size</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_e529ad5c4478d53685c65ec69dc5b1f4_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_e529ad5c4478d53685c65ec69dc5b1f4_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_e529ad5c4478d53685c65ec69dc5b1f4_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6" title="lms_db_bind_blob" alt="" coords="204,5,324,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="208,56,320,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="203,107,325,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="375,107,516,133"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">108</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00016">sqlite3_clear_bindings()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00697">lms_db_delete_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">lms_db_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00250">lms_db_table_version_get()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">lms_db_update_file_info()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_226c6f7ab2e7923b747b7090357ea419_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_226c6f7ab2e7923b747b7090357ea419_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_226c6f7ab2e7923b747b7090357ea419_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="177,5,319,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">727</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00139">lms_file_info::dtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00137">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00212">lms_db_bind_int()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00171">lms_db_bind_int64()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">lms_db_reset_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_024e3bd9385fd740f75618716c90b04f_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_024e3bd9385fd740f75618716c90b04f_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_024e3bd9385fd740f75618716c90b04f_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="204,5,316,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c" title="lms_db_bind_int64" alt="" coords="197,56,323,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="199,107,321,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="372,107,513,133"></map>
+
+</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#7964337689117d7dc6fb1822378b5848">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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00317">317</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00347">lms_db_table_update_if_required()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_9bca88ae79959baff3accee8ce10b558_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_9bca88ae79959baff3accee8ce10b558_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_9bca88ae79959baff3accee8ce10b558_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7" title="lms_db_table_version_set" alt="" coords="189,107,349,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="412,5,524,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888" title="lms_db_bind_text" alt="" coords="409,56,527,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="399,107,537,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="400,157,536,184"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="407,208,529,235"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="597,107,720,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="588,208,729,235"></map>
+
+</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#7964337689117d7dc6fb1822378b5848">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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00347">347</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00317">lms_db_table_update()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00250">lms_db_table_version_get()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_86b766535f9dc7895da7d0f606201700_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_86b766535f9dc7895da7d0f606201700_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_86b766535f9dc7895da7d0f606201700_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558" title="lms_db_table_update" alt="" coords="256,107,392,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd" title="lms_db_table_version_get" alt="" coords="440,157,603,184"><area shape="rect" href="lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7" title="lms_db_table_version_set" alt="" coords="441,107,601,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="665,5,777,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888" title="lms_db_bind_text" alt="" coords="663,107,780,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="652,56,791,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="653,208,789,235"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="660,157,783,184"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="851,56,973,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="841,157,983,184"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00250">250</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00125">lms_db_bind_text()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00093">lms_db_finalize_stmt()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">lms_db_reset_stmt()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00347">lms_db_table_update_if_required()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_eba3215ee5981a73e9d0fed0a7e079cd_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_eba3215ee5981a73e9d0fed0a7e079cd_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_eba3215ee5981a73e9d0fed0a7e079cd_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888" title="lms_db_bind_text" alt="" coords="228,5,345,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="217,56,356,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="219,107,355,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="225,157,348,184"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="416,56,539,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="407,157,548,184"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">284</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00212">lms_db_bind_int()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00125">lms_db_bind_text()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00093">lms_db_finalize_stmt()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">lms_db_reset_stmt()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00317">lms_db_table_update()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_46e6e318ea9bb4a7ffdfe40c842da4e7_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_46e6e318ea9bb4a7ffdfe40c842da4e7_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_46e6e318ea9bb4a7ffdfe40c842da4e7_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="228,5,340,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888" title="lms_db_bind_text" alt="" coords="225,56,343,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="215,107,353,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="216,157,352,184"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="223,208,345,235"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="413,107,536,133"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="404,208,545,235"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">609</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00139">lms_file_info::dtime</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00137">lms_file_info::id</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00212">lms_db_bind_int()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">lms_db_reset_stmt()</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00138">lms_file_info::mtime</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00140">lms_file_info::size</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__common_8c_0f727cd41bbb90af2e08b3ee7ca76de9_cgraph.png" border="0" usemap="#lightmediascanner__db__common_8c_0f727cd41bbb90af2e08b3ee7ca76de9_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__common_8c_0f727cd41bbb90af2e08b3ee7ca76de9_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="216,5,328,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="211,56,333,83"><area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="383,56,524,83"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00016">16</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">lms_db_reset_stmt()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00008">8</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="204,5,316,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c" title="lms_db_bind_int64" alt="" coords="197,56,323,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="199,107,321,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="372,107,513,133">
--- /dev/null
+48d33c778b3fddfffba6e852e034f89e
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="216,5,328,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="211,56,333,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="383,56,524,83">
--- /dev/null
+7412d602f0beb325ae8c656a13097e94
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="297,5,436,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="487,5,609,32">
--- /dev/null
+597cf289a37dec2c079a7e40c848ec2c
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="279,5,417,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="468,5,591,32">
--- /dev/null
+4140a991699f501c103f1dd52e357650
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="289,5,428,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="479,5,601,32">
--- /dev/null
+42099300ab356ee9f37a5189393d9a29
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="177,5,319,32">
--- /dev/null
+0559150039d6a3e46b15f46277f3053f
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="228,5,340,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888" title="lms_db_bind_text" alt="" coords="225,56,343,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="215,107,353,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="216,157,352,184">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="223,208,345,235">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="413,107,536,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="404,208,545,235">
--- /dev/null
+d683eb6d3d57ba2eb96d3762485f9724
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="287,5,425,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="476,5,599,32">
--- /dev/null
+11ab49ab26e02addb26e1495f2117883
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="196,5,319,32">
--- /dev/null
+c88b612b05b498869d844a38382eee06
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="247,5,385,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="436,5,559,32">
--- /dev/null
+3cc06df5622a01305fd152e7404ce386
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#9bca88ae79959baff3accee8ce10b558" title="lms_db_table_update" alt="" coords="256,107,392,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#eba3215ee5981a73e9d0fed0a7e079cd" title="lms_db_table_version_get" alt="" coords="440,157,603,184">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7" title="lms_db_table_version_set" alt="" coords="441,107,601,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="665,5,777,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888" title="lms_db_bind_text" alt="" coords="663,107,780,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="652,56,791,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="653,208,789,235">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="660,157,783,184">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="851,56,973,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="841,157,983,184">
--- /dev/null
+9db3c86e6669be30b89f5dce87d82668
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="284,5,423,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="473,5,596,32">
--- /dev/null
+70af470fb9b373dbdde441f9c228fdac
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#46e6e318ea9bb4a7ffdfe40c842da4e7" title="lms_db_table_version_set" alt="" coords="189,107,349,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="412,5,524,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888" title="lms_db_bind_text" alt="" coords="409,56,527,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="399,107,537,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="400,157,536,184">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="407,208,529,235">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="597,107,720,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="588,208,729,235">
--- /dev/null
+28f5727047bcdc514f6c42a943efead4
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="295,56,487,83">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="537,107,705,133">
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="795,107,923,133">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="756,157,961,184">
--- /dev/null
+264a73e0300f7fc21733a46a317433fb
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="271,5,409,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="460,5,583,32">
--- /dev/null
+48dd492320b5d2c740f331d4213ef1e6
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#f2fe78bc45dc33d843313a846db5ce7c" title="lms_db_bind_int64" alt="" coords="205,5,331,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="207,56,329,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="380,56,521,83">
--- /dev/null
+f15d940169e90cc24dc1006e856a6422
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="287,5,425,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="476,5,599,32">
--- /dev/null
+5a19337cd92bc81a6609fb3efc0944b8
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6" title="lms_db_bind_blob" alt="" coords="191,5,311,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="189,56,312,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="361,56,503,83">
--- /dev/null
+1fc1d627110c5472cfa8eca613ac8338
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6" title="lms_db_bind_blob" alt="" coords="169,5,289,32">
--- /dev/null
+cc1edbcc8e3d21faf0252ae0d894ea4d
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#fee26461dbd6c89c82794c94aaeeaef6" title="lms_db_bind_blob" alt="" coords="204,5,324,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#de261036cf3228f0b6a79a9c68687c4f" title="lms_db_bind_int" alt="" coords="208,56,320,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="203,107,325,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="375,107,516,133">
--- /dev/null
+588cb80a9f2488c89433dd877e1f5200
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#88c461ae88da3eb47987c5a0b15c5888" title="lms_db_bind_text" alt="" coords="228,5,345,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="217,56,356,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5" title="lms_db_finalize_stmt" alt="" coords="219,107,355,133">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419" title="lms_db_reset_stmt" alt="" coords="225,157,348,184">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="416,56,539,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="407,157,548,184">
--- /dev/null
+b1f660c2d4925e78ca3ebe1d9828a8cd
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a>></span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00005"></a>00005
+<a name="l00006"></a>00006 <span class="keyword">struct </span>lms_db_image {
+<a name="l00007"></a>00007 sqlite3 *db;
+<a name="l00008"></a>00008 sqlite3_stmt *insert;
+<a name="l00009"></a>00009 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _references;
+<a name="l00010"></a>00010 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _is_started:1;
+<a name="l00011"></a>00011 };
+<a name="l00012"></a>00012
+<a name="l00013"></a>00013 <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="l00014"></a>00014
+<a name="l00015"></a>00015 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00016"></a>00016 _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="l00017"></a>00017 <span class="keywordtype">char</span> *errmsg;
+<a name="l00018"></a>00018 <span class="keywordtype">int</span> r, ret;
+<a name="l00019"></a>00019
+<a name="l00020"></a>00020 errmsg = NULL;
+<a name="l00021"></a>00021 r = sqlite3_exec(db,
+<a name="l00022"></a>00022 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS images ("</span>
+<a name="l00023"></a>00023 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00024"></a>00024 <span class="stringliteral">"title TEXT, "</span>
+<a name="l00025"></a>00025 <span class="stringliteral">"artist TEXT, "</span>
+<a name="l00026"></a>00026 <span class="stringliteral">"date INTEGER NOT NULL, "</span>
+<a name="l00027"></a>00027 <span class="stringliteral">"width INTEGER NOT NULL, "</span>
+<a name="l00028"></a>00028 <span class="stringliteral">"height INTEGER NOT NULL, "</span>
+<a name="l00029"></a>00029 <span class="stringliteral">"orientation INTEGER NOT NULL, "</span>
+<a name="l00030"></a>00030 <span class="stringliteral">"gps_lat REAL DEFAULT 0.0, "</span>
+<a name="l00031"></a>00031 <span class="stringliteral">"gps_long REAL DEFAULT 0.0, "</span>
+<a name="l00032"></a>00032 <span class="stringliteral">"gps_alt REAL DEFAULT 0.0"</span>
+<a name="l00033"></a>00033 <span class="stringliteral">")"</span>,
+<a name="l00034"></a>00034 NULL, NULL, &errmsg);
+<a name="l00035"></a>00035 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00036"></a>00036 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'images' table: %s\n"</span>, errmsg);
+<a name="l00037"></a>00037 sqlite3_free(errmsg);
+<a name="l00038"></a>00038 <span class="keywordflow">return</span> -1;
+<a name="l00039"></a>00039 }
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041 r = sqlite3_exec(db,
+<a name="l00042"></a>00042 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS images_date_idx ON images ("</span>
+<a name="l00043"></a>00043 <span class="stringliteral">"date"</span>
+<a name="l00044"></a>00044 <span class="stringliteral">")"</span>,
+<a name="l00045"></a>00045 NULL, NULL, &errmsg);
+<a name="l00046"></a>00046 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00047"></a>00047 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'images_date_idx' index: %s\n"</span>,
+<a name="l00048"></a>00048 errmsg);
+<a name="l00049"></a>00049 sqlite3_free(errmsg);
+<a name="l00050"></a>00050 <span class="keywordflow">return</span> -2;
+<a name="l00051"></a>00051 }
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00054"></a>00054 <span class="stringliteral">"delete_images_on_files_deleted "</span>
+<a name="l00055"></a>00055 <span class="stringliteral">"DELETE ON files FOR EACH ROW BEGIN "</span>
+<a name="l00056"></a>00056 <span class="stringliteral">" DELETE FROM images WHERE id = OLD.id; END;"</span>);
+<a name="l00057"></a>00057 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00058"></a>00058 <span class="keywordflow">goto</span> done;
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00061"></a>00061 <span class="stringliteral">"delete_files_on_images_deleted "</span>
+<a name="l00062"></a>00062 <span class="stringliteral">"DELETE ON images FOR EACH ROW BEGIN "</span>
+<a name="l00063"></a>00063 <span class="stringliteral">" DELETE FROM files WHERE id = OLD.id; END;"</span>);
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 done:
+<a name="l00066"></a>00066 <span class="keywordflow">return</span> ret;
+<a name="l00067"></a>00067 }
+<a name="l00068"></a>00068
+<a name="l00069"></a>00069 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> _db_table_updater_images[] = {
+<a name="l00070"></a>00070 _db_table_updater_images_0
+<a name="l00071"></a>00071 };
+<a name="l00072"></a>00072
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00075"></a>00075 _db_create_table_if_required(sqlite3 *db)
+<a name="l00076"></a>00076 {
+<a name="l00077"></a>00077 <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="l00078"></a>00078 <a class="code" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">LMS_ARRAY_SIZE</a>(_db_table_updater_images),
+<a name="l00079"></a>00079 _db_table_updater_images);
+<a name="l00080"></a>00080 }
+<a name="l00081"></a>00081
+<a name="l00096"></a>00096 <a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *
+<a name="l00097"></a><a class="code" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">00097</a> <a class="code" href="group__LMS__DB.html#g3eac8dbebc0a847b63702e531872e2e7">lms_db_image_new</a>(sqlite3 *db)
+<a name="l00098"></a>00098 {
+<a name="l00099"></a>00099 <a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a> *ldi;
+<a name="l00100"></a>00100 <span class="keywordtype">void</span> *p;
+<a name="l00101"></a>00101
+<a name="l00102"></a>00102 <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="l00103"></a>00103 ldi = p;
+<a name="l00104"></a>00104 ldi->_references++;
+<a name="l00105"></a>00105 <span class="keywordflow">return</span> ldi;
+<a name="l00106"></a>00106 }
+<a name="l00107"></a>00107
+<a name="l00108"></a>00108 <span class="keywordflow">if</span> (!db)
+<a name="l00109"></a>00109 <span class="keywordflow">return</span> NULL;
+<a name="l00110"></a>00110
+<a name="l00111"></a>00111 <span class="keywordflow">if</span> (_db_create_table_if_required(db) != 0) {
+<a name="l00112"></a>00112 fprintf(stderr, <span class="stringliteral">"ERROR: could not create table.\n"</span>);
+<a name="l00113"></a>00113 <span class="keywordflow">return</span> NULL;
+<a name="l00114"></a>00114 }
+<a name="l00115"></a>00115
+<a name="l00116"></a>00116 ldi = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="group__LMS__DB.html#gf09fb00e8cf6c7d5f76f257ecdea11a6">lms_db_image_t</a>));
+<a name="l00117"></a>00117 ldi->_references = 1;
+<a name="l00118"></a>00118 ldi->db = db;
+<a name="l00119"></a>00119
+<a name="l00120"></a>00120 <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="l00121"></a>00121 <a class="code" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">lms_db_image_free</a>(ldi);
+<a name="l00122"></a>00122 <span class="keywordflow">return</span> NULL;
+<a name="l00123"></a>00123 }
+<a name="l00124"></a>00124
+<a name="l00125"></a>00125 <span class="keywordflow">return</span> ldi;
+<a name="l00126"></a>00126 }
+<a name="l00127"></a>00127
+<a name="l00140"></a>00140 <span class="keywordtype">int</span>
+<a name="l00141"></a><a class="code" href="group__LMS__DB.html#g66dc91038d76fa96d9feaaa119e2ae56">00141</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="l00142"></a>00142 {
+<a name="l00143"></a>00143 <span class="keywordflow">if</span> (!ldi)
+<a name="l00144"></a>00144 <span class="keywordflow">return</span> -1;
+<a name="l00145"></a>00145 <span class="keywordflow">if</span> (ldi->_is_started)
+<a name="l00146"></a>00146 <span class="keywordflow">return</span> 0;
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 ldi->insert = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(ldi->db,
+<a name="l00149"></a>00149 <span class="stringliteral">"INSERT OR REPLACE INTO images ("</span>
+<a name="l00150"></a>00150 <span class="stringliteral">"id, title, artist, date, width, height, orientation, "</span>
+<a name="l00151"></a>00151 <span class="stringliteral">"gps_lat, gps_long, gps_alt) VALUES ("</span>
+<a name="l00152"></a>00152 <span class="stringliteral">"?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"</span>);
+<a name="l00153"></a>00153 <span class="keywordflow">if</span> (!ldi->insert)
+<a name="l00154"></a>00154 <span class="keywordflow">return</span> -2;
+<a name="l00155"></a>00155
+<a name="l00156"></a>00156 ldi->_is_started = 1;
+<a name="l00157"></a>00157 <span class="keywordflow">return</span> 0;
+<a name="l00158"></a>00158 }
+<a name="l00159"></a>00159
+<a name="l00172"></a>00172 <span class="keywordtype">int</span>
+<a name="l00173"></a><a class="code" href="group__LMS__DB.html#g5160a3f620f1ebd562b6ec0add0f65a6">00173</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="l00174"></a>00174 {
+<a name="l00175"></a>00175 <span class="keywordtype">int</span> r;
+<a name="l00176"></a>00176
+<a name="l00177"></a>00177 <span class="keywordflow">if</span> (!ldi)
+<a name="l00178"></a>00178 <span class="keywordflow">return</span> -1;
+<a name="l00179"></a>00179 <span class="keywordflow">if</span> (ldi->_references == 0) {
+<a name="l00180"></a>00180 fprintf(stderr, <span class="stringliteral">"ERROR: over-called lms_db_image_free(%p)\n"</span>, ldi);
+<a name="l00181"></a>00181 <span class="keywordflow">return</span> -1;
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183
+<a name="l00184"></a>00184 ldi->_references--;
+<a name="l00185"></a>00185 <span class="keywordflow">if</span> (ldi->_references > 0)
+<a name="l00186"></a>00186 <span class="keywordflow">return</span> 0;
+<a name="l00187"></a>00187
+<a name="l00188"></a>00188 <span class="keywordflow">if</span> (ldi->insert)
+<a name="l00189"></a>00189 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(ldi->insert, <span class="stringliteral">"insert"</span>);
+<a name="l00190"></a>00190
+<a name="l00191"></a>00191 r = <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(&_cache, ldi->db, ldi);
+<a name="l00192"></a>00192 free(ldi);
+<a name="l00193"></a>00193
+<a name="l00194"></a>00194 <span class="keywordflow">return</span> r;
+<a name="l00195"></a>00195 }
+<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 _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="l00199"></a>00199 {
+<a name="l00200"></a>00200 sqlite3_stmt *stmt;
+<a name="l00201"></a>00201 <span class="keywordtype">int</span> r, ret;
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203 stmt = ldi->insert;
+<a name="l00204"></a>00204
+<a name="l00205"></a>00205 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="l00206"></a>00206 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00207"></a>00207 <span class="keywordflow">goto</span> done;
+<a name="l00208"></a>00208
+<a name="l00209"></a>00209 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="l00210"></a>00210 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00211"></a>00211 <span class="keywordflow">goto</span> done;
+<a name="l00212"></a>00212
+<a name="l00213"></a>00213 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="l00214"></a>00214 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00215"></a>00215 <span class="keywordflow">goto</span> done;
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 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="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#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 5, info-><a class="code" href="structlms__image__info.html#fbd2df9f6f5f290ac02ce4d803677249">width</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, 6, info-><a class="code" href="structlms__image__info.html#f2ae81781dadf7ecaa307b3bc91e710e">height</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#de261036cf3228f0b6a79a9c68687c4f">lms_db_bind_int</a>(stmt, 7, info-><a class="code" href="structlms__image__info.html#434330468b69d0f14b344c672d4778af">orientation</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#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="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#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="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#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="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 r = sqlite3_step(stmt);
+<a name="l00246"></a>00246 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00247"></a>00247 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert image info: %s\n"</span>,
+<a name="l00248"></a>00248 sqlite3_errmsg(ldi->db));
+<a name="l00249"></a>00249 ret = -11;
+<a name="l00250"></a>00250 <span class="keywordflow">goto</span> done;
+<a name="l00251"></a>00251 }
+<a name="l00252"></a>00252
+<a name="l00253"></a>00253 ret = 0;
+<a name="l00254"></a>00254
+<a name="l00255"></a>00255 done:
+<a name="l00256"></a>00256 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00257"></a>00257
+<a name="l00258"></a>00258 <span class="keywordflow">return</span> ret;
+<a name="l00259"></a>00259 }
+<a name="l00260"></a>00260
+<a name="l00272"></a>00272 <span class="keywordtype">int</span>
+<a name="l00273"></a><a class="code" href="lightmediascanner__db__image_8c.html#f23fcc3d62a0f6592e14eaf1dc9b5833">00273</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="l00274"></a>00274 {
+<a name="l00275"></a>00275 <span class="keywordflow">if</span> (!ldi)
+<a name="l00276"></a>00276 <span class="keywordflow">return</span> -1;
+<a name="l00277"></a>00277 <span class="keywordflow">if</span> (!info)
+<a name="l00278"></a>00278 <span class="keywordflow">return</span> -2;
+<a name="l00279"></a>00279 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__image__info.html#e6af5a9d85600a7694991681d141844b">id</a> < 1)
+<a name="l00280"></a>00280 <span class="keywordflow">return</span> -3;
+<a name="l00281"></a>00281
+<a name="l00282"></a>00282 <span class="keywordflow">return</span> _db_insert(ldi, info);
+<a name="l00283"></a>00283 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_db_image.c:<p><center><img src="lightmediascanner__db__image_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_db_image.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db_image.c_map">
+<area shape="rect" href="lightmediascanner__db_8h.html" title="lightmediascanner_db.h" alt="" coords="300,107,449,133"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="279,56,471,83"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="521,107,689,133"><area shape="rect" href="lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="527,157,684,184"><area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="779,107,907,133"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="740,157,945,184"></map>
+
+<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 width="100%"></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#l00273">273</a> of file <a class="el" href="lightmediascanner__db__image_8c-source.html">lightmediascanner_db_image.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db_8h-source.html#l00068">lms_image_info::id</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db_8h.html" title="lightmediascanner_db.h" alt="" coords="300,107,449,133">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="279,56,471,83">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="521,107,689,133">
+<area shape="rect" href="$lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="527,157,684,184">
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="779,107,907,133">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="740,157,945,184">
--- /dev/null
+e083e2e3773d3d81a27a5260aa936185
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a>></span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00005"></a>00005
+<a name="l00006"></a>00006 <span class="keyword">struct </span>lms_db_playlist {
+<a name="l00007"></a>00007 sqlite3 *db;
+<a name="l00008"></a>00008 sqlite3_stmt *insert;
+<a name="l00009"></a>00009 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _references;
+<a name="l00010"></a>00010 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _is_started:1;
+<a name="l00011"></a>00011 };
+<a name="l00012"></a>00012
+<a name="l00013"></a>00013 <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="l00014"></a>00014
+<a name="l00015"></a>00015 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00016"></a>00016 _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="l00017"></a>00017 <span class="keywordtype">char</span> *errmsg;
+<a name="l00018"></a>00018 <span class="keywordtype">int</span> r, ret;
+<a name="l00019"></a>00019
+<a name="l00020"></a>00020 errmsg = NULL;
+<a name="l00021"></a>00021 r = sqlite3_exec(db,
+<a name="l00022"></a>00022 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS playlists ("</span>
+<a name="l00023"></a>00023 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00024"></a>00024 <span class="stringliteral">"title TEXT, "</span>
+<a name="l00025"></a>00025 <span class="stringliteral">"n_entries INTEGER NOT NULL"</span>
+<a name="l00026"></a>00026 <span class="stringliteral">")"</span>,
+<a name="l00027"></a>00027 NULL, NULL, &errmsg);
+<a name="l00028"></a>00028 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00029"></a>00029 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'playlists' table: %s\n"</span>,
+<a name="l00030"></a>00030 errmsg);
+<a name="l00031"></a>00031 sqlite3_free(errmsg);
+<a name="l00032"></a>00032 <span class="keywordflow">return</span> -1;
+<a name="l00033"></a>00033 }
+<a name="l00034"></a>00034
+<a name="l00035"></a>00035 r = sqlite3_exec(db,
+<a name="l00036"></a>00036 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS playlists_title_idx ON "</span>
+<a name="l00037"></a>00037 <span class="stringliteral">"playlists (title)"</span>,
+<a name="l00038"></a>00038 NULL, NULL, &errmsg);
+<a name="l00039"></a>00039 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00040"></a>00040 fprintf(stderr,
+<a name="l00041"></a>00041 <span class="stringliteral">"ERROR: could not create 'playlists_title_idx' index: %s\n"</span>,
+<a name="l00042"></a>00042 errmsg);
+<a name="l00043"></a>00043 sqlite3_free(errmsg);
+<a name="l00044"></a>00044 <span class="keywordflow">return</span> -2;
+<a name="l00045"></a>00045 }
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00048"></a>00048 <span class="stringliteral">"delete_playlists_on_files_deleted "</span>
+<a name="l00049"></a>00049 <span class="stringliteral">"DELETE ON files FOR EACH ROW BEGIN "</span>
+<a name="l00050"></a>00050 <span class="stringliteral">" DELETE FROM playlists WHERE id = OLD.id; END;"</span>);
+<a name="l00051"></a>00051 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00052"></a>00052 <span class="keywordflow">goto</span> done;
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00055"></a>00055 <span class="stringliteral">"delete_files_on_playlists_deleted "</span>
+<a name="l00056"></a>00056 <span class="stringliteral">"DELETE ON playlists FOR EACH ROW BEGIN "</span>
+<a name="l00057"></a>00057 <span class="stringliteral">" DELETE FROM files WHERE id = OLD.id; END;"</span>);
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 done:
+<a name="l00060"></a>00060 <span class="keywordflow">return</span> ret;
+<a name="l00061"></a>00061 }
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> _db_table_updater_playlists[] = {
+<a name="l00064"></a>00064 _db_table_updater_playlists_0
+<a name="l00065"></a>00065 };
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067
+<a name="l00068"></a>00068 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00069"></a>00069 _db_create_table_if_required(sqlite3 *db)
+<a name="l00070"></a>00070 {
+<a name="l00071"></a>00071 <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="l00072"></a>00072 <a class="code" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">LMS_ARRAY_SIZE</a>(_db_table_updater_playlists),
+<a name="l00073"></a>00073 _db_table_updater_playlists);
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075
+<a name="l00090"></a>00090 <a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *
+<a name="l00091"></a><a class="code" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">00091</a> <a class="code" href="group__LMS__DB.html#g379e3bbb3f4a87b1d389df587dec0875">lms_db_playlist_new</a>(sqlite3 *db)
+<a name="l00092"></a>00092 {
+<a name="l00093"></a>00093 <a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a> *ldp;
+<a name="l00094"></a>00094 <span class="keywordtype">void</span> *p;
+<a name="l00095"></a>00095
+<a name="l00096"></a>00096 <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="l00097"></a>00097 ldp = p;
+<a name="l00098"></a>00098 ldp->_references++;
+<a name="l00099"></a>00099 <span class="keywordflow">return</span> ldp;
+<a name="l00100"></a>00100 }
+<a name="l00101"></a>00101
+<a name="l00102"></a>00102 <span class="keywordflow">if</span> (!db)
+<a name="l00103"></a>00103 <span class="keywordflow">return</span> NULL;
+<a name="l00104"></a>00104
+<a name="l00105"></a>00105 <span class="keywordflow">if</span> (_db_create_table_if_required(db) != 0) {
+<a name="l00106"></a>00106 fprintf(stderr, <span class="stringliteral">"ERROR: could not create table.\n"</span>);
+<a name="l00107"></a>00107 <span class="keywordflow">return</span> NULL;
+<a name="l00108"></a>00108 }
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 ldp = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="group__LMS__DB.html#g9901260afad69e602336a4e567e386c3">lms_db_playlist_t</a>));
+<a name="l00111"></a>00111 ldp->_references = 1;
+<a name="l00112"></a>00112 ldp->db = db;
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 <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="l00115"></a>00115 <a class="code" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">lms_db_playlist_free</a>(ldp);
+<a name="l00116"></a>00116 <span class="keywordflow">return</span> NULL;
+<a name="l00117"></a>00117 }
+<a name="l00118"></a>00118
+<a name="l00119"></a>00119 <span class="keywordflow">return</span> ldp;
+<a name="l00120"></a>00120 }
+<a name="l00121"></a>00121
+<a name="l00134"></a>00134 <span class="keywordtype">int</span>
+<a name="l00135"></a><a class="code" href="group__LMS__DB.html#g9a0ba775eacd1abdc6bfd08c26bbd437">00135</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="l00136"></a>00136 {
+<a name="l00137"></a>00137 <span class="keywordflow">if</span> (!ldp)
+<a name="l00138"></a>00138 <span class="keywordflow">return</span> -1;
+<a name="l00139"></a>00139 <span class="keywordflow">if</span> (ldp->_is_started)
+<a name="l00140"></a>00140 <span class="keywordflow">return</span> 0;
+<a name="l00141"></a>00141
+<a name="l00142"></a>00142 ldp->insert = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(ldp->db,
+<a name="l00143"></a>00143 <span class="stringliteral">"INSERT OR REPLACE INTO playlists (id, title, n_entries) "</span>
+<a name="l00144"></a>00144 <span class="stringliteral">"VALUES (?, ?, ?)"</span>);
+<a name="l00145"></a>00145 <span class="keywordflow">if</span> (!ldp->insert)
+<a name="l00146"></a>00146 <span class="keywordflow">return</span> -2;
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 ldp->_is_started = 1;
+<a name="l00149"></a>00149 <span class="keywordflow">return</span> 0;
+<a name="l00150"></a>00150 }
+<a name="l00151"></a>00151
+<a name="l00164"></a>00164 <span class="keywordtype">int</span>
+<a name="l00165"></a><a class="code" href="group__LMS__DB.html#ge0e003fb6c8deccf8c15a7cedb88c789">00165</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="l00166"></a>00166 {
+<a name="l00167"></a>00167 <span class="keywordtype">int</span> r;
+<a name="l00168"></a>00168
+<a name="l00169"></a>00169 <span class="keywordflow">if</span> (!ldp)
+<a name="l00170"></a>00170 <span class="keywordflow">return</span> -1;
+<a name="l00171"></a>00171 <span class="keywordflow">if</span> (ldp->_references == 0) {
+<a name="l00172"></a>00172 fprintf(stderr, <span class="stringliteral">"ERROR: over-called lms_db_playlist_free(%p)\n"</span>, ldp);
+<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 ldp->_references--;
+<a name="l00177"></a>00177 <span class="keywordflow">if</span> (ldp->_references > 0)
+<a name="l00178"></a>00178 <span class="keywordflow">return</span> 0;
+<a name="l00179"></a>00179
+<a name="l00180"></a>00180 <span class="keywordflow">if</span> (ldp->insert)
+<a name="l00181"></a>00181 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(ldp->insert, <span class="stringliteral">"insert"</span>);
+<a name="l00182"></a>00182
+<a name="l00183"></a>00183 r = <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(&_cache, ldp->db, ldp);
+<a name="l00184"></a>00184 free(ldp);
+<a name="l00185"></a>00185
+<a name="l00186"></a>00186 <span class="keywordflow">return</span> r;
+<a name="l00187"></a>00187 }
+<a name="l00188"></a>00188
+<a name="l00189"></a>00189 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00190"></a>00190 _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="l00191"></a>00191 {
+<a name="l00192"></a>00192 sqlite3_stmt *stmt;
+<a name="l00193"></a>00193 <span class="keywordtype">int</span> r, ret;
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195 stmt = ldp->insert;
+<a name="l00196"></a>00196
+<a name="l00197"></a>00197 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="l00198"></a>00198 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00199"></a>00199 <span class="keywordflow">goto</span> done;
+<a name="l00200"></a>00200
+<a name="l00201"></a>00201 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="l00202"></a>00202 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00203"></a>00203 <span class="keywordflow">goto</span> done;
+<a name="l00204"></a>00204
+<a name="l00205"></a>00205 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="l00206"></a>00206 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00207"></a>00207 <span class="keywordflow">goto</span> done;
+<a name="l00208"></a>00208
+<a name="l00209"></a>00209 r = sqlite3_step(stmt);
+<a name="l00210"></a>00210 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00211"></a>00211 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert playlist info: %s\n"</span>,
+<a name="l00212"></a>00212 sqlite3_errmsg(ldp->db));
+<a name="l00213"></a>00213 ret = -4;
+<a name="l00214"></a>00214 <span class="keywordflow">goto</span> done;
+<a name="l00215"></a>00215 }
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 ret = 0;
+<a name="l00218"></a>00218
+<a name="l00219"></a>00219 done:
+<a name="l00220"></a>00220 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00221"></a>00221
+<a name="l00222"></a>00222 <span class="keywordflow">return</span> ret;
+<a name="l00223"></a>00223 }
+<a name="l00224"></a>00224
+<a name="l00236"></a>00236 <span class="keywordtype">int</span>
+<a name="l00237"></a><a class="code" href="lightmediascanner__db__playlist_8c.html#4fe309efb9c2c24b6e2f77fffca81ee4">00237</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="l00238"></a>00238 {
+<a name="l00239"></a>00239 <span class="keywordflow">if</span> (!ldp)
+<a name="l00240"></a>00240 <span class="keywordflow">return</span> -1;
+<a name="l00241"></a>00241 <span class="keywordflow">if</span> (!info)
+<a name="l00242"></a>00242 <span class="keywordflow">return</span> -2;
+<a name="l00243"></a>00243 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__playlist__info.html#c1b12bb87ec0bdbc356a6f6ce9b7eebf">id</a> < 1)
+<a name="l00244"></a>00244 <span class="keywordflow">return</span> -3;
+<a name="l00245"></a>00245
+<a name="l00246"></a>00246 <span class="keywordflow">return</span> _db_insert(ldp, info);
+<a name="l00247"></a>00247 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_db_playlist.c:<p><center><img src="lightmediascanner__db__playlist_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_db_playlist.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db_playlist.c_map">
+<area shape="rect" href="lightmediascanner__db_8h.html" title="lightmediascanner_db.h" alt="" coords="308,107,457,133"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="287,56,479,83"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="529,107,697,133"><area shape="rect" href="lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="535,157,692,184"><area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="787,107,915,133"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="748,157,953,184"></map>
+
+<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 width="100%"></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#l00237">237</a> of file <a class="el" href="lightmediascanner__db__playlist_8c-source.html">lightmediascanner_db_playlist.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db_8h-source.html#l00120">lms_playlist_info::id</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db_8h.html" title="lightmediascanner_db.h" alt="" coords="308,107,457,133">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="287,56,479,83">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="529,107,697,133">
+<area shape="rect" href="$lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="535,157,692,184">
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="787,107,915,133">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="748,157,953,184">
--- /dev/null
+7f27c971bdef77eda7ac4a4e6b647a3a
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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><a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">00052</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">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#7964337689117d7dc6fb1822378b5848">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#7964337689117d7dc6fb1822378b5848">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><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_db_private.h:<p><center><img src="lightmediascanner__db__private_8h__incl.png" border="0" usemap="#src/lib/lightmediascanner_db_private.h_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db_private.h_map">
+<area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="284,107,452,133"><area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="541,107,669,133"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="503,157,708,184"></map>
+
+<p>
+This graph shows which files directly or indirectly include this file:<p><center><img src="lightmediascanner__db__private_8h__dep__incl.png" border="0" usemap="#src/lib/lightmediascanner_db_private.hdep_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db_private.hdep_map">
+<area shape="rect" href="lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="301,5,504,32"><area shape="rect" href="lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="292,56,513,83"><area shape="rect" href="lightmediascanner__db__common_8c.html" title="src/lib/lightmediascanner_db_common.c" alt="" coords="284,107,521,133"><area shape="rect" href="lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="291,157,515,184"><area shape="rect" href="lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="288,208,517,235"><area shape="rect" href="lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="292,259,513,285"><area shape="rect" href="lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="297,309,508,336"></map>
+
+<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#7964337689117d7dc6fb1822378b5848">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#7964337689117d7dc6fb1822378b5848">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#7964337689117d7dc6fb1822378b5848">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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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>.
+</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 width="100%"></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>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00512">512</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00148">148</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00763">lms_db_get_files()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00231">231</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00212">212</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">lms_db_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">lms_db_update_file_info()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00171">171</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00697">lms_db_delete_file_info()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">lms_db_set_file_dtime()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00190">190</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00125">125</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00250">lms_db_table_version_get()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>.
+</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 width="100%"></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 width="100%"></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 width="100%"></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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00506">506</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_073c254ca7b4d3f42e1be1854bcc42a3_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_073c254ca7b4d3f42e1be1854bcc42a3_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_073c254ca7b4d3f42e1be1854bcc42a3_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="297,5,436,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="487,5,609,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00691">691</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_76941bdbbdb711fff821343e91c2cd97_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_76941bdbbdb711fff821343e91c2cd97_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_76941bdbbdb711fff821343e91c2cd97_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="287,5,425,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="476,5,599,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00533">533</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_09feca4fbfde33d5647cdd5cc2de6500_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_09feca4fbfde33d5647cdd5cc2de6500_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_09feca4fbfde33d5647cdd5cc2de6500_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="287,5,425,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="476,5,599,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00560">560</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_327d54a6dac083e356fd609298a0cbd5_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_327d54a6dac083e356fd609298a0cbd5_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_327d54a6dac083e356fd609298a0cbd5_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="271,5,409,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="460,5,583,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00756">756</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_1cc8a80961a0febdd099a028f3da9c30_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_1cc8a80961a0febdd099a028f3da9c30_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_1cc8a80961a0febdd099a028f3da9c30_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="247,5,385,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="436,5,559,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00646">646</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_bf21f88ddbe28a8290d0df32af0f079c_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_bf21f88ddbe28a8290d0df32af0f079c_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_bf21f88ddbe28a8290d0df32af0f079c_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="284,5,423,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="473,5,596,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00721">721</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_08c34b5b1b6e927a696ff0ce66562f54_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_08c34b5b1b6e927a696ff0ce66562f54_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_08c34b5b1b6e927a696ff0ce66562f54_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="279,5,417,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="468,5,591,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00602">602</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00081">lms_db_compile_stmt()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_69eb9d9058d9432f7658f9adffb79ed6_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_69eb9d9058d9432f7658f9adffb79ed6_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_69eb9d9058d9432f7658f9adffb79ed6_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="289,5,428,32"><area shape="rect" href="lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="479,5,601,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00455">455</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00539">539</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+</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 width="100%"></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 width="100%"></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 width="100%"></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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__common_8c-source.html#l00108">108</a> of file <a class="el" href="lightmediascanner__db__common_8c-source.html">lightmediascanner_db_common.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db__common_8c-source.html#l00016">sqlite3_clear_bindings()</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00697">lms_db_delete_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">lms_db_set_file_dtime()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00250">lms_db_table_version_get()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00284">lms_db_table_version_set()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">lms_db_update_file_info()</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__db__private_8h_ee78f418f0f3c9ead3023b1453c63556_cgraph.png" border="0" usemap="#lightmediascanner__db__private_8h_ee78f418f0f3c9ead3023b1453c63556_cgraph_map" alt=""></center>
+<map name="lightmediascanner__db__private_8h_ee78f418f0f3c9ead3023b1453c63556_cgraph_map">
+<area shape="rect" href="lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="177,5,319,32"></map>
+
+</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 width="100%"></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#7964337689117d7dc6fb1822378b5848">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 width="100%"></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#7964337689117d7dc6fb1822378b5848">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 width="100%"></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 width="100%"></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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="7964337689117d7dc6fb1822378b5848"></a><!-- doxytag: member="lightmediascanner_db_private.h::lms_db_table_updater_t" ref="7964337689117d7dc6fb1822378b5848" 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#7964337689117d7dc6fb1822378b5848">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>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__db__private_8h-source.html#l00052">52</a> of file <a class="el" href="lightmediascanner__db__private_8h-source.html">lightmediascanner_db_private.h</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="297,5,436,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="487,5,609,32">
--- /dev/null
+597cf289a37dec2c079a7e40c848ec2c
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="279,5,417,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="468,5,591,32">
--- /dev/null
+4140a991699f501c103f1dd52e357650
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="287,5,425,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="476,5,599,32">
--- /dev/null
+5a19337cd92bc81a6609fb3efc0944b8
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="247,5,385,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="436,5,559,32">
--- /dev/null
+3cc06df5622a01305fd152e7404ce386
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="271,5,409,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="460,5,583,32">
--- /dev/null
+48dd492320b5d2c740f331d4213ef1e6
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="289,5,428,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="479,5,601,32">
--- /dev/null
+42099300ab356ee9f37a5189393d9a29
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="287,5,425,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="476,5,599,32">
--- /dev/null
+11ab49ab26e02addb26e1495f2117883
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="301,5,504,32">
+<area shape="rect" href="$lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="292,56,513,83">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html" title="src/lib/lightmediascanner_db_common.c" alt="" coords="284,107,521,133">
+<area shape="rect" href="$lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="291,157,515,184">
+<area shape="rect" href="$lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="288,208,517,235">
+<area shape="rect" href="$lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="292,259,513,285">
+<area shape="rect" href="$lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="297,309,508,336">
--- /dev/null
+022f4e74638a0b634545ff86621129c8
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="284,107,452,133">
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="541,107,669,133">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="503,157,708,184">
--- /dev/null
+1f30ce8e217e3bccc71953d3836e1a9f
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b" title="lms_db_compile_stmt" alt="" coords="284,5,423,32">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#21da1a6588f354b758211583559ae405" title="sqlite3_prepare_v2" alt="" coords="473,5,596,32">
--- /dev/null
+70af470fb9b373dbdde441f9c228fdac
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db__common_8c.html#3f8fb8f31c1876b3579956b3d898cd00" title="sqlite3_clear_bindings" alt="" coords="177,5,319,32">
--- /dev/null
+0559150039d6a3e46b15f46277f3053f
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__db_8h.html">lightmediascanner_db.h</a>></span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include "<a class="code" href="lightmediascanner__db__private_8h.html">lightmediascanner_db_private.h</a>"</span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include <stdlib.h></span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include <stdio.h></span>
+<a name="l00005"></a>00005
+<a name="l00006"></a>00006 <span class="keyword">struct </span>lms_db_video {
+<a name="l00007"></a>00007 sqlite3 *db;
+<a name="l00008"></a>00008 sqlite3_stmt *insert;
+<a name="l00009"></a>00009 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _references;
+<a name="l00010"></a>00010 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _is_started:1;
+<a name="l00011"></a>00011 };
+<a name="l00012"></a>00012
+<a name="l00013"></a>00013 <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="l00014"></a>00014
+<a name="l00015"></a>00015 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00016"></a>00016 _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="l00017"></a>00017 <span class="keywordtype">char</span> *errmsg;
+<a name="l00018"></a>00018 <span class="keywordtype">int</span> r, ret;
+<a name="l00019"></a>00019
+<a name="l00020"></a>00020 errmsg = NULL;
+<a name="l00021"></a>00021 r = sqlite3_exec(db,
+<a name="l00022"></a>00022 <span class="stringliteral">"CREATE TABLE IF NOT EXISTS videos ("</span>
+<a name="l00023"></a>00023 <span class="stringliteral">"id INTEGER PRIMARY KEY, "</span>
+<a name="l00024"></a>00024 <span class="stringliteral">"title TEXT, "</span>
+<a name="l00025"></a>00025 <span class="stringliteral">"artist TEXT"</span>
+<a name="l00026"></a>00026 <span class="stringliteral">")"</span>,
+<a name="l00027"></a>00027 NULL, NULL, &errmsg);
+<a name="l00028"></a>00028 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00029"></a>00029 fprintf(stderr, <span class="stringliteral">"ERROR: could not create 'videos' table: %s\n"</span>, errmsg);
+<a name="l00030"></a>00030 sqlite3_free(errmsg);
+<a name="l00031"></a>00031 <span class="keywordflow">return</span> -1;
+<a name="l00032"></a>00032 }
+<a name="l00033"></a>00033
+<a name="l00034"></a>00034 r = sqlite3_exec(db,
+<a name="l00035"></a>00035 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS videos_title_idx ON videos ("</span>
+<a name="l00036"></a>00036 <span class="stringliteral">"title"</span>
+<a name="l00037"></a>00037 <span class="stringliteral">")"</span>,
+<a name="l00038"></a>00038 NULL, NULL, &errmsg);
+<a name="l00039"></a>00039 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00040"></a>00040 fprintf(stderr,
+<a name="l00041"></a>00041 <span class="stringliteral">"ERROR: could not create 'videos_title_idx' index: %s\n"</span>,
+<a name="l00042"></a>00042 errmsg);
+<a name="l00043"></a>00043 sqlite3_free(errmsg);
+<a name="l00044"></a>00044 <span class="keywordflow">return</span> -2;
+<a name="l00045"></a>00045 }
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047 r = sqlite3_exec(db,
+<a name="l00048"></a>00048 <span class="stringliteral">"CREATE INDEX IF NOT EXISTS videos_artist_idx ON videos ("</span>
+<a name="l00049"></a>00049 <span class="stringliteral">"artist"</span>
+<a name="l00050"></a>00050 <span class="stringliteral">")"</span>,
+<a name="l00051"></a>00051 NULL, NULL, &errmsg);
+<a name="l00052"></a>00052 <span class="keywordflow">if</span> (r != SQLITE_OK) {
+<a name="l00053"></a>00053 fprintf(stderr,
+<a name="l00054"></a>00054 <span class="stringliteral">"ERROR: could not create 'videos_artist_idx' index: %s\n"</span>,
+<a name="l00055"></a>00055 errmsg);
+<a name="l00056"></a>00056 sqlite3_free(errmsg);
+<a name="l00057"></a>00057 <span class="keywordflow">return</span> -3;
+<a name="l00058"></a>00058 }
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 ret = <a class="code" href="lightmediascanner__db__common_8c.html#822cae681398710b63c9af149fdacedb">lms_db_create_trigger_if_not_exists</a>(db,
+<a name="l00061"></a>00061 <span class="stringliteral">"delete_videos_on_files_deleted "</span>
+<a name="l00062"></a>00062 <span class="stringliteral">"DELETE ON files FOR EACH ROW BEGIN "</span>
+<a name="l00063"></a>00063 <span class="stringliteral">" DELETE FROM videos WHERE id = OLD.id; END;"</span>);
+<a name="l00064"></a>00064 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00065"></a>00065 <span class="keywordflow">goto</span> done;
+<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_files_on_videos_deleted "</span>
+<a name="l00069"></a>00069 <span class="stringliteral">"DELETE ON videos FOR EACH ROW BEGIN "</span>
+<a name="l00070"></a>00070 <span class="stringliteral">" DELETE FROM files WHERE id = OLD.id; END;"</span>);
+<a name="l00071"></a>00071
+<a name="l00072"></a>00072 done:
+<a name="l00073"></a>00073 <span class="keywordflow">return</span> ret;
+<a name="l00074"></a>00074 }
+<a name="l00075"></a>00075
+<a name="l00076"></a>00076 <span class="keyword">static</span> <a class="code" href="lightmediascanner__db__private_8h.html#7964337689117d7dc6fb1822378b5848">lms_db_table_updater_t</a> _db_table_updater_videos[] = {
+<a name="l00077"></a>00077 _db_table_updater_videos_0
+<a name="l00078"></a>00078 };
+<a name="l00079"></a>00079
+<a name="l00080"></a>00080
+<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00082"></a>00082 _db_create_table_if_required(sqlite3 *db)
+<a name="l00083"></a>00083 {
+<a name="l00084"></a>00084 <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="l00085"></a>00085 <a class="code" href="lightmediascanner__utils_8h.html#13a0622cfcc91eec261da4285621bdcc">LMS_ARRAY_SIZE</a>(_db_table_updater_videos),
+<a name="l00086"></a>00086 _db_table_updater_videos);
+<a name="l00087"></a>00087 }
+<a name="l00088"></a>00088
+<a name="l00103"></a>00103 <a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *
+<a name="l00104"></a><a class="code" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">00104</a> <a class="code" href="group__LMS__DB.html#ga206178e1f883c1bf7a3281f982109b2">lms_db_video_new</a>(sqlite3 *db)
+<a name="l00105"></a>00105 {
+<a name="l00106"></a>00106 <a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a> *ldv;
+<a name="l00107"></a>00107 <span class="keywordtype">void</span> *p;
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109 <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="l00110"></a>00110 ldv = p;
+<a name="l00111"></a>00111 ldv->_references++;
+<a name="l00112"></a>00112 <span class="keywordflow">return</span> ldv;
+<a name="l00113"></a>00113 }
+<a name="l00114"></a>00114
+<a name="l00115"></a>00115 <span class="keywordflow">if</span> (!db)
+<a name="l00116"></a>00116 <span class="keywordflow">return</span> NULL;
+<a name="l00117"></a>00117
+<a name="l00118"></a>00118 <span class="keywordflow">if</span> (_db_create_table_if_required(db) != 0) {
+<a name="l00119"></a>00119 fprintf(stderr, <span class="stringliteral">"ERROR: could not create table.\n"</span>);
+<a name="l00120"></a>00120 <span class="keywordflow">return</span> NULL;
+<a name="l00121"></a>00121 }
+<a name="l00122"></a>00122
+<a name="l00123"></a>00123 ldv = calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="group__LMS__DB.html#gc2e0d2164f90e1ad3c78e05a4d341ec8">lms_db_video_t</a>));
+<a name="l00124"></a>00124 ldv->_references = 1;
+<a name="l00125"></a>00125 ldv->db = db;
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 <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="l00128"></a>00128 <a class="code" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">lms_db_video_free</a>(ldv);
+<a name="l00129"></a>00129 <span class="keywordflow">return</span> NULL;
+<a name="l00130"></a>00130 }
+<a name="l00131"></a>00131
+<a name="l00132"></a>00132 <span class="keywordflow">return</span> ldv;
+<a name="l00133"></a>00133 }
+<a name="l00134"></a>00134
+<a name="l00147"></a>00147 <span class="keywordtype">int</span>
+<a name="l00148"></a><a class="code" href="group__LMS__DB.html#g0ebc0dd37b1c9bcaf7741231a411ade2">00148</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="l00149"></a>00149 {
+<a name="l00150"></a>00150 <span class="keywordflow">if</span> (!ldv)
+<a name="l00151"></a>00151 <span class="keywordflow">return</span> -1;
+<a name="l00152"></a>00152 <span class="keywordflow">if</span> (ldv->_is_started)
+<a name="l00153"></a>00153 <span class="keywordflow">return</span> 0;
+<a name="l00154"></a>00154
+<a name="l00155"></a>00155 ldv->insert = <a class="code" href="lightmediascanner__db__common_8c.html#5fddf47521f83929b0c90a481fa01c5b">lms_db_compile_stmt</a>(ldv->db,
+<a name="l00156"></a>00156 <span class="stringliteral">"INSERT OR REPLACE INTO videos (id, title, artist) VALUES (?, ?, ?)"</span>);
+<a name="l00157"></a>00157 <span class="keywordflow">if</span> (!ldv->insert)
+<a name="l00158"></a>00158 <span class="keywordflow">return</span> -2;
+<a name="l00159"></a>00159
+<a name="l00160"></a>00160 ldv->_is_started = 1;
+<a name="l00161"></a>00161 <span class="keywordflow">return</span> 0;
+<a name="l00162"></a>00162 }
+<a name="l00163"></a>00163
+<a name="l00176"></a>00176 <span class="keywordtype">int</span>
+<a name="l00177"></a><a class="code" href="group__LMS__DB.html#g6be7c0922e76acc29542643424cfeac0">00177</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="l00178"></a>00178 {
+<a name="l00179"></a>00179 <span class="keywordtype">int</span> r;
+<a name="l00180"></a>00180
+<a name="l00181"></a>00181 <span class="keywordflow">if</span> (!ldv)
+<a name="l00182"></a>00182 <span class="keywordflow">return</span> -1;
+<a name="l00183"></a>00183 <span class="keywordflow">if</span> (ldv->_references == 0) {
+<a name="l00184"></a>00184 fprintf(stderr, <span class="stringliteral">"ERROR: over-called lms_db_video_free(%p)\n"</span>, ldv);
+<a name="l00185"></a>00185 <span class="keywordflow">return</span> -1;
+<a name="l00186"></a>00186 }
+<a name="l00187"></a>00187
+<a name="l00188"></a>00188 ldv->_references--;
+<a name="l00189"></a>00189 <span class="keywordflow">if</span> (ldv->_references > 0)
+<a name="l00190"></a>00190 <span class="keywordflow">return</span> 0;
+<a name="l00191"></a>00191
+<a name="l00192"></a>00192 <span class="keywordflow">if</span> (ldv->insert)
+<a name="l00193"></a>00193 <a class="code" href="lightmediascanner__db__common_8c.html#32110a4825e598ca6df329f55b0b62b5">lms_db_finalize_stmt</a>(ldv->insert, <span class="stringliteral">"insert"</span>);
+<a name="l00194"></a>00194
+<a name="l00195"></a>00195 r = <a class="code" href="lightmediascanner__db__common_8c.html#296c81e4c64be1c7935ef31038aeb2c0">lms_db_cache_del</a>(&_cache, ldv->db, ldv);
+<a name="l00196"></a>00196 free(ldv);
+<a name="l00197"></a>00197
+<a name="l00198"></a>00198 <span class="keywordflow">return</span> r;
+<a name="l00199"></a>00199 }
+<a name="l00200"></a>00200
+<a name="l00201"></a>00201 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00202"></a>00202 _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="l00203"></a>00203 {
+<a name="l00204"></a>00204 sqlite3_stmt *stmt;
+<a name="l00205"></a>00205 <span class="keywordtype">int</span> r, ret;
+<a name="l00206"></a>00206
+<a name="l00207"></a>00207 stmt = ldv->insert;
+<a name="l00208"></a>00208
+<a name="l00209"></a>00209 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="l00210"></a>00210 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00211"></a>00211 <span class="keywordflow">goto</span> done;
+<a name="l00212"></a>00212
+<a name="l00213"></a>00213 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="l00214"></a>00214 <span class="keywordflow">if</span> (ret != 0)
+<a name="l00215"></a>00215 <span class="keywordflow">goto</span> done;
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 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="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 r = sqlite3_step(stmt);
+<a name="l00222"></a>00222 <span class="keywordflow">if</span> (r != SQLITE_DONE) {
+<a name="l00223"></a>00223 fprintf(stderr, <span class="stringliteral">"ERROR: could not insert video info: %s\n"</span>,
+<a name="l00224"></a>00224 sqlite3_errmsg(ldv->db));
+<a name="l00225"></a>00225 ret = -4;
+<a name="l00226"></a>00226 <span class="keywordflow">goto</span> done;
+<a name="l00227"></a>00227 }
+<a name="l00228"></a>00228
+<a name="l00229"></a>00229 ret = 0;
+<a name="l00230"></a>00230
+<a name="l00231"></a>00231 done:
+<a name="l00232"></a>00232 <a class="code" href="lightmediascanner__db__common_8c.html#226c6f7ab2e7923b747b7090357ea419">lms_db_reset_stmt</a>(stmt);
+<a name="l00233"></a>00233
+<a name="l00234"></a>00234 <span class="keywordflow">return</span> ret;
+<a name="l00235"></a>00235 }
+<a name="l00236"></a>00236
+<a name="l00248"></a>00248 <span class="keywordtype">int</span>
+<a name="l00249"></a><a class="code" href="lightmediascanner__db__video_8c.html#700adc9c25a70e5cd1d77812324b748e">00249</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="l00250"></a>00250 {
+<a name="l00251"></a>00251 <span class="keywordflow">if</span> (!ldv)
+<a name="l00252"></a>00252 <span class="keywordflow">return</span> -1;
+<a name="l00253"></a>00253 <span class="keywordflow">if</span> (!info)
+<a name="l00254"></a>00254 <span class="keywordflow">return</span> -2;
+<a name="l00255"></a>00255 <span class="keywordflow">if</span> (info-><a class="code" href="structlms__video__info.html#12b5bc5f8b13bdcb3ee1e919a1e05822">id</a> < 1)
+<a name="l00256"></a>00256 <span class="keywordflow">return</span> -3;
+<a name="l00257"></a>00257
+<a name="l00258"></a>00258 <span class="keywordflow">return</span> _db_insert(ldv, info);
+<a name="l00259"></a>00259 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_db_video.c:<p><center><img src="lightmediascanner__db__video_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_db_video.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_db_video.c_map">
+<area shape="rect" href="lightmediascanner__db_8h.html" title="lightmediascanner_db.h" alt="" coords="297,107,447,133"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="276,56,468,83"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="519,107,687,133"><area shape="rect" href="lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="524,157,681,184"><area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="776,107,904,133"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="737,157,943,184"></map>
+
+<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 width="100%"></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#l00249">249</a> of file <a class="el" href="lightmediascanner__db__video_8c-source.html">lightmediascanner_db_video.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__db_8h-source.html#l00106">lms_video_info::id</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db_8h.html" title="lightmediascanner_db.h" alt="" coords="297,107,447,133">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="276,56,468,83">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="519,107,687,133">
+<area shape="rect" href="$lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="524,157,681,184">
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="776,107,904,133">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="737,157,943,184">
--- /dev/null
+a70efaba1e5a3952a0630f7f668a914f
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="l00121"></a>00121 <span class="preprocessor">#ifndef _LIGHTMEDIASCANNER_PLUGIN_H_</span>
+<a name="l00122"></a><a class="code" href="lightmediascanner__plugin_8h.html#25abdf2375defcfc83bf95ef930fc739">00122</a> <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTMEDIASCANNER_PLUGIN_H_ 1</span>
+<a name="l00123"></a>00123 <span class="preprocessor"></span>
+<a name="l00124"></a>00124 <span class="preprocessor">#include <<a class="code" href="lightmediascanner_8h.html">lightmediascanner.h</a>></span>
+<a name="l00125"></a>00125 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__charset__conv_8h.html">lightmediascanner_charset_conv.h</a>></span>
+<a name="l00126"></a>00126 <span class="preprocessor">#include <sqlite3.h></span>
+<a name="l00127"></a>00127 <span class="preprocessor">#include <sys/types.h></span>
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00131"></a>00131 <span class="preprocessor">#endif</span>
+<a name="l00132"></a>00132 <span class="preprocessor"></span>
+<a name="l00133"></a><a class="code" href="structlms__file__info.html">00133</a> <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> {
+<a name="l00134"></a><a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">00134</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>;
+<a name="l00135"></a><a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">00135</a> <span class="keywordtype">int</span> <a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a>;
+<a name="l00136"></a><a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">00136</a> <span class="keywordtype">int</span> <a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a>;
+<a name="l00137"></a><a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">00137</a> int64_t <a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a>;
+<a name="l00138"></a><a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">00138</a> time_t <a class="code" href="structlms__file__info.html#4aa878eefdde84541021087192b9dacd">mtime</a>;
+<a name="l00139"></a><a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">00139</a> time_t <a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>;
+<a name="l00140"></a><a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">00140</a> <span class="keywordtype">size_t</span> <a class="code" href="structlms__file__info.html#b318b81fc934636a904f5d84efe8c1ee">size</a>;
+<a name="l00141"></a>00141 };
+<a name="l00142"></a>00142
+<a name="l00143"></a><a class="code" href="structlms__context.html">00143</a> <span class="keyword">struct </span><a class="code" href="structlms__context.html">lms_context</a> {
+<a name="l00144"></a><a class="code" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">00144</a> sqlite3 *<a class="code" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">db</a>;
+<a name="l00145"></a><a class="code" href="structlms__context.html#a5ce50393bbe62f6357934a1d9ce5a61">00145</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="l00146"></a>00146 };
+<a name="l00147"></a>00147
+<a name="l00148"></a><a class="code" href="lightmediascanner__plugin_8h.html#4374f28037e503b570592aed72a27c15">00148</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="l00149"></a><a class="code" href="lightmediascanner__plugin_8h.html#cc0d2d6d376ca4abd084ad313b4d479c">00149</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#cc0d2d6d376ca4abd084ad313b4d479c">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="l00150"></a><a class="code" href="lightmediascanner__plugin_8h.html#8ce53e0b14aa220d76d552882c1150a4">00150</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#8ce53e0b14aa220d76d552882c1150a4">lms_plugin_close_fn_t</a>)(<a class="code" href="structlms__plugin.html">lms_plugin_t</a> *p);
+<a name="l00151"></a><a class="code" href="lightmediascanner__plugin_8h.html#a8f0f1499d3cfb5fcd6d25928297f45e">00151</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#a8f0f1499d3cfb5fcd6d25928297f45e">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="l00152"></a><a class="code" href="lightmediascanner__plugin_8h.html#d3b811bbff952ce44516c98119d91b30">00152</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#d3b811bbff952ce44516c98119d91b30">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="l00153"></a><a class="code" href="lightmediascanner__plugin_8h.html#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">00153</a> <span class="keyword">typedef</span> int (*<a class="code" href="lightmediascanner__plugin_8h.html#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">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="l00154"></a>00154
+<a name="l00155"></a><a class="code" href="structlms__plugin.html">00155</a> <span class="keyword">struct </span><a class="code" href="structlms__plugin.html">lms_plugin</a> {
+<a name="l00156"></a><a class="code" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">00156</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlms__plugin.html#2048d92b3d8918a6a2bb2cf39a375e9a">name</a>;
+<a name="l00157"></a><a class="code" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">00157</a> <a class="code" href="lightmediascanner__plugin_8h.html#4374f28037e503b570592aed72a27c15">lms_plugin_match_fn_t</a> <a class="code" href="structlms__plugin.html#5b532e6e50911f02fd9e123489c62a0f">match</a>;
+<a name="l00158"></a><a class="code" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">00158</a> <a class="code" href="lightmediascanner__plugin_8h.html#cc0d2d6d376ca4abd084ad313b4d479c">lms_plugin_parse_fn_t</a> <a class="code" href="structlms__plugin.html#0d3361b489eb7c7c4ecc7917c0390b9e">parse</a>;
+<a name="l00159"></a><a class="code" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">00159</a> <a class="code" href="lightmediascanner__plugin_8h.html#8ce53e0b14aa220d76d552882c1150a4">lms_plugin_close_fn_t</a> <a class="code" href="structlms__plugin.html#4921b3b79c7ecdddbe9f1a7c9f5019c7">close</a>;
+<a name="l00160"></a><a class="code" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">00160</a> <a class="code" href="lightmediascanner__plugin_8h.html#a8f0f1499d3cfb5fcd6d25928297f45e">lms_plugin_setup_fn_t</a> <a class="code" href="structlms__plugin.html#aeff2e030242ffdf3bdc512a5ef6cbec">setup</a>;
+<a name="l00161"></a><a class="code" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">00161</a> <a class="code" href="lightmediascanner__plugin_8h.html#d3b811bbff952ce44516c98119d91b30">lms_plugin_start_fn_t</a> <a class="code" href="structlms__plugin.html#b3dffd208749a53ad2eb5ffb6d1b7d07">start</a>;
+<a name="l00162"></a><a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">00162</a> <a class="code" href="lightmediascanner__plugin_8h.html#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">lms_plugin_finish_fn_t</a> <a class="code" href="structlms__plugin.html#839d286e12caa0711f3987adb4b803f0">finish</a>;
+<a name="l00163"></a>00163 };
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00166"></a>00166 <span class="preprocessor"></span>}
+<a name="l00167"></a>00167 <span class="preprocessor">#endif</span>
+<a name="l00168"></a>00168 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_PLUGIN_H_ */</span>
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_plugin.h:<p><center><img src="lightmediascanner__plugin_8h__incl.png" border="0" usemap="#src/lib/lightmediascanner_plugin.h_map" alt=""></center>
+<map name="src/lib/lightmediascanner_plugin.h_map">
+<area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="301,5,429,32"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="263,56,468,83"></map>
+
+<p>
+This graph shows which files directly or indirectly include this file:<p><center><img src="lightmediascanner__plugin_8h__dep__incl.png" border="0" usemap="#src/lib/lightmediascanner_plugin.hdep_map" alt=""></center>
+<map name="src/lib/lightmediascanner_plugin.hdep_map">
+<area shape="rect" href="lightmediascanner__private_8h.html" title="src/lib/lightmediascanner_private.h" alt="" coords="272,95,480,121"><area shape="rect" href="lightmediascanner_8c.html" title="src/lib/lightmediascanner.c" alt="" coords="576,5,741,32"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="src/lib/lightmediascanner_db_private.h" alt="" coords="261,183,491,209"><area shape="rect" href="lightmediascanner__db_8h.html" title="src/lib/lightmediascanner_db.h" alt="" coords="283,259,469,285"><area shape="rect" href="lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="557,56,760,83"><area shape="rect" href="lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="553,107,764,133"><area shape="rect" href="lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="548,309,769,336"><area shape="rect" href="lightmediascanner__db__common_8c.html" title="src/lib/lightmediascanner_db_common.c" alt="" coords="540,157,777,184"><area shape="rect" href="lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="547,360,771,387"><area shape="rect" href="lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="544,208,773,235"><area shape="rect" href="lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="548,259,769,285"></map>
+
+<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 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#4374f28037e503b570592aed72a27c15">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#cc0d2d6d376ca4abd084ad313b4d479c">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#8ce53e0b14aa220d76d552882c1150a4">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#a8f0f1499d3cfb5fcd6d25928297f45e">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#d3b811bbff952ce44516c98119d91b30">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#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">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#l00122">122</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="8ce53e0b14aa220d76d552882c1150a4"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_close_fn_t" ref="8ce53e0b14aa220d76d552882c1150a4" 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#8ce53e0b14aa220d76d552882c1150a4">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#l00150">150</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</div>
+</div><p>
+<a class="anchor" name="b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_finish_fn_t" ref="b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7" 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#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">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#l00153">153</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</div>
+</div><p>
+<a class="anchor" name="4374f28037e503b570592aed72a27c15"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_match_fn_t" ref="4374f28037e503b570592aed72a27c15" 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#4374f28037e503b570592aed72a27c15">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#l00148">148</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</div>
+</div><p>
+<a class="anchor" name="cc0d2d6d376ca4abd084ad313b4d479c"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_parse_fn_t" ref="cc0d2d6d376ca4abd084ad313b4d479c" 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#cc0d2d6d376ca4abd084ad313b4d479c">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#l00149">149</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</div>
+</div><p>
+<a class="anchor" name="a8f0f1499d3cfb5fcd6d25928297f45e"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_setup_fn_t" ref="a8f0f1499d3cfb5fcd6d25928297f45e" 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#a8f0f1499d3cfb5fcd6d25928297f45e">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#l00151">151</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</div>
+</div><p>
+<a class="anchor" name="d3b811bbff952ce44516c98119d91b30"></a><!-- doxytag: member="lightmediascanner_plugin.h::lms_plugin_start_fn_t" ref="d3b811bbff952ce44516c98119d91b30" 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#d3b811bbff952ce44516c98119d91b30">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#l00152">152</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:04 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__private_8h.html" title="src/lib/lightmediascanner_private.h" alt="" coords="272,95,480,121">
+<area shape="rect" href="$lightmediascanner_8c.html" title="src/lib/lightmediascanner.c" alt="" coords="576,5,741,32">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="src/lib/lightmediascanner_db_private.h" alt="" coords="261,183,491,209">
+<area shape="rect" href="$lightmediascanner__db_8h.html" title="src/lib/lightmediascanner_db.h" alt="" coords="283,259,469,285">
+<area shape="rect" href="$lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="557,56,760,83">
+<area shape="rect" href="$lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="553,107,764,133">
+<area shape="rect" href="$lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="548,309,769,336">
+<area shape="rect" href="$lightmediascanner__db__common_8c.html" title="src/lib/lightmediascanner_db_common.c" alt="" coords="540,157,777,184">
+<area shape="rect" href="$lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="547,360,771,387">
+<area shape="rect" href="$lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="544,208,773,235">
+<area shape="rect" href="$lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="548,259,769,285">
--- /dev/null
+028a480f4edc1e7a571f0025d6804f4b
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="301,5,429,32">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="263,56,468,83">
--- /dev/null
+d7a79bb71161929390f7080b91f24c07
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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>00049 <span class="comment">/* info to be carried along lms_process() and lms_check() */</span>
+<a name="l00050"></a><a class="code" href="structpinfo.html">00050</a> <span class="keyword">struct </span><a class="code" href="structpinfo.html">pinfo</a> {
+<a name="l00051"></a><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">00051</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="l00052"></a><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">00052</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="l00053"></a><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">00053</a> <span class="keyword">struct </span>pollfd poll;
+<a name="l00054"></a><a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">00054</a> <a class="code" href="structlms.html">lms_t</a> *<a class="code" href="structlms.html">lms</a>;
+<a name="l00055"></a><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">00055</a> pid_t <a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>;
+<a name="l00056"></a>00056 };
+<a name="l00057"></a>00057
+<a name="l00058"></a><a class="code" href="structparser.html">00058</a> <span class="keyword">struct </span><a class="code" href="structparser.html">parser</a> {
+<a name="l00059"></a><a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">00059</a> <a class="code" href="structlms__plugin.html">lms_plugin_t</a> *<a class="code" href="structparser.html#6c71e3299d4bac660320e7ca935f9b32">plugin</a>;
+<a name="l00060"></a><a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">00060</a> <span class="keywordtype">void</span> *<a class="code" href="structparser.html#3dd2a049d1cd9229ec33645e28803e0a">dl_handle</a>;
+<a name="l00061"></a><a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">00061</a> <span class="keywordtype">char</span> *<a class="code" href="structparser.html#f29cac42dbdf498606fae3f5b9fc3762">so_path</a>;
+<a name="l00062"></a>00062 };
+<a name="l00063"></a>00063
+<a name="l00064"></a><a class="code" href="structlms.html">00064</a> <span class="keyword">struct </span><a class="code" href="structlms.html">lms</a> {
+<a name="l00065"></a><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">00065</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="l00066"></a><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">00066</a> <span class="keywordtype">int</span> <a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a>;
+<a name="l00067"></a><a class="code" href="structlms.html#eba2db305bafddedf143ff7b9f2396db">00067</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="l00068"></a><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">00068</a> <span class="keywordtype">char</span> *<a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>;
+<a name="l00069"></a><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">00069</a> <span class="keywordtype">int</span> <a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>;
+<a name="l00070"></a><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">00070</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>;
+<a name="l00071"></a><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">00071</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>:1;
+<a name="l00072"></a>00072 };
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <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="l00075"></a>00075 <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="l00076"></a>00076 <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="l00077"></a>00077 <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="l00078"></a>00078 <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="l00079"></a>00079 <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="l00080"></a>00080
+<a name="l00081"></a>00081 <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="l00082"></a>00082 <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="l00083"></a>00083 <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="l00084"></a>00084 <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="l00085"></a>00085 <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="l00086"></a>00086
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088 <span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_PRIVATE_H_ */</span>
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_private.h:<p><center><img src="lightmediascanner__private_8h__incl.png" border="0" usemap="#src/lib/lightmediascanner_private.h_map" alt=""></center>
+<map name="src/lib/lightmediascanner_private.h_map">
+<area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="523,5,651,32"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="265,100,433,127"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="484,68,689,95"></map>
+
+<p>
+This graph shows which files directly or indirectly include this file:<p><center><img src="lightmediascanner__private_8h__dep__incl.png" border="0" usemap="#src/lib/lightmediascanner_private.hdep_map" alt=""></center>
+<map name="src/lib/lightmediascanner_private.hdep_map">
+<area shape="rect" href="lightmediascanner_8c.html" title="src/lib/lightmediascanner.c" alt="" coords="288,5,453,32"><area shape="rect" href="lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="269,56,472,83"><area shape="rect" href="lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="265,107,476,133"></map>
+
+<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="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="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>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 <br>
+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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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>.
+</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 width="100%"></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>.
+</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>
+Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00618">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00566">566</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00051">pinfo::master</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00052">pinfo::slave</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00618">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00577">577</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00051">pinfo::master</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00053">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#l00052">pinfo::slave</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00046">fds::w</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00618">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00664">lms_restart_slave()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner_8c-source.html#l00249">249</a> of file <a class="el" href="lightmediascanner_8c-source.html">lightmediascanner.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00289">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>.
+</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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<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 width="100%"></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 width="100%"></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 width="100%"></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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8c.html" title="src/lib/lightmediascanner.c" alt="" coords="288,5,453,32">
+<area shape="rect" href="$lightmediascanner__check_8c.html" title="src/lib/lightmediascanner_check.c" alt="" coords="269,56,472,83">
+<area shape="rect" href="$lightmediascanner__process_8c.html" title="src/lib/lightmediascanner_process.c" alt="" coords="265,107,476,133">
--- /dev/null
+4d417d15d050e1821629b1854b390812
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="523,5,651,32">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="265,100,433,127">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="484,68,689,95">
--- /dev/null
+964dddbac26f6db485044d09051fa27b
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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->name, r);
+<a name="l00309"></a>00309 plugin->finish(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 *<a class="code" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">db</a>)
+<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->name, r);
+<a name="l00335"></a>00335 plugin->finish(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 *<a class="code" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">db</a>)
+<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->name, 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 *<a class="code" href="structlms__context.html#310d38a2fab9ecea67601d0c6a3d8d81">db</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="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 _slave_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 name="l00420"></a>00420 {
+<a name="l00421"></a>00421 <span class="keywordtype">int</span> r, len, base, counter;
+<a name="l00422"></a>00422 <span class="keywordtype">char</span> path[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>];
+<a name="l00423"></a>00423 <span class="keywordtype">void</span> **parser_match;
+<a name="l00424"></a>00424 <span class="keyword">struct </span>db *db;
+<a name="l00425"></a>00425
+<a name="l00426"></a>00426 db = _db_open(lms-><a class="code" href="structlms.html#02e767169813808f193c23733ba89b4b">db_path</a>);
+<a name="l00427"></a>00427 <span class="keywordflow">if</span> (!db)
+<a name="l00428"></a>00428 <span class="keywordflow">return</span> -1;
+<a name="l00429"></a>00429
+<a name="l00430"></a>00430 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#028ef9d19863e8d0ebac1b84b1cb9174">lms_parsers_setup</a>(lms, db->handle) != 0) {
+<a name="l00431"></a>00431 fprintf(stderr, <span class="stringliteral">"ERROR: could not setup parsers.\n"</span>);
+<a name="l00432"></a>00432 r = -2;
+<a name="l00433"></a>00433 <span class="keywordflow">goto</span> end;
+<a name="l00434"></a>00434 }
+<a name="l00435"></a>00435
+<a name="l00436"></a>00436 <span class="keywordflow">if</span> (_db_compile_all_stmts(db) != 0) {
+<a name="l00437"></a>00437 fprintf(stderr, <span class="stringliteral">"ERROR: could not compile statements.\n"</span>);
+<a name="l00438"></a>00438 r = -3;
+<a name="l00439"></a>00439 <span class="keywordflow">goto</span> end;
+<a name="l00440"></a>00440 }
+<a name="l00441"></a>00441
+<a name="l00442"></a>00442 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#2c1f40ac6080c682c2f71172cc76f7e0">lms_parsers_start</a>(lms, db->handle) != 0) {
+<a name="l00443"></a>00443 fprintf(stderr, <span class="stringliteral">"ERROR: could not start parsers.\n"</span>);
+<a name="l00444"></a>00444 r = -4;
+<a name="l00445"></a>00445 <span class="keywordflow">goto</span> end;
+<a name="l00446"></a>00446 }
+<a name="l00447"></a>00447 <span class="keywordflow">if</span> (lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> < 1) {
+<a name="l00448"></a>00448 fprintf(stderr, <span class="stringliteral">"ERROR: no parser could be started, exit.\n"</span>);
+<a name="l00449"></a>00449 r = -5;
+<a name="l00450"></a>00450 <span class="keywordflow">goto</span> end;
+<a name="l00451"></a>00451 }
+<a name="l00452"></a>00452
+<a name="l00453"></a>00453 parser_match = malloc(lms-><a class="code" href="structlms.html#9cdd3a937a0a2bd4515e9e888bb519e3">n_parsers</a> * <span class="keyword">sizeof</span>(*parser_match));
+<a name="l00454"></a>00454 <span class="keywordflow">if</span> (!parser_match) {
+<a name="l00455"></a>00455 perror(<span class="stringliteral">"malloc"</span>);
+<a name="l00456"></a>00456 r = -6;
+<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 counter = 0;
+<a name="l00461"></a>00461 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00462"></a>00462
+<a name="l00463"></a>00463 <span class="keywordflow">while</span> (((r = _slave_recv_path(fds, &len, &base, path)) == 0) && len > 0) {
+<a name="l00464"></a>00464 <span class="keyword">struct </span><a class="code" href="structlms__file__info.html">lms_file_info</a> finfo;
+<a name="l00465"></a>00465 <span class="keywordtype">int</span> used, r;
+<a name="l00466"></a>00466
+<a name="l00467"></a>00467 finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a> = path;
+<a name="l00468"></a>00468 finfo.<a class="code" href="structlms__file__info.html#9d74df2696cfd0f516e61e9db2b35731">path_len</a> = len;
+<a name="l00469"></a>00469 finfo.<a class="code" href="structlms__file__info.html#ccc82711360714ff6ccd373fb7a42112">base</a> = base;
+<a name="l00470"></a>00470
+<a name="l00471"></a>00471 r = _retrieve_file_status(db, &finfo);
+<a name="l00472"></a>00472 <span class="keywordflow">if</span> (r == 0) {
+<a name="l00473"></a>00473 <span class="keywordflow">if</span> (finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a>) {
+<a name="l00474"></a>00474 finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = 0;
+<a name="l00475"></a>00475 <a class="code" href="lightmediascanner__db__common_8c.html#024e3bd9385fd740f75618716c90b04f">lms_db_set_file_dtime</a>(db->set_file_dtime, &finfo);
+<a name="l00476"></a>00476 }
+<a name="l00477"></a>00477 <span class="keywordflow">goto</span> inform_end;
+<a name="l00478"></a>00478 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r < 0) {
+<a name="l00479"></a>00479 fprintf(stderr, <span class="stringliteral">"ERROR: could not detect file status.\n"</span>);
+<a name="l00480"></a>00480 <span class="keywordflow">goto</span> inform_end;
+<a name="l00481"></a>00481 }
+<a name="l00482"></a>00482
+<a name="l00483"></a>00483 used = <a class="code" href="lightmediascanner__private_8h.html#f92504ffd52b8b1d7d90b786af90d1ef">lms_parsers_check_using</a>(lms, parser_match, &finfo);
+<a name="l00484"></a>00484 <span class="keywordflow">if</span> (!used)
+<a name="l00485"></a>00485 <span class="keywordflow">goto</span> inform_end;
+<a name="l00486"></a>00486
+<a name="l00487"></a>00487 finfo.<a class="code" href="structlms__file__info.html#570ae808983e67ae7b22a2fec892cffd">dtime</a> = 0;
+<a name="l00488"></a>00488 <span class="keywordflow">if</span> (finfo.<a class="code" href="structlms__file__info.html#d68ded5c64ae28a4976637f8483e9cfe">id</a> > 0)
+<a name="l00489"></a>00489 r = <a class="code" href="lightmediascanner__db__common_8c.html#0f727cd41bbb90af2e08b3ee7ca76de9">lms_db_update_file_info</a>(db->update_file_info, &finfo);
+<a name="l00490"></a>00490 <span class="keywordflow">else</span>
+<a name="l00491"></a>00491 r = <a class="code" href="lightmediascanner__db__common_8c.html#e529ad5c4478d53685c65ec69dc5b1f4">lms_db_insert_file_info</a>(db->insert_file_info, &finfo);
+<a name="l00492"></a>00492 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00493"></a>00493 fprintf(stderr, <span class="stringliteral">"ERROR: could not register path in DB\n"</span>);
+<a name="l00494"></a>00494 <span class="keywordflow">goto</span> inform_end;
+<a name="l00495"></a>00495 }
+<a name="l00496"></a>00496
+<a name="l00497"></a>00497 r = <a class="code" href="lightmediascanner__private_8h.html#f61d9ef6ae2e576705bbd445db919e6c">lms_parsers_run</a>(lms, db->handle, parser_match, &finfo);
+<a name="l00498"></a>00498 <span class="keywordflow">if</span> (r < 0) {
+<a name="l00499"></a>00499 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00500"></a>00500 getpid(), finfo.<a class="code" href="structlms__file__info.html#1fa6966afec95bbb00ee01f345948e44">path</a>);
+<a name="l00501"></a>00501 <a class="code" href="lightmediascanner__db__common_8c.html#bb2a9cdbbc7680d1ec85ef3f086b3f63">lms_db_delete_file_info</a>(db->delete_file_info, &finfo);
+<a name="l00502"></a>00502 }
+<a name="l00503"></a>00503
+<a name="l00504"></a>00504 inform_end:
+<a name="l00505"></a>00505 _slave_send_reply(fds, r);
+<a name="l00506"></a>00506 counter++;
+<a name="l00507"></a>00507 <span class="keywordflow">if</span> (counter > lms-><a class="code" href="structlms.html#1dc82aac2ab3ff643027878bb1aa3cb8">commit_interval</a>) {
+<a name="l00508"></a>00508 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00509"></a>00509 <a class="code" href="lightmediascanner__db__common_8c.html#5ff807216285c93325ffaf33361dd6fc">lms_db_begin_transaction</a>(db->transaction_begin);
+<a name="l00510"></a>00510 counter = 0;
+<a name="l00511"></a>00511 }
+<a name="l00512"></a>00512 }
+<a name="l00513"></a>00513
+<a name="l00514"></a>00514 free(parser_match);
+<a name="l00515"></a>00515 <a class="code" href="lightmediascanner__db__common_8c.html#ffa877e4fa751f090e7af8c2025d245c">lms_db_end_transaction</a>(db->transaction_commit);
+<a name="l00516"></a>00516 end:
+<a name="l00517"></a>00517 <a class="code" href="lightmediascanner__private_8h.html#74adcb264b3092f3ae9249de93f9130f">lms_parsers_finish</a>(lms, db->handle);
+<a name="l00518"></a>00518 _db_close(db);
+<a name="l00519"></a>00519
+<a name="l00520"></a>00520 <span class="keywordflow">return</span> r;
+<a name="l00521"></a>00521 }
+<a name="l00522"></a>00522
+<a name="l00523"></a>00523
+<a name="l00524"></a>00524 <span class="comment">/***********************************************************************</span>
+<a name="l00525"></a>00525 <span class="comment"> * Master-side.</span>
+<a name="l00526"></a>00526 <span class="comment"> ***********************************************************************/</span>
+<a name="l00527"></a>00527
+<a name="l00528"></a>00528 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00529"></a>00529 _consume_garbage(<span class="keyword">struct</span> pollfd *pfd)
+<a name="l00530"></a>00530 {
+<a name="l00531"></a>00531 <span class="keywordtype">int</span> r;
+<a name="l00532"></a>00532
+<a name="l00533"></a>00533 <span class="keywordflow">while</span> ((r = poll(pfd, 1, 0)) > 0) {
+<a name="l00534"></a>00534 <span class="keywordflow">if</span> (pfd->revents & (POLLERR | POLLHUP | POLLNVAL))
+<a name="l00535"></a>00535 <span class="keywordflow">return</span> 0;
+<a name="l00536"></a>00536 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfd->revents & POLLIN) {
+<a name="l00537"></a>00537 <span class="keywordtype">char</span> c;
+<a name="l00538"></a>00538
+<a name="l00539"></a>00539 read(pfd->fd, &c, <span class="keyword">sizeof</span>(c));
+<a name="l00540"></a>00540 }
+<a name="l00541"></a>00541 }
+<a name="l00542"></a>00542
+<a name="l00543"></a>00543 <span class="keywordflow">return</span> r;
+<a name="l00544"></a>00544 }
+<a name="l00545"></a>00545
+<a name="l00546"></a>00546 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00547"></a>00547 _close_fds(<span class="keyword">struct</span> fds *fds)
+<a name="l00548"></a>00548 {
+<a name="l00549"></a>00549 <span class="keywordtype">int</span> r;
+<a name="l00550"></a>00550
+<a name="l00551"></a>00551 r = 0;
+<a name="l00552"></a>00552 <span class="keywordflow">if</span> (close(fds-><a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>) != 0) {
+<a name="l00553"></a>00553 r--;
+<a name="l00554"></a>00554 perror(<span class="stringliteral">"close"</span>);
+<a name="l00555"></a>00555 }
+<a name="l00556"></a>00556
+<a name="l00557"></a>00557 <span class="keywordflow">if</span> (close(fds-><a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>) != 0) {
+<a name="l00558"></a>00558 r--;
+<a name="l00559"></a>00559 perror(<span class="stringliteral">"close"</span>);
+<a name="l00560"></a>00560 }
+<a name="l00561"></a>00561
+<a name="l00562"></a>00562 <span class="keywordflow">return</span> r;
+<a name="l00563"></a>00563 }
+<a name="l00564"></a>00564
+<a name="l00565"></a>00565 <span class="keywordtype">int</span>
+<a name="l00566"></a><a class="code" href="lightmediascanner__process_8c.html#6b68b00b80a98a178c7d69b962267a11">00566</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="l00567"></a>00567 {
+<a name="l00568"></a>00568 <span class="keywordtype">int</span> r;
+<a name="l00569"></a>00569
+<a name="l00570"></a>00570 r = _close_fds(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>);
+<a name="l00571"></a>00571 r += _close_fds(&pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>);
+<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="keywordtype">int</span>
+<a name="l00577"></a><a class="code" href="lightmediascanner__process_8c.html#c2e1320b9770e0f522451b13f82efc2b">00577</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="l00578"></a>00578 {
+<a name="l00579"></a>00579 <span class="keywordtype">int</span> fds[2];
+<a name="l00580"></a>00580
+<a name="l00581"></a>00581 <span class="keywordflow">if</span> (pipe(fds) != 0) {
+<a name="l00582"></a>00582 perror(<span class="stringliteral">"pipe"</span>);
+<a name="l00583"></a>00583 <span class="keywordflow">return</span> -1;
+<a name="l00584"></a>00584 }
+<a name="l00585"></a>00585 pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>.<a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a> = fds[0];
+<a name="l00586"></a>00586 pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>.<a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a> = fds[1];
+<a name="l00587"></a>00587
+<a name="l00588"></a>00588 <span class="keywordflow">if</span> (pipe(fds) != 0) {
+<a name="l00589"></a>00589 perror(<span class="stringliteral">"pipe"</span>);
+<a name="l00590"></a>00590 close(pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>.<a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a>);
+<a name="l00591"></a>00591 close(pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>.<a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a>);
+<a name="l00592"></a>00592 <span class="keywordflow">return</span> -1;
+<a name="l00593"></a>00593 }
+<a name="l00594"></a>00594 pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>.<a class="code" href="structfds.html#c49bfa8d58564d4c483eb434b9ff5710">r</a> = fds[0];
+<a name="l00595"></a>00595 pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>.<a class="code" href="structfds.html#d13e19697072e306771103286a8316d0">w</a> = fds[1];
+<a name="l00596"></a>00596
+<a name="l00597"></a>00597 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="l00598"></a>00598 pinfo-><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>.events = POLLIN;
+<a name="l00599"></a>00599
+<a name="l00600"></a>00600 <span class="keywordflow">return</span> 0;
+<a name="l00601"></a>00601 }
+<a name="l00602"></a>00602
+<a name="l00603"></a>00603 <span class="keywordtype">int</span>
+<a name="l00604"></a><a class="code" href="lightmediascanner__process_8c.html#e92fe8fe90d93d5ad9a42387a4b2fc6e">00604</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="l00605"></a>00605 {
+<a name="l00606"></a>00606 <span class="keywordtype">int</span> r;
+<a name="l00607"></a>00607
+<a name="l00608"></a>00608 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> = fork();
+<a name="l00609"></a>00609 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> == -1) {
+<a name="l00610"></a>00610 perror(<span class="stringliteral">"fork"</span>);
+<a name="l00611"></a>00611 <span class="keywordflow">return</span> -1;
+<a name="l00612"></a>00612 }
+<a name="l00613"></a>00613
+<a name="l00614"></a>00614 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> > 0)
+<a name="l00615"></a>00615 <span class="keywordflow">return</span> 0;
+<a name="l00616"></a>00616
+<a name="l00617"></a>00617 _close_fds(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>);
+<a name="l00618"></a>00618 nice(19);
+<a name="l00619"></a>00619 r = work(pinfo-><a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>, &pinfo-><a class="code" href="structpinfo.html#62bbc538af7f9e1d6aa9073458d5cc52">slave</a>);
+<a name="l00620"></a>00620 <a class="code" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687">lms_free</a>(pinfo-><a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>);
+<a name="l00621"></a>00621 _exit(r);
+<a name="l00622"></a>00622 <span class="keywordflow">return</span> r; <span class="comment">/* shouldn't reach anyway... */</span>
+<a name="l00623"></a>00623 }
+<a name="l00624"></a>00624
+<a name="l00625"></a>00625 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00626"></a>00626 _waitpid(pid_t pid)
+<a name="l00627"></a>00627 {
+<a name="l00628"></a>00628 <span class="keywordtype">int</span> status;
+<a name="l00629"></a>00629 pid_t r;
+<a name="l00630"></a>00630
+<a name="l00631"></a>00631 r = waitpid(pid, &status, 0);
+<a name="l00632"></a>00632 <span class="keywordflow">if</span> (r > -1)
+<a name="l00633"></a>00633 <span class="keywordflow">return</span> 0;
+<a name="l00634"></a>00634 <span class="keywordflow">else</span>
+<a name="l00635"></a>00635 perror(<span class="stringliteral">"waitpid"</span>);
+<a name="l00636"></a>00636
+<a name="l00637"></a>00637 <span class="keywordflow">return</span> r;
+<a name="l00638"></a>00638 }
+<a name="l00639"></a>00639
+<a name="l00640"></a>00640 <span class="keywordtype">int</span>
+<a name="l00641"></a><a class="code" href="lightmediascanner__process_8c.html#9f980636d608c6af99477ba37e196050">00641</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="l00642"></a>00642 {
+<a name="l00643"></a>00643 <span class="keywordtype">int</span> r;
+<a name="l00644"></a>00644
+<a name="l00645"></a>00645 <span class="keywordflow">if</span> (pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> <= 0)
+<a name="l00646"></a>00646 <span class="keywordflow">return</span> 0;
+<a name="l00647"></a>00647
+<a name="l00648"></a>00648 r = finish(&pinfo-><a class="code" href="structpinfo.html#246dfd29e81101866ccb01cc70224156">master</a>);
+<a name="l00649"></a>00649 <span class="keywordflow">if</span> (r == 0)
+<a name="l00650"></a>00650 r = _waitpid(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00651"></a>00651 <span class="keywordflow">else</span> {
+<a name="l00652"></a>00652 r = kill(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>, SIGKILL);
+<a name="l00653"></a>00653 <span class="keywordflow">if</span> (r < 0)
+<a name="l00654"></a>00654 perror(<span class="stringliteral">"kill"</span>);
+<a name="l00655"></a>00655 <span class="keywordflow">else</span>
+<a name="l00656"></a>00656 r =_waitpid(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00657"></a>00657 }
+<a name="l00658"></a>00658 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> = 0;
+<a name="l00659"></a>00659
+<a name="l00660"></a>00660 <span class="keywordflow">return</span> r;
+<a name="l00661"></a>00661 }
+<a name="l00662"></a>00662
+<a name="l00663"></a>00663 <span class="keywordtype">int</span>
+<a name="l00664"></a><a class="code" href="lightmediascanner__process_8c.html#9bf510645947b478dab39f633bbd35f3">00664</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="l00665"></a>00665 {
+<a name="l00666"></a>00666 <span class="keywordtype">int</span> status;
+<a name="l00667"></a>00667
+<a name="l00668"></a>00668 <span class="keywordflow">if</span> (waitpid(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>, &status, WNOHANG) > 0) {
+<a name="l00669"></a>00669 <span class="keywordflow">if</span> (WIFEXITED(status)) {
+<a name="l00670"></a>00670 <span class="keywordtype">int</span> code;
+<a name="l00671"></a>00671
+<a name="l00672"></a>00672 code = WEXITSTATUS(status);
+<a name="l00673"></a>00673 <span class="keywordflow">if</span> (code != 0) {
+<a name="l00674"></a>00674 fprintf(stderr, <span class="stringliteral">"ERROR: slave returned %d, exit.\n"</span>, code);
+<a name="l00675"></a>00675 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> = 0;
+<a name="l00676"></a>00676 <span class="keywordflow">return</span> -1;
+<a name="l00677"></a>00677 }
+<a name="l00678"></a>00678 } <span class="keywordflow">else</span> {
+<a name="l00679"></a>00679 <span class="keywordflow">if</span> (WIFSIGNALED(status)) {
+<a name="l00680"></a>00680 <span class="keywordtype">int</span> code;
+<a name="l00681"></a>00681
+<a name="l00682"></a>00682 code = WTERMSIG(status);
+<a name="l00683"></a>00683 fprintf(stderr, <span class="stringliteral">"ERROR: slave was terminated by signal %d.\n"</span>,
+<a name="l00684"></a>00684 code);
+<a name="l00685"></a>00685 }
+<a name="l00686"></a>00686 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a> = 0;
+<a name="l00687"></a>00687 <span class="keywordflow">return</span> -1;
+<a name="l00688"></a>00688 }
+<a name="l00689"></a>00689 }
+<a name="l00690"></a>00690
+<a name="l00691"></a>00691 <span class="keywordflow">if</span> (kill(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>, SIGKILL))
+<a name="l00692"></a>00692 perror(<span class="stringliteral">"kill"</span>);
+<a name="l00693"></a>00693
+<a name="l00694"></a>00694 <span class="keywordflow">if</span> (waitpid(pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>, &status, 0) < 0)
+<a name="l00695"></a>00695 perror(<span class="stringliteral">"waitpid"</span>);
+<a name="l00696"></a>00696
+<a name="l00697"></a>00697 _consume_garbage(&pinfo-><a class="code" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a>);
+<a name="l00698"></a>00698 <span class="keywordflow">return</span> <a class="code" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a>(pinfo, work);
+<a name="l00699"></a>00699 }
+<a name="l00700"></a>00700
+<a name="l00701"></a>00701 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00702"></a>00702 _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="l00703"></a>00703 {
+<a name="l00704"></a>00704 <span class="keywordtype">int</span> new_len, name_len;
+<a name="l00705"></a>00705
+<a name="l00706"></a>00706 name_len = strlen(name);
+<a name="l00707"></a>00707 new_len = base + name_len;
+<a name="l00708"></a>00708
+<a name="l00709"></a>00709 <span class="keywordflow">if</span> (new_len >= <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>) {
+<a name="l00710"></a>00710 path[base] = <span class="charliteral">'\0'</span>;
+<a name="l00711"></a>00711 fprintf(stderr,
+<a name="l00712"></a>00712 <span class="stringliteral">"ERROR: path concatenation too long %d of %d "</span>
+<a name="l00713"></a>00713 <span class="stringliteral">"available: \"%s\" + \"%s\"\n"</span>, new_len, <a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>,
+<a name="l00714"></a>00714 path, name);
+<a name="l00715"></a>00715 <span class="keywordflow">return</span> -1;
+<a name="l00716"></a>00716 }
+<a name="l00717"></a>00717
+<a name="l00718"></a>00718 memcpy(path + base, name, name_len + 1);
+<a name="l00719"></a>00719
+<a name="l00720"></a>00720 <span class="keywordflow">return</span> new_len;
+<a name="l00721"></a>00721 }
+<a name="l00722"></a>00722
+<a name="l00723"></a>00723 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00724"></a>00724 _process_file(<span class="keyword">struct</span> pinfo *pinfo, <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="l00725"></a>00725 {
+<a name="l00726"></a>00726 <span class="keywordtype">int</span> new_len, reply, r;
+<a name="l00727"></a>00727
+<a name="l00728"></a>00728 new_len = _strcat(base, path, name);
+<a name="l00729"></a>00729 <span class="keywordflow">if</span> (new_len < 0)
+<a name="l00730"></a>00730 <span class="keywordflow">return</span> -1;
+<a name="l00731"></a>00731
+<a name="l00732"></a>00732 <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="l00733"></a>00733 <span class="keywordflow">return</span> -2;
+<a name="l00734"></a>00734
+<a name="l00735"></a>00735 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="l00736"></a>00736 pinfo-><a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#0f545adf2fc37994b7f55f7ea7aac555">slave_timeout</a>);
+<a name="l00737"></a>00737 <span class="keywordflow">if</span> (r < 0)
+<a name="l00738"></a>00738 <span class="keywordflow">return</span> -3;
+<a name="l00739"></a>00739 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (r == 1) {
+<a name="l00740"></a>00740 fprintf(stderr, <span class="stringliteral">"ERROR: slave took too long, restart %d\n"</span>,
+<a name="l00741"></a>00741 pinfo-><a class="code" href="structpinfo.html#d31b28f6373d19531cd208c4c2a71a51">child</a>);
+<a name="l00742"></a>00742 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#dd61370f42f0c32e3b9d5c86303c3c58">lms_restart_slave</a>(pinfo, _slave_work) != 0)
+<a name="l00743"></a>00743 <span class="keywordflow">return</span> -4;
+<a name="l00744"></a>00744 <span class="keywordflow">return</span> 1;
+<a name="l00745"></a>00745 } <span class="keywordflow">else</span> {
+<a name="l00746"></a>00746 <span class="keywordflow">if</span> (reply < 0) {
+<a name="l00747"></a>00747 <span class="comment">/* XXX callback library users to inform error. */</span>
+<a name="l00748"></a>00748 fprintf(stderr, <span class="stringliteral">"ERROR: pid=%d failed to parse \"%s\".\n"</span>,
+<a name="l00749"></a>00749 getpid(), path);
+<a name="l00750"></a>00750 <span class="keywordflow">return</span> (-reply) << 8;
+<a name="l00751"></a>00751 } <span class="keywordflow">else</span>
+<a name="l00752"></a>00752 <span class="keywordflow">return</span> reply;
+<a name="l00753"></a>00753 }
+<a name="l00754"></a>00754 }
+<a name="l00755"></a>00755
+<a name="l00756"></a>00756 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00757"></a>00757 _process_dir(<span class="keyword">struct</span> pinfo *pinfo, <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="l00758"></a>00758 {
+<a name="l00759"></a>00759 DIR *dir;
+<a name="l00760"></a>00760 <span class="keyword">struct </span>dirent *de;
+<a name="l00761"></a>00761 <span class="keywordtype">int</span> new_len, r;
+<a name="l00762"></a>00762
+<a name="l00763"></a>00763 new_len = _strcat(base, path, name);
+<a name="l00764"></a>00764 <span class="keywordflow">if</span> (new_len < 0)
+<a name="l00765"></a>00765 <span class="keywordflow">return</span> -1;
+<a name="l00766"></a>00766 <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="l00767"></a>00767 fprintf(stderr, <span class="stringliteral">"ERROR: path too long\n"</span>);
+<a name="l00768"></a>00768 <span class="keywordflow">return</span> 2;
+<a name="l00769"></a>00769 }
+<a name="l00770"></a>00770
+<a name="l00771"></a>00771 dir = opendir(path);
+<a name="l00772"></a>00772 <span class="keywordflow">if</span> (dir == NULL) {
+<a name="l00773"></a>00773 perror(<span class="stringliteral">"opendir"</span>);
+<a name="l00774"></a>00774 <span class="keywordflow">return</span> 3;
+<a name="l00775"></a>00775 }
+<a name="l00776"></a>00776
+<a name="l00777"></a>00777 path[new_len] = <span class="charliteral">'/'</span>;
+<a name="l00778"></a>00778 new_len++;
+<a name="l00779"></a>00779
+<a name="l00780"></a>00780 r = 0;
+<a name="l00781"></a>00781 <span class="keywordflow">while</span> ((de = readdir(dir)) != NULL) {
+<a name="l00782"></a>00782 <span class="keywordflow">if</span> (de->d_name[0] == <span class="charliteral">'.'</span>)
+<a name="l00783"></a>00783 <span class="keywordflow">continue</span>;
+<a name="l00784"></a>00784 <span class="keywordflow">if</span> (de->d_type == DT_REG) {
+<a name="l00785"></a>00785 <span class="keywordflow">if</span> (_process_file(pinfo, new_len, path, de->d_name) < 0) {
+<a name="l00786"></a>00786 path[new_len - 1] = <span class="charliteral">'\0'</span>;
+<a name="l00787"></a>00787 fprintf(stderr,
+<a name="l00788"></a>00788 <span class="stringliteral">"ERROR: unrecoverable error parsing file, "</span>
+<a name="l00789"></a>00789 <span class="stringliteral">"exit \"%s\".\n"</span>, path);
+<a name="l00790"></a>00790 r = -4;
+<a name="l00791"></a>00791 <span class="keywordflow">goto</span> end;
+<a name="l00792"></a>00792 }
+<a name="l00793"></a>00793 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (de->d_type == DT_DIR || de->d_type == DT_UNKNOWN) {
+<a name="l00794"></a>00794 <span class="keywordflow">if</span> (_process_dir(pinfo, new_len, path, de->d_name) < 0) {
+<a name="l00795"></a>00795 path[new_len - 1] = <span class="charliteral">'\0'</span>;
+<a name="l00796"></a>00796 fprintf(stderr,
+<a name="l00797"></a>00797 <span class="stringliteral">"ERROR: unrecoverable error parsing dir, "</span>
+<a name="l00798"></a>00798 <span class="stringliteral">"exit \"%s\".\n"</span>, path);
+<a name="l00799"></a>00799 r = -5;
+<a name="l00800"></a>00800 <span class="keywordflow">goto</span> end;
+<a name="l00801"></a>00801 }
+<a name="l00802"></a>00802 }
+<a name="l00803"></a>00803 }
+<a name="l00804"></a>00804
+<a name="l00805"></a>00805 end:
+<a name="l00806"></a>00806 closedir(dir);
+<a name="l00807"></a>00807 <span class="keywordflow">return</span> r;
+<a name="l00808"></a>00808 }
+<a name="l00809"></a>00809
+<a name="l00820"></a>00820 <span class="keywordtype">int</span>
+<a name="l00821"></a><a class="code" href="lightmediascanner__process_8c.html#c2f07fb73717514237862c98dbf023b2">00821</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="l00822"></a>00822 {
+<a name="l00823"></a>00823 <span class="keyword">struct </span>pinfo pinfo;
+<a name="l00824"></a>00824 <span class="keywordtype">int</span> r, len;
+<a name="l00825"></a>00825 <span class="keywordtype">char</span> path[<a class="code" href="lightmediascanner__private_8h.html#e78bf7e06bbba1c42b740fef55cf20f8">PATH_SIZE</a>], *bname;
+<a name="l00826"></a>00826
+<a name="l00827"></a>00827 <span class="keywordflow">if</span> (!<a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>) {
+<a name="l00828"></a>00828 r = -1;
+<a name="l00829"></a>00829 <span class="keywordflow">goto</span> end;
+<a name="l00830"></a>00830 }
+<a name="l00831"></a>00831
+<a name="l00832"></a>00832 <span class="keywordflow">if</span> (!top_path) {
+<a name="l00833"></a>00833 r = -2;
+<a name="l00834"></a>00834 <span class="keywordflow">goto</span> end;
+<a name="l00835"></a>00835 }
+<a name="l00836"></a>00836
+<a name="l00837"></a>00837 <span class="keywordflow">if</span> (<a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a>) {
+<a name="l00838"></a>00838 fprintf(stderr, <span class="stringliteral">"ERROR: is already processing.\n"</span>);
+<a name="l00839"></a>00839 r = -3;
+<a name="l00840"></a>00840 <span class="keywordflow">goto</span> end;
+<a name="l00841"></a>00841 }
+<a name="l00842"></a>00842
+<a name="l00843"></a>00843 <span class="keywordflow">if</span> (!<a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#52883423c9a1276420ba2bb9b50a138c">parsers</a>) {
+<a name="l00844"></a>00844 fprintf(stderr, <span class="stringliteral">"ERROR: no plugins registered.\n"</span>);
+<a name="l00845"></a>00845 r = -4;
+<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 pinfo.<a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a> = <a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>;
+<a name="l00850"></a>00850
+<a name="l00851"></a>00851 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4">lms_create_pipes</a>(&pinfo) != 0) {
+<a name="l00852"></a>00852 r = -5;
+<a name="l00853"></a>00853 <span class="keywordflow">goto</span> end;
+<a name="l00854"></a>00854 }
+<a name="l00855"></a>00855
+<a name="l00856"></a>00856 <span class="keywordflow">if</span> (<a class="code" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave</a>(&pinfo, _slave_work) != 0) {
+<a name="l00857"></a>00857 r = -6;
+<a name="l00858"></a>00858 <span class="keywordflow">goto</span> close_pipes;
+<a name="l00859"></a>00859 }
+<a name="l00860"></a>00860
+<a name="l00861"></a>00861 <span class="keywordflow">if</span> (realpath(top_path, path) == NULL) {
+<a name="l00862"></a>00862 perror(<span class="stringliteral">"realpath"</span>);
+<a name="l00863"></a>00863 r = -7;
+<a name="l00864"></a>00864 <span class="keywordflow">goto</span> finish_slave;
+<a name="l00865"></a>00865 }
+<a name="l00866"></a>00866
+<a name="l00867"></a>00867 <span class="comment">/* search '/' backwards, split dirname and basename, note realpath usage */</span>
+<a name="l00868"></a>00868 len = strlen(path);
+<a name="l00869"></a>00869 <span class="keywordflow">for</span> (; len >= 0 && path[len] != <span class="charliteral">'/'</span>; len--);
+<a name="l00870"></a>00870 len++;
+<a name="l00871"></a>00871 bname = strdup(path + len);
+<a name="l00872"></a>00872 <span class="keywordflow">if</span> (bname == NULL) {
+<a name="l00873"></a>00873 perror(<span class="stringliteral">"strdup"</span>);
+<a name="l00874"></a>00874 r = -8;
+<a name="l00875"></a>00875 <span class="keywordflow">goto</span> finish_slave;
+<a name="l00876"></a>00876 }
+<a name="l00877"></a>00877
+<a name="l00878"></a>00878 <a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 1;
+<a name="l00879"></a>00879 r = _process_dir(&pinfo, len, path, bname);
+<a name="l00880"></a>00880 <a class="code" href="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</a>-><a class="code" href="structlms.html#bb03533445b77299e964b2ec02bca039">is_processing</a> = 0;
+<a name="l00881"></a>00881 free(bname);
+<a name="l00882"></a>00882
+<a name="l00883"></a>00883 finish_slave:
+<a name="l00884"></a>00884 <a class="code" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave</a>(&pinfo, _master_send_finish);
+<a name="l00885"></a>00885 close_pipes:
+<a name="l00886"></a>00886 <a class="code" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed">lms_close_pipes</a>(&pinfo);
+<a name="l00887"></a>00887 end:
+<a name="l00888"></a>00888 <span class="keywordflow">return</span> r;
+<a name="l00889"></a>00889 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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>
+Include dependency graph for lightmediascanner_process.c:<p><center><img src="lightmediascanner__process_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_process.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_process.c_map">
+<area shape="rect" href="lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="768,461,896,488"><area shape="rect" href="lightmediascanner__private_8h.html" title="lightmediascanner_private.h" alt="" coords="277,588,451,615"><area shape="rect" href="lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="268,765,460,792"><area shape="rect" href="lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="511,715,679,741"><area shape="rect" href="lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="729,588,935,615"></map>
+
+<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>
+
+</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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00566">566</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00051">pinfo::master</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00052">pinfo::slave</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00618">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00577">577</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00051">pinfo::master</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00053">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#l00052">pinfo::slave</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00046">fds::w</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00618">lms_check()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00604">604</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00055">pinfo::child</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00054">pinfo::lms</a>, <a class="el" href="lightmediascanner_8c-source.html#l00157">lms_free()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00051">pinfo::master</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00052">pinfo::slave</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__process_8c_e92fe8fe90d93d5ad9a42387a4b2fc6e_cgraph.png" border="0" usemap="#lightmediascanner__process_8c_e92fe8fe90d93d5ad9a42387a4b2fc6e_cgraph_map" alt=""></center>
+<map name="lightmediascanner__process_8c_e92fe8fe90d93d5ad9a42387a4b2fc6e_cgraph_map">
+<area shape="rect" href="group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687" title="lms_free" alt="" coords="169,5,236,32"><area shape="rect" href="group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091" title="lms_charset_conv_free" alt="" coords="287,5,431,32"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00641">641</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00055">pinfo::child</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00051">pinfo::master</a>.
+</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 width="100%"></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>
+References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00136">lms_file_info::base</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00157">lms_plugin::match</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00134">lms_file_info::path</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00135">lms_file_info::path_len</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00059">parser::plugin</a>.
+</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 width="100%"></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>
+References <a class="el" href="lightmediascanner__plugin_8h-source.html#l00162">lms_plugin::finish</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00059">parser::plugin</a>.
+</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 width="100%"></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>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, <a class="el" href="lightmediascanner__plugin_8h-source.html#l00158">lms_plugin::parse</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00059">parser::plugin</a>.
+</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 width="100%"></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>
+References <a class="el" href="lightmediascanner_8c-source.html#l00249">lms_parser_del_int()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00059">parser::plugin</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00160">lms_plugin::setup</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__process_8c_c321bebfc5c24cbbac30031202c460e9_cgraph.png" border="0" usemap="#lightmediascanner__process_8c_c321bebfc5c24cbbac30031202c460e9_cgraph_map" alt=""></center>
+<map name="lightmediascanner__process_8c_c321bebfc5c24cbbac30031202c460e9_cgraph_map">
+<area shape="rect" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf" title="lms_parser_del_int" alt="" coords="175,5,297,32"></map>
+
+</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 width="100%"></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>
+References <a class="el" href="lightmediascanner_8c-source.html#l00249">lms_parser_del_int()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00066">lms::n_parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00059">parser::plugin</a>, and <a class="el" href="lightmediascanner__plugin_8h-source.html#l00161">lms_plugin::start</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__process_8c_6e02f78f026b2ad282184476dca13e45_cgraph.png" border="0" usemap="#lightmediascanner__process_8c_6e02f78f026b2ad282184476dca13e45_cgraph_map" alt=""></center>
+<map name="lightmediascanner__process_8c_6e02f78f026b2ad282184476dca13e45_cgraph_map">
+<area shape="rect" href="lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf" title="lms_parser_del_int" alt="" coords="169,5,292,32"></map>
+
+</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 width="100%"></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#l00821">821</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00071">lms::is_processing</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00054">pinfo::lms</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00566">lms_close_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00577">lms_create_pipes()</a>, <a class="el" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6">lms_create_slave()</a>, <a class="el" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5">lms_finish_slave()</a>, <a class="el" href="lightmediascanner__private_8h-source.html#l00065">lms::parsers</a>, and <a class="el" href="lightmediascanner__private_8h-source.html#l00042">PATH_SIZE</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__process_8c_c2f07fb73717514237862c98dbf023b2_cgraph.png" border="0" usemap="#lightmediascanner__process_8c_c2f07fb73717514237862c98dbf023b2_cgraph_map" alt=""></center>
+<map name="lightmediascanner__process_8c_c2f07fb73717514237862c98dbf023b2_cgraph_map">
+<area shape="rect" href="lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed" title="lms_close_pipes" alt="" coords="144,5,253,32"><area shape="rect" href="lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4" title="lms_create_pipes" alt="" coords="143,56,255,83"><area shape="rect" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6" title="lms_create_slave" alt="" coords="143,107,255,133"><area shape="rect" href="lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5" title="lms_finish_slave" alt="" coords="143,157,255,184"></map>
+
+</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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__process_8c-source.html#l00664">664</a> of file <a class="el" href="lightmediascanner__process_8c-source.html">lightmediascanner_process.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__private_8h-source.html#l00055">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#l00053">pinfo::poll</a>.
+<p>
+Here is the call graph for this function:<p><center><img src="lightmediascanner__process_8c_9bf510645947b478dab39f633bbd35f3_cgraph.png" border="0" usemap="#lightmediascanner__process_8c_9bf510645947b478dab39f633bbd35f3_cgraph_map" alt=""></center>
+<map name="lightmediascanner__process_8c_9bf510645947b478dab39f633bbd35f3_cgraph_map">
+<area shape="rect" href="lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6" title="lms_create_slave" alt="" coords="169,5,281,32"></map>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf" title="lms_parser_del_int" alt="" coords="169,5,292,32">
--- /dev/null
+62762b100835173e3e06e968fae996a1
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6" title="lms_create_slave" alt="" coords="169,5,281,32">
--- /dev/null
+e55f1e94a5d2e367b6febb666c14335c
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8h.html" title="lightmediascanner.h" alt="" coords="768,461,896,488">
+<area shape="rect" href="$lightmediascanner__private_8h.html" title="lightmediascanner_private.h" alt="" coords="277,588,451,615">
+<area shape="rect" href="$lightmediascanner__db__private_8h.html" title="lightmediascanner_db_private.h" alt="" coords="268,765,460,792">
+<area shape="rect" href="$lightmediascanner__plugin_8h.html" title="lightmediascanner_plugin.h" alt="" coords="511,715,679,741">
+<area shape="rect" href="$lightmediascanner__charset__conv_8h.html" title="lightmediascanner_charset_conv.h" alt="" coords="729,588,935,615">
--- /dev/null
+691954d091cc4954a262a036d6b1422d
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner__private_8h.html#8c1aa0a9d9bb796db279caeb97e04eed" title="lms_close_pipes" alt="" coords="144,5,253,32">
+<area shape="rect" href="$lightmediascanner__private_8h.html#a5952b7aae2fa795396a5a286c2ee4a4" title="lms_create_pipes" alt="" coords="143,56,255,83">
+<area shape="rect" href="$lightmediascanner__private_8h.html#439b3c62e96d472bdb2125a0a04d4fa6" title="lms_create_slave" alt="" coords="143,107,255,133">
+<area shape="rect" href="$lightmediascanner__private_8h.html#dd3853bb333e8bee167477933a058ae5" title="lms_finish_slave" alt="" coords="143,157,255,184">
--- /dev/null
+e52682bdf61c6444457aae1406ddbca3
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$lightmediascanner_8c.html#e6ccb942742cf65cc1cf866aceb4bddf" title="lms_parser_del_int" alt="" coords="175,5,297,32">
--- /dev/null
+e0c9d5b36404f6c62bb378cdae88cbbd
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$group__LMS__API.html#gf15f3b0f7de2113155a360df989b7687" title="lms_free" alt="" coords="169,5,236,32">
+<area shape="rect" href="$group__LMS__CHARSET.html#g960ce31bca428212abdd60c12b878091" title="lms_charset_conv_free" alt="" coords="287,5,431,32">
--- /dev/null
+fa6cbabb16bc428f9986980da76a441c
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 <span class="preprocessor">#include <<a class="code" href="lightmediascanner__utils_8h.html">lightmediascanner_utils.h</a>></span>
+<a name="l00002"></a>00002 <span class="preprocessor">#include <ctype.h></span>
+<a name="l00003"></a>00003 <span class="preprocessor">#include <alloca.h></span>
+<a name="l00004"></a>00004
+<a name="l00012"></a>00012 <span class="keywordtype">void</span>
+<a name="l00013"></a><a class="code" href="lightmediascanner__utils_8c.html#086d2449129976541c66a83984bffbe6">00013</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="l00014"></a>00014 {
+<a name="l00015"></a>00015 <span class="keywordtype">int</span> i, len;
+<a name="l00016"></a>00016 <span class="keywordtype">char</span> *p;
+<a name="l00017"></a>00017
+<a name="l00018"></a>00018 len = *p_len;
+<a name="l00019"></a>00019
+<a name="l00020"></a>00020 <span class="keywordflow">if</span> (len < 2) <span class="comment">/* just '\0'? */</span>
+<a name="l00021"></a>00021 <span class="keywordflow">return</span>;
+<a name="l00022"></a>00022
+<a name="l00023"></a>00023 p = str + len - 1;
+<a name="l00024"></a>00024 <span class="keywordflow">for</span> (i = len - 1; i >= 0; i--) {
+<a name="l00025"></a>00025 <span class="keywordflow">if</span> (isspace(*p)) {
+<a name="l00026"></a>00026 *p = <span class="charliteral">'\0'</span>;
+<a name="l00027"></a>00027 len--;
+<a name="l00028"></a>00028 p--;
+<a name="l00029"></a>00029 } <span class="keywordflow">else</span>
+<a name="l00030"></a>00030 <span class="keywordflow">break</span>;
+<a name="l00031"></a>00031 }
+<a name="l00032"></a>00032 <span class="keywordflow">if</span> (len == 0) {
+<a name="l00033"></a>00033 *p_len = 0;
+<a name="l00034"></a>00034 <span class="keywordflow">return</span>;
+<a name="l00035"></a>00035 }
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037 p = str;
+<a name="l00038"></a>00038 <span class="keywordflow">for</span> (i = 0; i < len; i++) {
+<a name="l00039"></a>00039 <span class="keywordflow">if</span> (isspace(*p))
+<a name="l00040"></a>00040 p++;
+<a name="l00041"></a>00041 <span class="keywordflow">else</span>
+<a name="l00042"></a>00042 <span class="keywordflow">break</span>;
+<a name="l00043"></a>00043 }
+<a name="l00044"></a>00044 len -= i;
+<a name="l00045"></a>00045 <span class="keywordflow">if</span> (len == 0) {
+<a name="l00046"></a>00046 *str = <span class="charliteral">'\0'</span>;
+<a name="l00047"></a>00047 *p_len = 0;
+<a name="l00048"></a>00048 <span class="keywordflow">return</span>;
+<a name="l00049"></a>00049 }
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 *p_len = len;
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="keywordflow">if</span> (str < p)
+<a name="l00054"></a>00054 <span class="keywordflow">for</span> (; len > 0; len--, str++, p++)
+<a name="l00055"></a>00055 *str = *p;
+<a name="l00056"></a>00056 }
+<a name="l00057"></a>00057
+<a name="l00068"></a>00068 <span class="keywordtype">int</span>
+<a name="l00069"></a><a class="code" href="lightmediascanner__utils_8c.html#71ee8b57cf7c5eba8ec0593e756d2529">00069</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="l00070"></a>00070 <span class="keywordtype">int</span> i;
+<a name="l00071"></a>00071 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *exts_pos;
+<a name="l00072"></a>00072 <span class="keyword">const</span> <span class="keywordtype">char</span> *s;
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 exts_pos = alloca(exts_len * <span class="keyword">sizeof</span>(*exts_pos));
+<a name="l00075"></a>00075 <span class="keywordflow">for</span> (i = 0; i < exts_len; i++)
+<a name="l00076"></a>00076 exts_pos[i] = exts[i].len;
+<a name="l00077"></a>00077
+<a name="l00078"></a>00078 <span class="keywordflow">for</span> (s = name + name_len - 1; s >= name; s--) {
+<a name="l00079"></a>00079 <span class="keywordtype">int</span> i, match;
+<a name="l00080"></a>00080 <span class="keywordtype">char</span> c1, c2;
+<a name="l00081"></a>00081
+<a name="l00082"></a>00082 c1 = *s;
+<a name="l00083"></a>00083 <span class="keywordflow">if</span> (c1 >= <span class="charliteral">'a'</span>)
+<a name="l00084"></a>00084 c2 = c1;
+<a name="l00085"></a>00085 <span class="keywordflow">else</span>
+<a name="l00086"></a>00086 c2 = <span class="charliteral">'a'</span> + c1 - <span class="charliteral">'A'</span>;
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088 match = 0;
+<a name="l00089"></a>00089 <span class="keywordflow">for</span> (i = 0; i < exts_len; i++) {
+<a name="l00090"></a>00090 <span class="keywordflow">if</span> (exts_pos[i] > 0) {
+<a name="l00091"></a>00091 <span class="keywordtype">char</span> ce;
+<a name="l00092"></a>00092
+<a name="l00093"></a>00093 ce = exts[i].<a class="code" href="structlms__string__size.html#5f4844463b193dadb2286e69200ce8a7">str</a>[exts_pos[i] - 1];
+<a name="l00094"></a>00094 <span class="keywordflow">if</span> (ce == c1 || ce == c2) {
+<a name="l00095"></a>00095 <span class="keywordflow">if</span> (exts_pos[i] == 1)
+<a name="l00096"></a>00096 <span class="keywordflow">return</span> i;
+<a name="l00097"></a>00097 exts_pos[i]--;
+<a name="l00098"></a>00098 match = 1;
+<a name="l00099"></a>00099 } <span class="keywordflow">else</span>
+<a name="l00100"></a>00100 exts_pos[i] = 0;
+<a name="l00101"></a>00101 }
+<a name="l00102"></a>00102 }
+<a name="l00103"></a>00103 <span class="keywordflow">if</span> (!match)
+<a name="l00104"></a>00104 <span class="keywordflow">return</span> -1;
+<a name="l00105"></a>00105 }
+<a name="l00106"></a>00106
+<a name="l00107"></a>00107 <span class="keywordflow">return</span> -1;
+<a name="l00108"></a>00108 }
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 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 <alloca.h></code><br>
+
+<p>
+Include dependency graph for lightmediascanner_utils.c:<p><center><img src="lightmediascanner__utils_8c__incl.png" border="0" usemap="#src/lib/lightmediascanner_utils.c_map" alt=""></center>
+<map name="src/lib/lightmediascanner_utils.c_map">
+<area shape="rect" href="lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="249,5,407,32"></map>
+
+<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">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="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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Strips string, in place.<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>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#l00013">13</a> of file <a class="el" href="lightmediascanner__utils_8c-source.html">lightmediascanner_utils.c</a>.
+</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 width="100%"></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#l00069">69</a> of file <a class="el" href="lightmediascanner__utils_8c-source.html">lightmediascanner_utils.c</a>.
+<p>
+References <a class="el" href="lightmediascanner__utils_8h-source.html#l00050">lms_string_size::str</a>.
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__utils_8h.html" title="lightmediascanner_utils.h" alt="" coords="249,5,407,32">
--- /dev/null
+adc98e112bb9938acab1c866f3f8d1b8
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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">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="l00060"></a>00060
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span>}
+<a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _LIGHTMEDIASCANNER_UTILS_H_ */</span>
+</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:03 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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 File Reference</h1>
+<p>
+This graph shows which files directly or indirectly include this file:<p><center><img src="lightmediascanner__utils_8h__dep__incl.png" border="0" usemap="#src/lib/lightmediascanner_utils.hdep_map" alt=""></center>
+<map name="src/lib/lightmediascanner_utils.hdep_map">
+<area shape="rect" href="lightmediascanner__db_8h.html" title="src/lib/lightmediascanner_db.h" alt="" coords="255,81,441,108"><area shape="rect" href="lightmediascanner__utils_8c.html" title="src/lib/lightmediascanner_utils.c" alt="" coords="251,132,445,159"><area shape="rect" href="lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="499,5,720,32"><area shape="rect" href="lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="497,56,721,83"><area shape="rect" href="lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="495,107,724,133"><area shape="rect" href="lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="499,157,720,184"></map>
+
+<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 int </td><td class="memItemRight" valign="bottom"><a class="el" href="lightmediascanner__utils_8h.html#92c63007e7d04f626cafc6eef48f7022">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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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>.
+</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>.
+</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 width="100%"></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>.
+</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 width="100%"> (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>.
+</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 width="100%"> {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>.
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="92c63007e7d04f626cafc6eef48f7022"></a><!-- doxytag: member="lightmediascanner_utils.h::lms_which_extension" ref="92c63007e7d04f626cafc6eef48f7022" 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 void 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 width="100%"></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$lightmediascanner__db_8h.html" title="src/lib/lightmediascanner_db.h" alt="" coords="255,81,441,108">
+<area shape="rect" href="$lightmediascanner__utils_8c.html" title="src/lib/lightmediascanner_utils.c" alt="" coords="251,132,445,159">
+<area shape="rect" href="$lightmediascanner__db__audio_8c.html" title="src/lib/lightmediascanner_db_audio.c" alt="" coords="499,5,720,32">
+<area shape="rect" href="$lightmediascanner__db__image_8c.html" title="src/lib/lightmediascanner_db_image.c" alt="" coords="497,56,721,83">
+<area shape="rect" href="$lightmediascanner__db__playlist_8c.html" title="src/lib/lightmediascanner_db_playlist.c" alt="" coords="495,107,724,133">
+<area shape="rect" href="$lightmediascanner__db__video_8c.html" title="src/lib/lightmediascanner_db_video.c" alt="" coords="499,157,720,184">
--- /dev/null
+6c1cec54a95c40d2c24f0fa27d3ca603
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+</div>
+<h1>Light Media Scanner 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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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: fds Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+
+<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>.<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>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00577">lms_create_pipes()</a>.
+</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>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00577">lms_create_pipes()</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+Collaboration diagram for lms:<p><center><img src="structlms__coll__graph.png" border="0" usemap="#lms__coll__map" alt="Collaboration graph"></center>
+<map name="lms__coll__map">
+<area shape="rect" href="structparser.html" title="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}" alt="" coords="23,245,108,357"><area shape="rect" title="parsers" alt="" coords="61,353,69,361"><area shape="rect" title="parsers" alt="" coords="61,417,69,425"><area shape="rect" href="structlms__plugin.html" title="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}" alt="" coords="25,5,105,181"><area shape="rect" title="plugin" alt="" coords="61,177,69,185"><area shape="rect" title="plugin" alt="" coords="61,241,69,249"></map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><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="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 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>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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#l00065">65</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00618">lms_check()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00157">lms_free()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00190">lms_parser_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00289">lms_parser_del()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00249">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>, <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</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#l00066">66</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00157">lms_free()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00190">lms_parser_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00289">lms_parser_del()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00249">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>.
+</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#l00067">67</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00451">lms_charset_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00474">lms_charset_del()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00157">lms_free()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00119">lms_new()</a>.
+</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#l00068">68</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00157">lms_free()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00340">lms_get_db_path()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00119">lms_new()</a>.
+</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#l00069">69</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00362">lms_get_slave_timeout()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00119">lms_new()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00382">lms_set_slave_timeout()</a>.
+</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#l00070">70</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00404">lms_get_commit_interval()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00119">lms_new()</a>, and <a class="el" href="lightmediascanner_8c-source.html#l00427">lms_set_commit_interval()</a>.
+</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#l00071">71</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00618">lms_check()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00157">lms_free()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00321">lms_is_processing()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00190">lms_parser_add()</a>, <a class="el" href="lightmediascanner_8c-source.html#l00289">lms_parser_del()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+Collaboration diagram for lms_audio_info:<p><center><img src="structlms__audio__info__coll__graph.png" border="0" usemap="#lms__audio__info__coll__map" alt="Collaboration graph"></center>
+<map name="lms__audio__info__coll__map">
+<area shape="rect" href="structlms__string__size.html" title="{lms_string_size\n|+ str\l+ len\l|}" alt="" coords="5,5,109,101"><area shape="rect" title="title\nartist\nalbum\ngenre" alt="" coords="53,97,61,105"><area shape="rect" title="title\nartist\nalbum\ngenre" alt="" coords="53,209,61,217"></map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><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"><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"><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"><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"><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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__audio_8c-source.html#l00648">lms_db_audio_add()</a>.
+</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>.
+</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>.
+</div>
+</div><p>
+<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>.
+</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>.
+</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>.
+</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>.
+</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>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$structlms__string__size.html" title="{lms_string_size\n|+ str\l+ len\l|}" alt="" coords="5,5,109,101">
+<area shape="rect" title="title\nartist\nalbum\ngenre" alt="" coords="53,97,61,105">
+<area shape="rect" title="title\nartist\nalbum\ngenre" alt="" coords="53,209,61,217">
--- /dev/null
+c7008461ae99ff64e800f12d9eac3b09
\ No newline at end of file
--- /dev/null
+<area shape="rect" href="$structparser.html" title="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}" alt="" coords="23,245,108,357">
+<area shape="rect" title="parsers" alt="" coords="61,353,69,361">
+<area shape="rect" title="parsers" alt="" coords="61,417,69,425">
+<area shape="rect" href="$structlms__plugin.html" title="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}" alt="" coords="25,5,105,181">
+<area shape="rect" title="plugin" alt="" coords="61,177,69,185">
+<area shape="rect" title="plugin" alt="" coords="61,241,69,249">
--- /dev/null
+56358638e762e6352c9d8267ea330915
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+<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>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00143">143</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.<hr><h2>Field Documentation</h2>
+<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#l00144">144</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</div>
+</div><p>
+<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#l00145">145</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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_db_cache Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+Collaboration diagram for lms_db_cache:<p><center><img src="structlms__db__cache__coll__graph.png" border="0" usemap="#lms__db__cache__coll__map" alt="Collaboration graph"></center>
+<map name="lms__db__cache__coll__map">
+<area shape="rect" href="structlms__db__cache__entry.html" title="{lms_db_cache_entry\n|+ db\l+ data\l|}" alt="" coords="5,5,136,101"><area shape="rect" title="entries" alt="" coords="67,97,75,105"><area shape="rect" title="entries" alt="" coords="67,161,75,169"></map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><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"><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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">lms_db_cache_add()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00417">lms_db_cache_del()</a>.
+</div>
+</div><p>
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00417">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00442">lms_db_cache_get()</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$structlms__db__cache__entry.html" title="{lms_db_cache_entry\n|+ db\l+ data\l|}" alt="" coords="5,5,136,101">
+<area shape="rect" title="entries" alt="" coords="67,97,75,105">
+<area shape="rect" title="entries" alt="" coords="67,161,75,169">
--- /dev/null
+5d26d8dd87da6e66eaffed71640915d7
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">lms_db_cache_add()</a>.
+</div>
+</div><p>
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00387">lms_db_cache_add()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00417">lms_db_cache_del()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00442">lms_db_cache_get()</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+
+<p>
+Definition at line <a class="el" href="lightmediascanner__plugin_8h-source.html#l00133">133</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.<hr><h2>Field Documentation</h2>
+<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#l00134">134</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>.
+</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#l00135">135</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>.
+</div>
+</div><p>
+<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#l00136">136</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>.
+</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#l00137">137</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00697">lms_db_delete_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">lms_db_set_file_dtime()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">lms_db_update_file_info()</a>.
+</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#l00138">138</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">lms_db_update_file_info()</a>.
+</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#l00139">139</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00727">lms_db_set_file_dtime()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">lms_db_update_file_info()</a>.
+</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#l00140">140</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__db__common_8c-source.html#l00567">lms_db_get_file_info()</a>, <a class="el" href="lightmediascanner__db__common_8c-source.html#l00653">lms_db_insert_file_info()</a>, and <a class="el" href="lightmediascanner__db__common_8c-source.html#l00609">lms_db_update_file_info()</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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>.
+</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>.
+</div>
+</div><p>
+<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>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+Collaboration diagram for lms_image_info:<p><center><img src="structlms__image__info__coll__graph.png" border="0" usemap="#lms__image__info__coll__map" alt="Collaboration graph"></center>
+<map name="lms__image__info__coll__map">
+<area shape="rect" href="structlms__gps__info.html" title="{lms_gps_info\n|+ latitude\l+ longitude\l+ altitude\l|}" alt="" coords="5,5,99,117"><area shape="rect" title="gps" alt="" coords="63,113,71,121"><area shape="rect" title="gps" alt="" coords="84,193,92,201"><area shape="rect" href="structlms__string__size.html" title="{lms_string_size\n|+ str\l+ len\l|}" alt="" coords="123,13,227,109"><area shape="rect" title="title\nartist" alt="" coords="157,105,165,113"><area shape="rect" title="title\nartist" alt="" coords="135,193,143,201"></map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><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"><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"><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"><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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__image_8c-source.html#l00273">lms_db_image_add()</a>.
+</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>.
+</div>
+</div><p>
+<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>.
+</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>.
+</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>.
+</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>.
+</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>.
+</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>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$structlms__gps__info.html" title="{lms_gps_info\n|+ latitude\l+ longitude\l+ altitude\l|}" alt="" coords="5,5,99,117">
+<area shape="rect" title="gps" alt="" coords="63,113,71,121">
+<area shape="rect" title="gps" alt="" coords="84,193,92,201">
+<area shape="rect" href="$structlms__string__size.html" title="{lms_string_size\n|+ str\l+ len\l|}" alt="" coords="123,13,227,109">
+<area shape="rect" title="title\nartist" alt="" coords="157,105,165,113">
+<area shape="rect" title="title\nartist" alt="" coords="135,193,143,201">
--- /dev/null
+ca323b96e715712e3e3f470c8b804d76
\ 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_playlist_info Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+Collaboration diagram for lms_playlist_info:<p><center><img src="structlms__playlist__info__coll__graph.png" border="0" usemap="#lms__playlist__info__coll__map" alt="Collaboration graph"></center>
+<map name="lms__playlist__info__coll__map">
+<area shape="rect" href="structlms__string__size.html" title="{lms_string_size\n|+ str\l+ len\l|}" alt="" coords="11,5,115,101"><area shape="rect" title="title" alt="" coords="59,97,67,105"><area shape="rect" title="title" alt="" coords="59,161,67,169"></map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><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"><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>
+
+<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>.<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>
+Referenced by <a class="el" href="lightmediascanner__db__playlist_8c-source.html#l00237">lms_db_playlist_add()</a>.
+</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>.
+</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>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$structlms__string__size.html" title="{lms_string_size\n|+ str\l+ len\l|}" alt="" coords="11,5,115,101">
+<area shape="rect" title="title" alt="" coords="59,97,67,105">
+<area shape="rect" title="title" alt="" coords="59,161,67,169">
--- /dev/null
+ede7ac5cfd36a43bf5db1e6c87fe9f7a
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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#4374f28037e503b570592aed72a27c15">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#cc0d2d6d376ca4abd084ad313b4d479c">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#8ce53e0b14aa220d76d552882c1150a4">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#a8f0f1499d3cfb5fcd6d25928297f45e">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#d3b811bbff952ce44516c98119d91b30">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#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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#l00156">156</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</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#4374f28037e503b570592aed72a27c15">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#l00157">157</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00367">lms_parsers_check_using()</a>.
+</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#cc0d2d6d376ca4abd084ad313b4d479c">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#l00158">158</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00387">lms_parsers_run()</a>.
+</div>
+</div><p>
+<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#8ce53e0b14aa220d76d552882c1150a4">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#l00159">159</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+</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#a8f0f1499d3cfb5fcd6d25928297f45e">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#l00160">160</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00293">lms_parsers_setup()</a>.
+</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#d3b811bbff952ce44516c98119d91b30">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#l00161">161</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00319">lms_parsers_start()</a>.
+</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#b8b7e5fe20b1dcd0fe9ef4e9e5db9fe7">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#l00162">162</a> of file <a class="el" href="lightmediascanner__plugin_8h-source.html">lightmediascanner_plugin.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00345">lms_parsers_finish()</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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>
+Referenced by <a class="el" href="lightmediascanner__utils_8c-source.html#l00069">lms_which_extension()</a>.
+</div>
+</div><p>
+<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>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+Collaboration diagram for lms_video_info:<p><center><img src="structlms__video__info__coll__graph.png" border="0" usemap="#lms__video__info__coll__map" alt="Collaboration graph"></center>
+<map name="lms__video__info__coll__map">
+<area shape="rect" href="structlms__string__size.html" title="{lms_string_size\n|+ str\l+ len\l|}" alt="" coords="5,5,109,101"><area shape="rect" title="title\nartist" alt="" coords="53,97,61,105"><area shape="rect" title="title\nartist" alt="" coords="53,177,61,185"></map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><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"><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"><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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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>
+Referenced by <a class="el" href="lightmediascanner__db__video_8c-source.html#l00249">lms_db_video_add()</a>.
+</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>.
+</div>
+</div><p>
+<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>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$structlms__string__size.html" title="{lms_string_size\n|+ str\l+ len\l|}" alt="" coords="5,5,109,101">
+<area shape="rect" title="title\nartist" alt="" coords="53,97,61,105">
+<area shape="rect" title="title\nartist" alt="" coords="53,177,61,185">
--- /dev/null
+affb01d2ca5625f9c002e3364b21c1de
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+Collaboration diagram for parser:<p><center><img src="structparser__coll__graph.png" border="0" usemap="#parser__coll__map" alt="Collaboration graph"></center>
+<map name="parser__coll__map">
+<area shape="rect" href="structlms__plugin.html" title="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}" alt="" coords="8,5,88,181"><area shape="rect" title="plugin" alt="" coords="44,177,52,185"><area shape="rect" title="plugin" alt="" coords="44,241,52,249"></map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><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>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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#l00059">59</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00289">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>.
+</div>
+</div><p>
+<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#l00060">60</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+</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#l00061">61</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner_8c-source.html#l00235">lms_parser_find_and_add()</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$structlms__plugin.html" title="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}" alt="" coords="8,5,88,181">
+<area shape="rect" title="plugin" alt="" coords="44,177,52,185">
+<area shape="rect" title="plugin" alt="" coords="44,241,52,249">
--- /dev/null
+41c356210d44353f0ab99eadd6a24cbd
\ 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="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.2 -->
+<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="classes.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="classes.html"><span>Alphabetical List</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+</div>
+<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>
+Collaboration diagram for pinfo:<p><center><img src="structpinfo__coll__graph.png" border="0" usemap="#pinfo__coll__map" alt="Collaboration graph"></center>
+<map name="pinfo__coll__map">
+<area shape="rect" href="structlms.html" title="{lms\n|+ parsers\l+ n_parsers\l+ cs_conv\l+ db_path\l+ slave_timeout\l+ commit_interval\l+ is_processing\l|}" alt="" coords="5,421,125,597"><area shape="rect" title="lms" alt="" coords="89,593,97,601"><area shape="rect" title="lms" alt="" coords="116,673,124,681"><area shape="rect" href="structparser.html" title="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}" alt="" coords="23,245,108,357"><area shape="rect" title="parsers" alt="" coords="61,353,69,361"><area shape="rect" title="parsers" alt="" coords="61,417,69,425"><area shape="rect" href="structlms__plugin.html" title="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}" alt="" coords="25,5,105,181"><area shape="rect" title="plugin" alt="" coords="61,177,69,185"><area shape="rect" title="plugin" alt="" coords="61,241,69,249"><area shape="rect" href="structfds.html" title="{fds\n|+ r\l+ w\l|}" alt="" coords="149,461,189,557"><area shape="rect" title="slave\nmaster" alt="" coords="160,553,168,561"><area shape="rect" title="slave\nmaster" alt="" coords="147,673,155,681"></map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><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="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"><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">pollfd </td><td class="memItemRight" valign="bottom"><a class="el" href="structpinfo.html#ee9c21ae165e7daf968a7ed87c736076">poll</a></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="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">lms</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>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+
+<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>.<hr><h2>Field Documentation</h2>
+<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#l00051">51</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00566">lms_close_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00577">lms_create_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00604">lms_create_slave()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00641">lms_finish_slave()</a>.
+</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#l00052">52</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00566">lms_close_pipes()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00577">lms_create_pipes()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00604">lms_create_slave()</a>.
+</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#l00053">53</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00577">lms_create_pipes()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00664">lms_restart_slave()</a>.
+</div>
+</div><p>
+<a class="anchor" name="9958e1d447ffadf40c871a6cdaa86b4c"></a><!-- doxytag: member="pinfo::lms" ref="9958e1d447ffadf40c871a6cdaa86b4c" 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="structpinfo.html#9958e1d447ffadf40c871a6cdaa86b4c">pinfo::lms</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+<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>
+Referenced by <a class="el" href="lightmediascanner__check_8c-source.html#l00618">lms_check()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00604">lms_create_slave()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00821">lms_process()</a>.
+</div>
+</div><p>
+<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#l00055">55</a> of file <a class="el" href="lightmediascanner__private_8h-source.html">lightmediascanner_private.h</a>.
+<p>
+Referenced by <a class="el" href="lightmediascanner__process_8c-source.html#l00604">lms_create_slave()</a>, <a class="el" href="lightmediascanner__process_8c-source.html#l00641">lms_finish_slave()</a>, and <a class="el" href="lightmediascanner__process_8c-source.html#l00664">lms_restart_slave()</a>.
+</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>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 02:04:05 2007 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.2 </small></address>
+</body>
+</html>
--- /dev/null
+<area shape="rect" href="$structlms.html" title="{lms\n|+ parsers\l+ n_parsers\l+ cs_conv\l+ db_path\l+ slave_timeout\l+ commit_interval\l+ is_processing\l|}" alt="" coords="5,421,125,597">
+<area shape="rect" title="lms" alt="" coords="89,593,97,601">
+<area shape="rect" title="lms" alt="" coords="116,673,124,681">
+<area shape="rect" href="$structparser.html" title="{parser\n|+ plugin\l+ dl_handle\l+ so_path\l|}" alt="" coords="23,245,108,357">
+<area shape="rect" title="parsers" alt="" coords="61,353,69,361">
+<area shape="rect" title="parsers" alt="" coords="61,417,69,425">
+<area shape="rect" href="$structlms__plugin.html" title="{lms_plugin\n|+ name\l+ match\l+ parse\l+ close\l+ setup\l+ start\l+ finish\l|}" alt="" coords="25,5,105,181">
+<area shape="rect" title="plugin" alt="" coords="61,177,69,185">
+<area shape="rect" title="plugin" alt="" coords="61,241,69,249">
+<area shape="rect" href="$structfds.html" title="{fds\n|+ r\l+ w\l|}" alt="" coords="149,461,189,557">
+<area shape="rect" title="slave\nmaster" alt="" coords="160,553,168,561">
+<area shape="rect" title="slave\nmaster" alt="" coords="147,673,155,681">
--- /dev/null
+e8aa5ab1319012540c6e71adc8699ec9
\ 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 : x-small;
+ 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 : x-small;
+ 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.nav
+{
+ background : none;
+ border : none;
+ border-bottom : 1px solid #84B0C7;
+}