void xml_init(cCasaSectionCompensation & anObj,cElXMLTree * aTree) { if (aTree==0) return; anObj.mGXml = aTree->mGXml; xml_init(anObj.CasaEtapeCompensation(),aTree->GetAll("CasaEtapeCompensation",false,1)); xml_init(anObj.PercCoherenceOrientation(),aTree->Get("PercCoherenceOrientation",1),double(95.0)); //tototo }
void xml_init(cCasaEtapeCompensation & anObj,cElXMLTree * aTree) { if (aTree==0) return; anObj.mGXml = aTree->mGXml; xml_init(anObj.NbIter(),aTree->Get("NbIter",1),int(1)); //tototo xml_init(anObj.Export(),aTree->Get("Export",1)); //tototo }
void xml_init(cNuageByImage & anObj,cElXMLTree * aTree) { if (aTree==0) return; anObj.mGXml = aTree->mGXml; xml_init(anObj.NameMasqSup(),aTree->Get("NameMasqSup",1)); //tototo xml_init(anObj.NameXMLNuage(),aTree->Get("NameXMLNuage",1)); //tototo }
void xml_init(cSectionInitModele & anObj,cElXMLTree * aTree) { if (aTree==0) return; anObj.mGXml = aTree->mGXml; xml_init(anObj.Name(),aTree->Get("Name",1)); //tototo xml_init(anObj.SectionLoadNuage(),aTree->Get("SectionLoadNuage",1)); //tototo xml_init(anObj.SectionEstimSurf(),aTree->Get("SectionEstimSurf",1)); //tototo }
void xml_init(cSectionEstimSurf & anObj,cElXMLTree * aTree) { if (aTree==0) return; anObj.mGXml = aTree->mGXml; xml_init(anObj.TypeSurf(),aTree->Get("TypeSurf",1)); //tototo xml_init(anObj.NbRansac(),aTree->Get("NbRansac",1),int(500)); //tototo xml_init(anObj.OriPts(),aTree->Get("OriPts",1)); //tototo xml_init(anObj.PtsSurf(),aTree->Get("PtsSurf",1)); //tototo }
void xml_init(cSectionLoadNuage & anObj,cElXMLTree * aTree) { if (aTree==0) return; anObj.mGXml = aTree->mGXml; xml_init(anObj.NuageByImage(),aTree->GetAll("NuageByImage",false,1)); xml_init(anObj.DistSep(),aTree->Get("DistSep",1),double(50.0)); //tototo xml_init(anObj.DistZone(),aTree->Get("DistZone",1),double(90.0)); //tototo xml_init(anObj.SzW(),aTree->Get("SzW",1)); //tototo }
void xml_init(cParamCasa & anObj,cElXMLTree * aTree) { if (aTree==0) return; anObj.mGXml = aTree->mGXml; xml_init(anObj.DicoLoc(),aTree->Get("DicoLoc",1)); //tototo xml_init(anObj.SectionInitModele(),aTree->GetAll("SectionInitModele",false,1)); xml_init(anObj.CasaSectionCompensation(),aTree->Get("CasaSectionCompensation",1)); //tototo xml_init(anObj.DirectoryChantier(),aTree->Get("DirectoryChantier",1)); //tototo }
/** * Prepare to accept the request body (part 1). */ apr_status_t modsecurity_request_body_start(modsec_rec *msr, char **error_msg) { *error_msg = NULL; msr->msc_reqbody_length = 0; msr->stream_input_length = 0; /* Create a separate memory pool that will be used * to allocate structures from (not data, which is allocated * via malloc). */ apr_pool_create(&msr->msc_reqbody_mp, NULL); /* Initialise request body processors, if any. */ if (msr->msc_reqbody_processor != NULL) { char *my_error_msg = NULL; msre_reqbody_processor_metadata *metadata = (msre_reqbody_processor_metadata *)apr_table_get(msr->modsecurity->msre->reqbody_processors, msr->msc_reqbody_processor); if (metadata != NULL) { if ( (metadata->init != NULL) && (metadata->init(msr, &my_error_msg) < 0)) { *error_msg = apr_psprintf(msr->mp, "%s parsing error (init): %s", msr->msc_reqbody_processor, my_error_msg); msr->msc_reqbody_error = 1; msr->msc_reqbody_error_msg = my_error_msg; msr_log(msr, 2, "%s", *error_msg); } } // TODO: All these below need to be registered in the same way as above else if (strcmp(msr->msc_reqbody_processor, "MULTIPART") == 0) { if (multipart_init(msr, &my_error_msg) < 0) { *error_msg = apr_psprintf(msr->mp, "Multipart parsing error (init): %s", my_error_msg); msr->msc_reqbody_error = 1; msr->msc_reqbody_error_msg = my_error_msg; msr_log(msr, 2, "%s", *error_msg); } } else if (strcmp(msr->msc_reqbody_processor, "XML") == 0) { if (xml_init(msr, &my_error_msg) < 0) { *error_msg = apr_psprintf(msr->mp, "XML parsing error (init): %s", my_error_msg); msr->msc_reqbody_error = 1; msr->msc_reqbody_error_msg = my_error_msg; msr_log(msr, 2, "%s", *error_msg); } } else if (strcmp(msr->msc_reqbody_processor, "URLENCODED") == 0) { /* Do nothing, URLENCODED processor does not support streaming yet. */ } else { *error_msg = apr_psprintf(msr->mp, "Unknown request body processor: %s", msr->msc_reqbody_processor); return -1; } } return modsecurity_request_body_start_init(msr, error_msg); }
static void kml_rd_init(const char *fname) { xml_init(fname, kml_map, NULL); xml_ignore_tags(kml_tags_to_ignore); }
cDbleGrid::cDbleGrid ( cXMLMode aXM, const std::string & aDir, const std::string & aXML ) { cElXMLTree aTree(aDir+aXML); cElXMLTree * aTrNew = aTree.Get("GridDirecteEtInverse"); if (aTrNew) { cGridDirecteEtInverse aGDEI; xml_init(aGDEI,aTrNew); pGrDir = FromXMLExp(aGDEI.Directe()); pGrInv = FromXMLExp(aGDEI.Inverse()); } else { pGrInv = new PtImGrid (aTree.GetUnique("grid_inverse")->GetPtImGrid(aDir)); pGrDir = new PtImGrid (aTree.GetUnique("grid_directe")->GetPtImGrid(aDir)); if (aXM.toSwapDirInv) { ElSwap(pGrInv,pGrDir); } } }
int process_psia_request(request *req) { int status; node_t *root = NULL; /* initialize the device interface */ status = iface_init(req); if(status != R_REQUEST_OK) return 1; /* set up the response buffer */ status = xadd_init(req); if(status != R_REQUEST_OK) return 1; /* set up the parser */ status = xml_init(req); if(status != R_REQUEST_OK) return 1; /* create the root node */ root = add_node(NULL, "/PSIA", M_NULL, NODE_SERVICE, NULL, NULL); desc_get_function(root, "Root service"); add_std_resources(root, &process_index, &process_indexr, &process_description, NULL); status = process_root(req, root); return 0; }
static xml * xml_new( void ) { xml *x = ( xml * ) malloc( sizeof( xml ) ); if ( x ) xml_init( x ); return x; }
/** * get server info */ void rsp_info(WS_CONNINFO *pwsc, PRIVINFO *ppi) { XMLSTRUCT *pxml; char servername[256]; int size; pi_log(E_DBG,"Starting rsp_info\n"); pi_config_set_status(pwsc,0,"Getting server info"); pxml = xml_init(pwsc,1); xml_push(pxml,"response"); xml_push(pxml,"status"); xml_output(pxml,"errorcode","0"); xml_output(pxml,"errorstring",""); xml_output(pxml,"records","0"); xml_output(pxml,"totalrecords","0"); xml_pop(pxml); /* status */ /* info block */ xml_push(pxml,"info"); xml_output(pxml,"count","%d",pi_db_count_items(COUNT_SONGS)); xml_output(pxml,"rsp-version","%s",RSP_VERSION); xml_output(pxml,"server-version","%s",pi_server_ver()); size = sizeof(servername); pi_server_name(servername,&size); xml_output(pxml,"name","%s",servername); xml_pop(pxml); /* info */ xml_pop(pxml); /* response */ xml_deinit(pxml); pi_config_set_status(pwsc,0,NULL); }
/** * Execute a tokenized command and display its output. * * @param conn The connection to lldpd. * @param fmt Output format. * @param argc Number of arguments. * @param argv Array of arguments. * @return 0 if an error occurred, 1 otherwise */ static int cmd_exec(lldpctl_conn_t *conn, const char *fmt, int argc, const char **argv) { /* Init output formatter */ struct writer *w; if (strcmp(fmt, "plain") == 0) w = txt_init(stdout); else if (strcmp(fmt, "keyvalue") == 0) w = kv_init(stdout); #ifdef USE_XML else if (strcmp(fmt, "xml") == 0) w = xml_init(stdout); #endif #ifdef USE_JANSSON else if (strcmp(fmt, "json") == 0) w = jansson_init(stdout); #endif #ifdef USE_JSONC else if (strcmp(fmt, "json") == 0) w = jsonc_init(stdout); #endif else w = txt_init(stdout); /* Execute command */ int rc = commands_execute(conn, w, root, argc, argv, is_privileged()); if (rc != 0) { log_info("lldpctl", "an error occurred while executing last command"); w->finish(w); return 0; } w->finish(w); return 1; }
static void xol_rd_init(const char *fname) { trk = NULL; wpt = NULL; xml_init(fname, xol_map, NULL); }
/*The Main Program*/ int main(int argc, char** argv) { /* defines the tray_icon, as well as init gtk*/ g_set_application_name(PACKAGE_NAME); parse_command_line_options(argc,argv); register_thread("Main Thread"); if (!queue_init()) print("queue_init FAILED",NULL,ERROR); print("Glade File",glade_file,DEBUG); g_thread_init(NULL); gtk_init(NULL,NULL); gtk_init(&argc, &argv); Hosts_lock = g_mutex_new(); Userpath_lock = g_mutex_new(); g_mutex_lock(Userpath_lock); Userpath = g_strdup(getenv("HOME")); g_mutex_unlock(Userpath_lock); settings_init(); rest_init(); if (!xml_init()) print("xml_init FAILED",NULL,ERROR); init_hostname(); /*sets the tray icon from the create_tray_icon*/ create_tray_icon(); playing_info_music pInfo = {"Artist","Album","Song",0,0,0}; /* declares the playing info struct, and print if, if _DEBUG is definded at the top of msdaemon.c*/ /*inits the dbus and get the first set of info*/ dbus_init(); pInfo = dbus_get_playing_info_music(); print_playing_info_music(pInfo); get_active_devices(NULL); update_song_info(); GError *error; if ( (network_thread = g_thread_create((GThreadFunc)rest_thread_handler, NULL, FALSE, &error)) == NULL){ print("Error Creating Network Thread",error->message,ERROR); g_error_free(error); } if ( (file_thread = g_thread_create((GThreadFunc)file_thread_handler, NULL, FALSE, &error)) == NULL){ print("Error Creating Network Thread",error->message,ERROR); g_error_free(error); } if ( (gui_thread = g_thread_create((GThreadFunc)gui_thread_handler, NULL, FALSE, &error)) == NULL){ print("Error Creating Network Thread",error->message,ERROR); g_error_free(error); } g_timeout_add (1000,(GSourceFunc) get_next_command,NULL); g_timeout_add (300000,(GSourceFunc) update_active_devices,NULL); init_status_window(FALSE,glade_file); start_tray(); g_free(Userpath); deauthenticate(); return 0; }
static void tef_xml_rd_init(const char *fname) { wpt_tmp = NULL; waypoints = 0; item_count = -1; version = 1.5; xml_init(fname, tef_xml_map, NULL); }
int medin_processf( fields *medin, char *data, char *filename, long nref ) { int status; xml top; xml_init( &top ); xml_tree( data, &top ); status = medin_assembleref( &top, medin ); xml_free( &top ); if ( status==BIBL_OK ) return 1; return 0; }
static int wordin_processf( fields *wordin, char *data, char *filename, long nref, param *p ) { int status, ret = 1; xml top; xml_init( &top ); xml_tree( data, &top ); status = wordin_assembleref( &top, wordin ); xml_free( &top ); if ( status==BIBL_ERR_MEMERR ) ret = 0; return ret; }
static void xml_reset(pcmk__output_t *out) { char *buf = NULL; xml_private_t *priv = out->priv; CRM_ASSERT(priv != NULL); buf = dump_xml_formatted_with_text(priv->root); fprintf(out->dest, "%s", buf); free(buf); xml_free_priv(out); xml_init(out); }
static void osm_rd_init(const char *fname) { wpt = NULL; rte = NULL; wpt_loaded = 0; rte_loaded = 0; waypoints = avltree_init(0, MYNAME); if (! keys) osm_features_init(); xml_init(fname, osm_map, NULL); }
/** * /rsp/db * * dump details about all playlists */ void rsp_db(WS_CONNINFO *pwsc, PRIVINFO *ppi) { XMLSTRUCT *pxml; char *pe; int err; char **row; int rowindex; ppi->dq.query_type = QUERY_TYPE_PLAYLISTS; if((err=pi_db_enum_start(&pe,&ppi->dq)) != 0) { rsp_error(pwsc, ppi, err | E_DB, pe); pi_db_enum_dispose(NULL,&ppi->dq); return; } pi_config_set_status(pwsc,0,"Fetching playlist info"); pxml = xml_init(pwsc,1); xml_push(pxml,"response"); xml_push(pxml,"status"); xml_output(pxml,"errorcode","0"); xml_output(pxml,"errorstring",""); xml_output(pxml,"records","%d",ppi->dq.totalcount); xml_output(pxml,"totalrecords","%d",ppi->dq.totalcount); xml_pop(pxml); /* status */ xml_push(pxml,"playlists"); while((pi_db_enum_fetch_row(NULL,&row,&ppi->dq) == 0) && (row)) { xml_push(pxml,"playlist"); rowindex=0; while(rsp_playlist_fields[rowindex].name) { if(rsp_playlist_fields[rowindex].flags & F_FULL) { xml_output(pxml,rsp_playlist_fields[rowindex].name,"%s", row[rowindex]); } rowindex++; } xml_pop(pxml); /* playlist */ } pi_db_enum_end(NULL); pi_db_enum_dispose(NULL,&ppi->dq); xml_pop(pxml); /* playlists */ xml_pop(pxml); /* response */ xml_deinit(pxml); pi_config_set_status(pwsc,0,NULL); }
void rsp_error(WS_CONNINFO *pwsc, PRIVINFO *ppi, int eno, char *estr) { XMLSTRUCT *pxml; pxml = xml_init(pwsc, 1); xml_push(pxml,"response"); xml_push(pxml,"status"); xml_output(pxml,"errorcode","%d",eno); xml_output(pxml,"errorstring","%s",estr); xml_output(pxml,"records","0"); xml_output(pxml,"totalrecords","0"); xml_pop(pxml); /* status */ xml_pop(pxml); /* response */ xml_deinit(pxml); pi_ws_will_close(pwsc); }
/****************************************************************************** **函数名称: xml_screat **功 能: 将XML字串转为XML树 **输入参数: ** str: XML字串 ** len: 字串长度限制(-1:表示遇到\0结束) ** opt: 选项信息 **输出参数: **返 回: XML树 **实现描述: ** 1. 初始化栈 ** 2. 初始化xml树 ** 3. 在内存中将文件解析为XML树 **注意事项: **作 者: # Qifeng.zou # 2013.02.05 # ******************************************************************************/ xml_tree_t *xml_screat(const char *str, size_t len, xml_opt_t *opt) { Stack_t stack; xml_tree_t *xml; if ((NULL == str) || ('\0' == str[0])) { return xml_creat_empty(opt); } do { /* 1. 初始化栈 */ if (stack_init(&stack, XML_MAX_DEPTH)) { log_error(opt->log, "Init xml stack failed!"); break; } /* 2. 初始化XML树 */ xml = xml_init(opt); if (NULL == xml) { log_error(opt->log, "Init xml tree failed!"); break; } /* 3. 解析XML文件缓存 */ if (xml_parse(xml, &stack, str, len)) { log_error(xml->log, "Parse xml failed!"); xml_destroy(xml); break; } stack_destroy(&stack); return xml; } while(0); /* 4. 释放内存空间 */ stack_destroy(&stack); return NULL; }
int xml_getencoding( newstr *s ) { newstr descriptor; xml descriptxml; int file_charset = CHARSET_UNKNOWN; char *p, *q; p = strstr( s->data, "<?xml" ); if ( !p ) p = strstr( s->data, "<?XML" ); if ( p ) { q = strstr( p, "?>" ); if ( q ) { newstr_init( &descriptor ); newstr_segcpy( &descriptor, p, q+2 ); xml_init( &descriptxml ); xml_tree( descriptor.data, &descriptxml ); file_charset = xml_getencodingr( &descriptxml ); xml_free( &descriptxml ); newstr_free( &descriptor ); newstr_segdel( s, p, q+2 ); } } return file_charset; }
void rsp_browse(WS_CONNINFO *pwsc, PRIVINFO *ppi) { XMLSTRUCT *pxml; char *pe; int err; char **row; int returned; /* this might fail if an unsupported browse type */ ppi->dq.query_type = QUERY_TYPE_DISTINCT; ppi->dq.distinct_field = ppi->uri_sections[3]; ppi->dq.filter = pi_ws_getvar(pwsc,"query"); ppi->dq.filter_type = FILTER_TYPE_FIREFLY; if(pi_ws_getvar(pwsc,"offset")) { ppi->dq.offset = atoi(pi_ws_getvar(pwsc,"offset")); } if(pi_ws_getvar(pwsc,"limit")) { ppi->dq.limit = atoi(pi_ws_getvar(pwsc,"limit")); } ppi->dq.playlist_id = atoi(ppi->uri_sections[2]); if((err=pi_db_enum_start(&pe,&ppi->dq)) != 0) { rsp_error(pwsc, ppi, err | E_DB, pe); pi_db_enum_dispose(NULL,&ppi->dq); return; } pi_config_set_status(pwsc,0,"Browsing"); pxml = xml_init(pwsc,1); if(ppi->dq.offset > ppi->dq.totalcount) { returned = 0; } else { returned = ppi->dq.limit; if(returned > (ppi->dq.totalcount - ppi->dq.offset)) returned = ppi->dq.totalcount - ppi->dq.offset; } xml_push(pxml,"response"); xml_push(pxml,"status"); xml_output(pxml,"errorcode","0"); xml_output(pxml,"errorstring",""); xml_output(pxml,"records","%d",returned); xml_output(pxml,"totalrecords","%d",ppi->dq.totalcount); xml_pop(pxml); /* status */ xml_push(pxml,"items"); while((pi_db_enum_fetch_row(NULL,&row,&ppi->dq) == 0) && (row)) { xml_output(pxml,"item","%s",row[0]); } pi_db_enum_end(NULL); pi_db_enum_dispose(NULL,&ppi->dq); xml_pop(pxml); /* items */ xml_pop(pxml); /* response */ xml_deinit(pxml); pi_config_set_status(pwsc,0,NULL); }
/** * get all items under the playlist */ void rsp_playlist(WS_CONNINFO *pwsc, PRIVINFO *ppi) { XMLSTRUCT *pxml; char *pe; int err; char **row; int rowindex; int returned; char *browse_type; int type; int transcode; unsigned int samplerate; int done = 0; ppi->dq.filter = pi_ws_getvar(pwsc,"query"); ppi->dq.filter_type = FILTER_TYPE_FIREFLY; if(pi_ws_getvar(pwsc,"offset")) { ppi->dq.offset = atoi(pi_ws_getvar(pwsc,"offset")); } if(pi_ws_getvar(pwsc,"limit")) { ppi->dq.limit = atoi(pi_ws_getvar(pwsc,"limit")); } browse_type = pi_ws_getvar(pwsc,"type"); type = F_FULL; if(browse_type) { if(strcasecmp(browse_type,"browse") == 0) { type = F_BROWSE; } else if(strcasecmp(browse_type,"id") == 0) { type = F_ID; } else if(strcasecmp(browse_type,"detailed") ==0) { type = F_DETAILED; } } ppi->dq.query_type = QUERY_TYPE_ITEMS; ppi->dq.playlist_id = atoi(ppi->uri_sections[2]); if((err=pi_db_enum_start(&pe,&ppi->dq)) != 0) { rsp_error(pwsc, ppi, err | E_DB, pe); pi_db_enum_dispose(NULL,&ppi->dq); free(pe); return; } pi_config_set_status(pwsc,0,"Fetching playlist items"); pxml = xml_init(pwsc,1); if(ppi->dq.offset > ppi->dq.totalcount) { returned = 0; } else { returned = ppi->dq.limit; if(returned > (ppi->dq.totalcount - ppi->dq.offset)) returned = ppi->dq.totalcount - ppi->dq.offset; } xml_push(pxml,"response"); xml_push(pxml,"status"); xml_output(pxml,"errorcode","0"); xml_output(pxml,"errorstring",""); xml_output(pxml,"records","%d",returned); xml_output(pxml,"totalrecords","%d",ppi->dq.totalcount); xml_pop(pxml); /* status */ xml_push(pxml,"items"); while((!done) && (pi_db_enum_fetch_row(NULL,&row,&ppi->dq) == 0) && (row)) { xml_push(pxml,"item"); rowindex=0; transcode = 0; transcode = pi_should_transcode(pwsc,row[37]); pi_log(E_DBG,"Transcode: %d, %s: %s\n",transcode,row[37],row[2]); while(rsp_fields[rowindex].name) { if((rsp_fields[rowindex].flags & type) && (row[rowindex] && strlen(row[rowindex]))) { if(transcode) { switch(rowindex) { case 8: xml_output(pxml,rsp_fields[rowindex].name,"%s","wav"); break; case 29: xml_output(pxml,rsp_fields[rowindex].name,"%s", "wav audio file"); break; case 14: /* bitrate */ samplerate = atoi(row[15]); if(samplerate) { samplerate = (samplerate * 8) / 250; } else { samplerate = 1411; } xml_output(pxml,rsp_fields[rowindex].name,"%d", samplerate); break; case 37: xml_output(pxml,rsp_fields[rowindex].name,"%s","wav"); xml_output(pxml,"original_codec","%s",row[37]); break; default: xml_output(pxml,rsp_fields[rowindex].name,"%s", row[rowindex]); break; } } else { /* check for pushing against closed socket */ if(xml_output(pxml,rsp_fields[rowindex].name,"%s", row[rowindex]) == -1) done=1; } } rowindex++; } xml_pop(pxml); /* item */ } pi_db_enum_end(NULL); xml_pop(pxml); /* items */ xml_pop(pxml); /* response */ xml_deinit(pxml); pi_config_set_status(pwsc,0,NULL); }
int main (int argc, char *argv[]) { UniqueApp *app; UniqueMessageData *msg; GError *error = NULL; GOptionContext *context; GOptionGroup *debug; gulong debug_flags = 0; LifereaDBus *dbus = NULL; const gchar *initial_state = "shown"; gchar *feed = NULL; int initialState; gboolean show_tray_icon, start_in_tray; #ifdef USE_SM gchar *opt_session_arg = NULL; #endif GOptionEntry entries[] = { { "mainwindow-state", 'w', 0, G_OPTION_ARG_STRING, &initial_state, N_("Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'"), N_("STATE") }, #ifdef USE_SM { "session", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_session_arg, NULL, NULL }, #endif { "version", 'v', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, show_version, N_("Show version information and exit"), NULL }, { "add-feed", 'a', 0, G_OPTION_ARG_STRING, &feed, N_("Add a new subscription"), N_("uri") }, { NULL } }; GOptionEntry debug_entries[] = { { "debug-all", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all types"), NULL }, { "debug-cache", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages for the cache handling"), NULL }, { "debug-conf", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages for the configuration handling"), NULL }, { "debug-db", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the database handling"), NULL }, { "debug-gui", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all GUI functions"), NULL }, { "debug-html", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Enables HTML rendering debugging. Each time Liferea renders HTML output it will also dump the generated HTML into ~/.liferea_1.6/output.xhtml"), NULL }, { "debug-net", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all network activity"), NULL }, { "debug-parsing", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all parsing functions"), NULL }, { "debug-performance", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages when a function takes too long to process"), NULL }, { "debug-trace", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages when entering/leaving functions"), NULL }, { "debug-update", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the feed update processing"), NULL }, { "debug-vfolder", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the search folder matching"), NULL }, { "debug-verbose", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print verbose debugging messages"), NULL }, { NULL } }; if (!g_thread_supported ()) g_thread_init (NULL); #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif debug = g_option_group_new ("debug", _("Print debugging messages for the given topic"), _("Print debugging messages for the given topic"), &debug_flags, NULL); g_option_group_set_translation_domain(debug, GETTEXT_PACKAGE); g_option_group_add_entries (debug, debug_entries); context = g_option_context_new (NULL); g_option_context_set_summary (context, N_("Liferea, the Linux Feed Reader")); g_option_context_set_description (context, N_("For more information, please visit http://liferea.sourceforge.net/")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_set_translation_domain(context, GETTEXT_PACKAGE); g_option_context_add_group (context, debug); g_option_context_add_group (context, gtk_get_option_group (FALSE)); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error) { g_print ("Error parsing options: %s\n", error->message); } set_debug_level (debug_flags); /* Configuration necessary for network options, so it has to be initialized before update_init() */ conf_init (); #ifdef USE_DBUS dbus_g_thread_init (); #endif /* We need to do the network initialization here to allow network-manager to be setup before gtk_init() */ update_init (); gtk_init (&argc, &argv); /* Single instance checks */ app = unique_app_new_with_commands ("net.sourceforge.liferea", NULL, "add_feed", COMMAND_ADD_FEED, NULL); if (unique_app_is_running (app)) { g_print ("Liferea is already running\n"); unique_app_send_message (app, UNIQUE_ACTIVATE, NULL); if (feed) { msg = unique_message_data_new (); unique_message_data_set_text (msg, feed, -1); unique_app_send_message (app, COMMAND_ADD_FEED, msg); } return 1; } else { g_signal_connect (app, "message-received", G_CALLBACK (message_received_cb), NULL); } /* GTK theme support */ g_set_application_name (_("Liferea")); gtk_window_set_default_icon_name ("liferea"); debug_start_measurement (DEBUG_DB); /* order is important! */ db_init (); /* initialize sqlite */ xml_init (); /* initialize libxml2 */ #ifdef HAVE_LIBNOTIFY notification_plugin_register (&libnotify_plugin); #endif social_init (); /* initialize social bookmarking */ #ifdef USE_DBUS dbus = liferea_dbus_new (); #else debug0 (DEBUG_GUI, "Compiled without DBUS support."); #endif #ifdef USE_AVAHI if (conf_get_bool_value (SYNC_AVAHI_ENABLED)) { LifereaAvahiPublisher *avahiPublisher = NULL; debug0 (DEBUG_CACHE, "Registering with AVAHI"); avahiPublisher = liferea_avahi_publisher_new (); liferea_avahi_publisher_publish (avahiPublisher, conf_get_str_value (SYNC_AVAHI_SERVICE_NAME), 23632); } else { debug0 (DEBUG_CACHE, "Avahi support available, but disabled by preferences."); } #else debug0 (DEBUG_CACHE, "Compiled without AVAHI support"); #endif /* how to start liferea, command line takes precedence over preferences */ conf_get_bool_value (SHOW_TRAY_ICON, &show_tray_icon); conf_get_bool_value (START_IN_TRAY, &start_in_tray); if (g_str_equal(initial_state, "iconified")) { initialState = MAINWINDOW_ICONIFIED; } else if (g_str_equal(initial_state, "hidden") || (show_tray_icon && start_in_tray)) { initialState = MAINWINDOW_HIDDEN; } else { initialState = MAINWINDOW_SHOWN; } liferea_shell_create (initialState); g_set_prgname ("liferea"); #ifdef USE_SM /* This must be after feedlist reading because some session managers will tell Liferea to exit if Liferea does not respond to SM requests within a minute or two. This starts the main loop soon after opening the SM connection. */ session_init (BIN_DIR G_DIR_SEPARATOR_S "liferea", opt_session_arg); session_set_cmd (NULL, initialState); #endif signal (SIGTERM, signal_handler); signal (SIGINT, signal_handler); signal (SIGHUP, signal_handler); #ifndef G_OS_WIN32 signal (SIGBUS, fatal_signal_handler); signal (SIGSEGV, fatal_signal_handler); #endif /* Note: we explicitely do not use the gdk_thread_* locking in Liferea because it freezes the program when running Flash applets in gtkmozembed */ runState = STATE_STARTING; debug_end_measurement (DEBUG_DB, "startup"); if (feed) feedlist_add_subscription (feed, NULL, NULL, 0); gtk_main (); g_object_unref (G_OBJECT (dbus)); return 0; }
int main (int argc, char *argv[]) { GtkApplication *app; GError *error = NULL; GOptionContext *context; GOptionGroup *debug; gulong debug_flags = 0; LifereaDBus *dbus = NULL; gchar *feedUri = NULL; gint status; GOptionEntry entries[] = { { "mainwindow-state", 'w', 0, G_OPTION_ARG_STRING, &initialStateOption, N_("Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'"), N_("STATE") }, { "version", 'v', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, show_version, N_("Show version information and exit"), NULL }, { "add-feed", 'a', 0, G_OPTION_ARG_STRING, &feedUri, N_("Add a new subscription"), N_("uri") }, { NULL, 0, 0, 0, NULL, NULL, NULL } }; GOptionEntry debug_entries[] = { { "debug-all", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all types"), NULL }, { "debug-cache", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages for the cache handling"), NULL }, { "debug-conf", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages for the configuration handling"), NULL }, { "debug-db", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the database handling"), NULL }, { "debug-gui", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all GUI functions"), NULL }, { "debug-html", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Enables HTML rendering debugging. Each time Liferea renders HTML output it will also dump the generated HTML into ~/.cache/liferea/output.xhtml"), NULL }, { "debug-net", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all network activity"), NULL }, { "debug-parsing", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all parsing functions"), NULL }, { "debug-performance", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages when a function takes too long to process"), NULL }, { "debug-trace", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages when entering/leaving functions"), NULL }, { "debug-update", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the feed update processing"), NULL }, { "debug-vfolder", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the search folder matching"), NULL }, { "debug-verbose", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print verbose debugging messages"), NULL }, { NULL, 0, 0, 0, NULL, NULL, NULL } }; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif debug = g_option_group_new ("debug", _("Print debugging messages for the given topic"), _("Print debugging messages for the given topic"), &debug_flags, NULL); g_option_group_set_translation_domain(debug, GETTEXT_PACKAGE); g_option_group_add_entries (debug, debug_entries); context = g_option_context_new (NULL); g_option_context_set_summary (context, N_("Liferea, the Linux Feed Reader")); g_option_context_set_description (context, N_("For more information, please visit http://lzone.de/liferea/")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_set_translation_domain(context, GETTEXT_PACKAGE); g_option_context_add_group (context, debug); g_option_context_add_group (context, gtk_get_option_group (FALSE)); g_option_context_add_group (context, g_irepository_get_option_group ()); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error) { g_print ("Error parsing options: %s\n", error->message); } set_debug_level (debug_flags); /* Configuration necessary for network options, so it has to be initialized before update_init() */ conf_init (); /* We need to do the network initialization here to allow network-manager to be setup before gtk_init() */ update_init (); gtk_init (&argc, &argv); /* Single instance checks, also note that we pass or only RPC (add-feed) as activate signal payload as it is simply an URI string. */ app = gtk_application_new ("net.sourceforge.liferea", G_APPLICATION_HANDLES_OPEN); g_signal_connect (app, "activate", G_CALLBACK (on_app_activate), feedUri); g_signal_connect (app, "open", G_CALLBACK (on_feed_add), NULL); g_set_prgname ("liferea"); g_set_application_name (_("Liferea")); gtk_window_set_default_icon_name ("liferea"); /* GTK theme support */ debug_start_measurement (DEBUG_DB); /* order is important! */ db_init (); /* initialize sqlite */ xml_init (); /* initialize libxml2 */ #ifdef HAVE_LIBNOTIFY notification_plugin_register (&libnotify_plugin); #endif social_init (); /* initialize social bookmarking */ dbus = liferea_dbus_new (); signal (SIGTERM, signal_handler); signal (SIGINT, signal_handler); signal (SIGHUP, signal_handler); /* Note: we explicitely do not use the gdk_thread_* locking in Liferea because it freezes the program when running Flash applets */ runState = STATE_STARTING; debug_end_measurement (DEBUG_DB, "startup"); status = g_application_run (G_APPLICATION (app), 0, NULL); /* Trigger RPCs if we are not primary instance (currently only feed-add) */ if (feedUri && g_application_get_is_remote (G_APPLICATION (app))) { GFile *uris[2]; uris[0] = g_file_new_for_uri (feedUri); uris[1] = NULL; g_application_open (G_APPLICATION (app), uris, 1, "feed-add"); g_object_unref (uris[0]); } g_object_unref (G_OBJECT (dbus)); g_object_unref (app); return status; }
static void gtc_rd_init(const char *fname) { xml_init(fname, gtc_map, NULL); xml_ignore_tags(gtc_tags_to_ignore); }