void DiveShareExportDialog::doUpload() { //Store current settings QSettings settings; settings.setValue("diveshareExport/uid", ui->txtUID->text()); settings.setValue("diveshareExport/private", ui->chkPrivate->isChecked()); //Change UI into results mode ui->frameConfigure->setVisible(false); ui->frameResults->setVisible(true); ui->progressBar->setVisible(true); ui->progressBar->setRange(0, 0); //generate json struct membuffer buf = { 0 }; export_list(&buf, NULL, exportSelected, false); QByteArray json_data(buf.buffer, buf.len); free_buffer(&buf); //Request to server QNetworkRequest request; if (ui->chkPrivate->isChecked()) request.setUrl(QUrl(DIVESHARE_BASE_URI "/upload?private=true")); else request.setUrl(QUrl(DIVESHARE_BASE_URI "/upload")); request.setRawHeader("User-Agent", getUserAgent().toUtf8()); if (ui->txtUID->text().length() != 0) request.setRawHeader("X-UID", ui->txtUID->text().toUtf8()); reply = WebServices::manager()->put(request, json_data); QObject::connect(reply, SIGNAL(finished()), this, SLOT(finishedSlot())); }
BIF_RETTYPE finish_after_on_load_2(BIF_ALIST_2) { Module* modp = erts_get_module(BIF_ARG_1); Eterm on_load; if (!modp || modp->code == 0) { error: BIF_ERROR(BIF_P, BADARG); } if ((on_load = modp->code[MI_ON_LOAD_FUNCTION_PTR]) == 0) { goto error; } if (BIF_ARG_2 != am_false && BIF_ARG_2 != am_true) { goto error; } erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_smp_thr_progress_block(); if (BIF_ARG_2 == am_true) { int i; /* * The on_load function succeded. Fix up export entries. */ for (i = 0; i < export_list_size(); i++) { Export *ep = export_list(i); if (ep != NULL && ep->code[0] == BIF_ARG_1 && ep->code[4] != 0) { ep->address = (void *) ep->code[4]; ep->code[4] = 0; } } modp->code[MI_ON_LOAD_FUNCTION_PTR] = 0; set_default_trace_pattern(BIF_ARG_1); } else if (BIF_ARG_2 == am_false) { BeamInstr* code; BeamInstr* end; /* * The on_load function failed. Remove the loaded code. * This is an combination of delete and purge. We purge * the current code; the old code is not touched. */ erts_total_code_size -= modp->code_length; code = modp->code; end = (BeamInstr *)((char *)code + modp->code_length); erts_cleanup_funs_on_purge(code, end); beam_catches_delmod(modp->catches, code, modp->code_length); erts_free(ERTS_ALC_T_CODE, (void *) code); modp->code = NULL; modp->code_length = 0; modp->catches = BEAM_CATCHES_NIL; remove_from_address_table(code); } erts_smp_thr_progress_unblock(); erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN); BIF_RET(am_true); }
void erts_bp_match_export(BpFunctions* f, ErtsCodeMFA *mfa, int specified) { ErtsCodeIndex code_ix = erts_active_code_ix(); int i; int num_exps = export_list_size(code_ix); int ne; f->matching = (BpFunction *) Alloc(num_exps*sizeof(BpFunction)); ne = 0; for (i = 0; i < num_exps; i++) { Export* ep = export_list(i, code_ix); BeamInstr* pc; switch (specified) { case 3: if (mfa->arity != ep->info.mfa.arity) continue; case 2: if (mfa->function != ep->info.mfa.function) continue; case 1: if (mfa->module != ep->info.mfa.module) continue; case 0: break; default: ASSERT(0); } pc = ep->beam; if (ep->addressv[code_ix] == pc) { if ((*pc == (BeamInstr) em_apply_bif || *pc == (BeamInstr) em_call_error_handler)) { continue; } ASSERT(*pc == (BeamInstr) BeamOp(op_i_generic_breakpoint)); } else if (erts_is_function_native(erts_code_to_codeinfo(ep->addressv[code_ix]))) { continue; } f->matching[ne].ci = &ep->info; f->matching[ne].mod = erts_get_module(ep->info.mfa.module, code_ix); ne++; } f->matched = ne; }
void slave_init_export_table(void) { int code_ix; *slave_export_tables = export_tables; /* Patch up slave_code[3] on all existing entries now that the slave opcodes * are known. */ export_staging_lock(); for (code_ix=0; code_ix<ERTS_NUM_CODE_IX; code_ix++) { int i = export_list_size(code_ix) - 1; for (; i >= 0; i--) { Export *obj = export_list(i, code_ix); obj->slave_code[3] = (BeamInstr) SlaveOp(op_call_error_handler); } } slave_initialised = 1; export_staging_unlock(); }
static int export_pkgconfig(Package* package, int tbl) { int arr, obj; int len, i; arr = tbl_get(tbl, "config"); len = tbl_getlen(arr); package->configs = (PkgConfig**)prj_newlist(len); for (i = 0; i < len; ++i) { PkgConfig* config = ALLOCT(PkgConfig); package->configs[i] = config; config->prjConfig = project->configs[i]; obj = tbl_geti(arr, i + 1); config->objdir = tbl_getstring(obj, "objdir"); config->extension = export_value(tbl, obj, "targetextension"); config->prefix = export_value(tbl, obj, "targetprefix"); config->target = export_value(tbl, obj, "target"); /* Assign a default target, if none specified */ if (config->target == NULL) config->target = package->name; /* Pull out the value lists */ export_list(tbl, obj, "buildflags", &config->flags); export_list(tbl, obj, "buildoptions", &config->buildopts); export_list(tbl, obj, "defines", &config->defines); export_list(tbl, obj, "includepaths", &config->incpaths); export_list(tbl, obj, "libpaths", &config->libpaths); export_list(tbl, obj, "linkoptions", &config->linkopts); export_list(tbl, obj, "links", &config->links); /* Build the file list */ config->files = export_files(tbl, obj); /* Build a list of file configurations */ export_fileconfig(config, arr); } return 1; }
static void delete_export_references(Eterm module) { int i; ASSERT(is_atom(module)); for (i = 0; i < export_list_size(); i++) { Export *ep = export_list(i); if (ep != NULL && (ep->code[0] == module)) { if (ep->address == ep->code+3 && (ep->code[3] == (Eterm) em_apply_bif)) { continue; } ep->address = ep->code+3; ep->code[3] = (Uint) em_call_error_handler; ep->code[4] = 0; MatchSetUnref(ep->match_prog_set); ep->match_prog_set = NULL; } } }
void erts_bp_match_export(BpFunctions* f, Eterm mfa[3], int specified) { ErtsCodeIndex code_ix = erts_active_code_ix(); int i; int num_exps = export_list_size(code_ix); int ne; f->matching = (BpFunction *) Alloc(num_exps*sizeof(BpFunction)); ne = 0; for (i = 0; i < num_exps; i++) { Export* ep = export_list(i, code_ix); BeamInstr* pc; int j; for (j = 0; j < specified && mfa[j] == ep->code[j]; j++) { /* Empty loop body */ } if (j < specified) { continue; } pc = ep->code+3; if (ep->addressv[code_ix] == pc) { if ((*pc == (BeamInstr) em_apply_bif || *pc == (BeamInstr) em_call_error_handler)) { continue; } ASSERT(*pc == (BeamInstr) BeamOp(op_i_generic_breakpoint)); } else if (erts_is_native_break(ep->addressv[code_ix])) { continue; } f->matching[ne].pc = pc; f->matching[ne].mod = erts_get_module(ep->code[0], code_ix); ne++; } f->matched = ne; }
static void delete_code(Module* modp) { ErtsCodeIndex code_ix = erts_staging_code_ix(); Eterm module = make_atom(modp->module); int i; for (i = 0; i < export_list_size(code_ix); i++) { Export *ep = export_list(i, code_ix); if (ep != NULL && (ep->code[0] == module)) { if (ep->addressv[code_ix] == ep->code+3) { if (ep->code[3] == (BeamInstr) em_apply_bif) { continue; } else if (ep->code[3] == (BeamInstr) em_call_traced_function) { ERTS_SMP_LC_ASSERT(erts_smp_thr_progress_is_blocking()); ASSERT(modp->curr.num_traced_exports > 0); --modp->curr.num_traced_exports; MatchSetUnref(ep->match_prog_set); ep->match_prog_set = NULL; } else ASSERT(ep->code[3] == (BeamInstr) em_call_error_handler || !erts_initialized); } ep->addressv[code_ix] = ep->code+3; ep->code[3] = (BeamInstr) em_call_error_handler; ep->code[4] = 0; ASSERT(ep->match_prog_set == NULL); } } ASSERT(modp->curr.num_breakpoints == 0); ASSERT(modp->curr.num_traced_exports == 0); modp->old = modp->curr; modp->curr.code = NULL; modp->curr.code_length = 0; modp->curr.catches = BEAM_CATCHES_NIL; modp->curr.nif = NULL; }
static void delete_code(Module* modp) { ErtsCodeIndex code_ix = erts_staging_code_ix(); Eterm module = make_atom(modp->module); int i; for (i = 0; i < export_list_size(code_ix); i++) { Export *ep = export_list(i, code_ix); if (ep != NULL && (ep->info.mfa.module == module)) { if (ep->addressv[code_ix] == ep->beam) { if (ep->beam[0] == (BeamInstr) em_apply_bif) { continue; } else if (ep->beam[0] == (BeamInstr) BeamOp(op_i_generic_breakpoint)) { ERTS_SMP_LC_ASSERT(erts_smp_thr_progress_is_blocking()); ASSERT(modp->curr.num_traced_exports > 0); DBG_TRACE_MFA_P(&ep->info.mfa, "export trace cleared, code_ix=%d", code_ix); erts_clear_export_break(modp, &ep->info); } else ASSERT(ep->beam[0] == (BeamInstr) em_call_error_handler || !erts_initialized); } ep->addressv[code_ix] = ep->beam; ep->beam[0] = (BeamInstr) em_call_error_handler; ep->beam[1] = 0; DBG_TRACE_MFA_P(&ep->info.mfa, "export invalidation, code_ix=%d", code_ix); } } ASSERT(modp->curr.num_breakpoints == 0); ASSERT(modp->curr.num_traced_exports == 0); modp->old = modp->curr; erts_module_instance_init(&modp->curr); }
BIF_RETTYPE finish_after_on_load_2(BIF_ALIST_2) { ErtsCodeIndex code_ix; Module* modp; if (!erts_try_seize_code_write_permission(BIF_P)) { ERTS_BIF_YIELD2(bif_export[BIF_finish_after_on_load_2], BIF_P, BIF_ARG_1, BIF_ARG_2); } /* ToDo: Use code_ix staging instead of thread blocking */ erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_smp_thr_progress_block(); code_ix = erts_active_code_ix(); modp = erts_get_module(BIF_ARG_1, code_ix); if (!modp || !modp->old.code_hdr) { error: erts_smp_thr_progress_unblock(); erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_release_code_write_permission(); BIF_ERROR(BIF_P, BADARG); } if (modp->old.code_hdr->on_load_function_ptr == NULL) { goto error; } if (BIF_ARG_2 != am_false && BIF_ARG_2 != am_true) { goto error; } if (BIF_ARG_2 == am_true) { int i; struct erl_module_instance t; /* * Swap old and new code. */ t = modp->curr; modp->curr = modp->old; modp->old = t; /* * The on_load function succeded. Fix up export entries. */ for (i = 0; i < export_list_size(code_ix); i++) { Export *ep = export_list(i,code_ix); if (ep == NULL || ep->code[0] != BIF_ARG_1) { continue; } if (ep->code[4] != 0) { ep->addressv[code_ix] = (void *) ep->code[4]; ep->code[4] = 0; } else { if (ep->addressv[code_ix] == ep->code+3 && ep->code[3] == (BeamInstr) em_apply_bif) { continue; } ep->addressv[code_ix] = ep->code+3; ep->code[3] = (BeamInstr) em_call_error_handler; } } modp->curr.code_hdr->on_load_function_ptr = NULL; set_default_trace_pattern(BIF_ARG_1); } else if (BIF_ARG_2 == am_false) { int i; /* * The on_load function failed. Remove references to the * code that is about to be purged from the export entries. */ for (i = 0; i < export_list_size(code_ix); i++) { Export *ep = export_list(i,code_ix); if (ep == NULL || ep->code[0] != BIF_ARG_1) { continue; } if (ep->code[3] == (BeamInstr) em_apply_bif) { continue; } ep->code[4] = 0; } } erts_smp_thr_progress_unblock(); erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_release_code_write_permission(); BIF_RET(am_true); }
/*@-mustfreefresh -mustfreeonly -branchstate -globstate@*/ int main(int argc, char **argv) { int ch; bool daemonize = false; unsigned int flags = WATCH_ENABLE; struct exportmethod_t *method = NULL; progname = argv[0]; if (export_default() == NULL) { (void)fprintf(stderr, "%s: no export methods.\n", progname); exit(1); } logfile = stdout; while ((ch = getopt(argc, argv, "dD:e:f:hi:lm:V")) != -1) { switch (ch) { case 'd': openlog(basename(progname), LOG_PID | LOG_PERROR, LOG_DAEMON); daemonize = true; break; #ifdef CLIENTDEBUG_ENABLE case 'D': debug = atoi(optarg); gps_enable_debug(debug, logfile); break; #endif /* CLIENTDEBUG_ENABLE */ case 'e': method = export_lookup(optarg); if (method == NULL) { (void)fprintf(stderr, "%s: %s is not a known export method.\n", progname, optarg); exit(1); } break; case 'f': /* Output file name. */ { char fname[PATH_MAX]; time_t t; size_t s; t = time(NULL); s = strftime(fname, sizeof(fname), optarg, localtime(&t)); if (s == 0) { syslog(LOG_ERR, "Bad template \"%s\", logging to stdout.", optarg); break; } logfile = fopen(fname, "w"); if (logfile == NULL) syslog(LOG_ERR, "Failed to open %s: %s, logging to stdout.", fname, strerror(errno)); break; } case 'i': /* set polling interfal */ timeout = (time_t) atoi(optarg); if (timeout < 1) timeout = 1; if (timeout >= 3600) fprintf(stderr, "WARNING: track timeout is an hour or more!\n"); break; case 'l': export_list(stderr); exit(0); case 'm': minmove = (double )atoi(optarg); break; case 'V': (void)fprintf(stderr, "%s revision " REVISION "\n", progname); exit(0); default: usage(); /* NOTREACHED */ } } if (daemonize && logfile == stdout) { syslog(LOG_ERR, "Daemon mode with no valid logfile name - exiting."); exit(1); } if (method != NULL) if (method->magic != NULL) { source.server = (char *)method->magic; source.port = NULL; } if (optind < argc) { gpsd_source_spec(argv[optind], &source); } else gpsd_source_spec(NULL, &source); #if 0 (void)fprintf(logfile,"<!-- server: %s port: %s device: %s -->\n", source.server, source.port, source.device); #endif /* catch all interesting signals */ (void)signal(SIGTERM, quit_handler); (void)signal(SIGQUIT, quit_handler); (void)signal(SIGINT, quit_handler); /*@-unrecog@*/ /* might be time to daemonize */ if (daemonize) { /* not SuS/POSIX portable, but we have our own fallback version */ if (daemon(0, 0) != 0) (void) fprintf(stderr,"demonization failed: %s\n", strerror(errno)); } /*@+unrecog@*/ //syslog (LOG_INFO, "---------- STARTED ----------"); if (gps_open(source.server, source.port, &gpsdata) != 0) { (void)fprintf(stderr, "%s: no gpsd running or network error: %d, %s\n", progname, errno, gps_errstr(errno)); exit(1); } if (source.device != NULL) flags |= WATCH_DEVICE; (void)gps_stream(&gpsdata, flags, source.device); print_gpx_header(); (int)gps_mainloop(&gpsdata, 5000000, conditionally_log_fix); print_gpx_footer(); (void)gps_close(&gpsdata); exit(0); }
BIF_RETTYPE finish_after_on_load_2(BIF_ALIST_2) { ErtsCodeIndex code_ix; Module* modp; Eterm on_load; if (!erts_try_seize_code_write_permission(BIF_P)) { ERTS_BIF_YIELD2(bif_export[BIF_finish_after_on_load_2], BIF_P, BIF_ARG_1, BIF_ARG_2); } /* ToDo: Use code_ix staging instead of thread blocking */ erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_smp_thr_progress_block(); code_ix = erts_active_code_ix(); modp = erts_get_module(BIF_ARG_1, code_ix); if (!modp || modp->curr.code == 0) { error: erts_smp_thr_progress_unblock(); erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_release_code_write_permission(); BIF_ERROR(BIF_P, BADARG); } if ((on_load = modp->curr.code[MI_ON_LOAD_FUNCTION_PTR]) == 0) { goto error; } if (BIF_ARG_2 != am_false && BIF_ARG_2 != am_true) { goto error; } if (BIF_ARG_2 == am_true) { int i; /* * The on_load function succeded. Fix up export entries. */ for (i = 0; i < export_list_size(code_ix); i++) { Export *ep = export_list(i,code_ix); if (ep != NULL && ep->code[0] == BIF_ARG_1 && ep->code[4] != 0) { ep->addressv[code_ix] = (void *) ep->code[4]; ep->code[4] = 0; } } modp->curr.code[MI_ON_LOAD_FUNCTION_PTR] = 0; set_default_trace_pattern(BIF_ARG_1); } else if (BIF_ARG_2 == am_false) { BeamInstr* code; BeamInstr* end; /* * The on_load function failed. Remove the loaded code. * This is an combination of delete and purge. We purge * the current code; the old code is not touched. */ erts_total_code_size -= modp->curr.code_length; code = modp->curr.code; end = (BeamInstr *)((char *)code + modp->curr.code_length); erts_cleanup_funs_on_purge(code, end); beam_catches_delmod(modp->curr.catches, code, modp->curr.code_length, erts_active_code_ix()); erts_free(ERTS_ALC_T_CODE, (void *) code); modp->curr.code = NULL; modp->curr.code_length = 0; modp->curr.catches = BEAM_CATCHES_NIL; erts_remove_from_ranges(code); } erts_smp_thr_progress_unblock(); erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_release_code_write_permission(); BIF_RET(am_true); }
BIF_RETTYPE finish_after_on_load_2(BIF_ALIST_2) { ErtsCodeIndex code_ix; Module* modp; if (!erts_try_seize_code_write_permission(BIF_P)) { ERTS_BIF_YIELD2(bif_export[BIF_finish_after_on_load_2], BIF_P, BIF_ARG_1, BIF_ARG_2); } /* ToDo: Use code_ix staging instead of thread blocking */ erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_smp_thr_progress_block(); code_ix = erts_active_code_ix(); modp = erts_get_module(BIF_ARG_1, code_ix); if (!modp || !modp->on_load || !modp->on_load->code_hdr) { error: erts_smp_thr_progress_unblock(); erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_release_code_write_permission(); BIF_ERROR(BIF_P, BADARG); } if (modp->on_load->code_hdr->on_load_function_ptr == NULL) { goto error; } if (BIF_ARG_2 != am_false && BIF_ARG_2 != am_true) { goto error; } if (BIF_ARG_2 == am_true) { int i; /* * Make the code with the on_load function current. */ if (modp->curr.code_hdr) { modp->old = modp->curr; } modp->curr = *modp->on_load; erts_free(ERTS_ALC_T_PREPARED_CODE, modp->on_load); modp->on_load = 0; /* * The on_load function succeded. Fix up export entries. */ for (i = 0; i < export_list_size(code_ix); i++) { Export *ep = export_list(i,code_ix); if (ep == NULL || ep->info.mfa.module != BIF_ARG_1) { continue; } if (ep->beam[1] != 0) { ep->addressv[code_ix] = (void *) ep->beam[1]; ep->beam[1] = 0; } else { if (ep->addressv[code_ix] == ep->beam && ep->beam[0] == (BeamInstr) em_apply_bif) { continue; } ep->addressv[code_ix] = ep->beam; ep->beam[0] = (BeamInstr) em_call_error_handler; } } modp->curr.code_hdr->on_load_function_ptr = NULL; set_default_trace_pattern(BIF_ARG_1); #ifdef HIPE hipe_redirect_to_module(modp); #endif } else if (BIF_ARG_2 == am_false) { int i; /* * The on_load function failed. Remove references to the * code that is about to be purged from the export entries. */ for (i = 0; i < export_list_size(code_ix); i++) { Export *ep = export_list(i,code_ix); if (ep == NULL || ep->info.mfa.module != BIF_ARG_1) { continue; } if (ep->beam[0] == (BeamInstr) em_apply_bif) { continue; } ep->beam[1] = 0; } } erts_smp_thr_progress_unblock(); erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN); erts_release_code_write_permission(); BIF_RET(am_true); }
static bool export_data(int _iH5File, int* _piVar, char* _pstName) { bool bReturn = false; int iType = 0; SciErr sciErr = getVarType(pvApiCtx, _piVar, &iType); if (sciErr.iErr) { printError(&sciErr, 0); return false; } switch (iType) { case sci_matrix : { bReturn = export_double(_iH5File, _piVar, _pstName); break; } case sci_poly : { bReturn = export_poly(_iH5File, _piVar, _pstName); break; } case sci_boolean : { bReturn = export_boolean(_iH5File, _piVar, _pstName); break; } case sci_sparse : { bReturn = export_sparse(_iH5File, _piVar, _pstName); break; } case sci_boolean_sparse : { bReturn = export_boolean_sparse(_iH5File, _piVar, _pstName); break; } case sci_matlab_sparse : { bReturn = export_matlab_sparse(_piVar, _pstName); break; } case sci_ints : { bReturn = export_ints(_iH5File, _piVar, _pstName); break; } case sci_handles : { bReturn = export_handles(_piVar, _pstName); break; } case sci_strings : { bReturn = export_strings(_iH5File, _piVar, _pstName); break; } case sci_u_function : { bReturn = export_u_function(_piVar, _pstName); break; } case sci_c_function : { bReturn = export_c_function(_piVar, _pstName); break; } case sci_lib : { bReturn = export_lib(_piVar, _pstName); break; } case sci_list : case sci_tlist : case sci_mlist : { bReturn = export_list(_iH5File, _piVar, _pstName, iType); break; } case sci_lufact_pointer : { bReturn = export_lufact_pointer(_piVar, _pstName); break; } case 0 : //void case to "null" items in list { bReturn = export_void(_iH5File, _piVar, _pstName); break; } default : { bReturn = false; break; } } return bReturn; }
int main(int argc, char **argv) { int ch; bool daemonize = false; unsigned int flags = WATCH_ENABLE; struct exportmethod_t *method = NULL; progname = argv[0]; method = export_default(); if (method == NULL) { (void)fprintf(stderr, "%s: no export methods.\n", progname); exit(EXIT_FAILURE); } logfile = stdout; while ((ch = getopt(argc, argv, "dD:e:f:hi:lm:V")) != -1) { switch (ch) { case 'd': openlog(basename(progname), LOG_PID | LOG_PERROR, LOG_DAEMON); daemonize = true; break; #ifdef CLIENTDEBUG_ENABLE case 'D': debug = atoi(optarg); gps_enable_debug(debug, logfile); break; #endif /* CLIENTDEBUG_ENABLE */ case 'e': method = export_lookup(optarg); if (method == NULL) { (void)fprintf(stderr, "%s: %s is not a known export method.\n", progname, optarg); exit(EXIT_FAILURE); } break; case 'f': /* Output file name. */ { char *fname = NULL; time_t t; size_t s = 0; size_t fnamesize = strlen(optarg); t = time(NULL); while (s == 0) { char *newfname = realloc(fname, fnamesize); if (newfname == NULL) { syslog(LOG_ERR, "realloc failed."); goto bailout; } else { fnamesize += 1024; fname = newfname; } s = strftime(fname, fnamesize-1, optarg, localtime(&t)); } fname[s] = '\0';; logfile = fopen(fname, "w"); if (logfile == NULL) syslog(LOG_ERR, "Failed to open %s: %s, logging to stdout.", fname, strerror(errno)); bailout: free(fname); break; } case 'i': /* set polling interfal */ timeout = (time_t) atoi(optarg); if (timeout < 1) timeout = 1; if (timeout >= 3600) fprintf(stderr, "WARNING: track timeout is an hour or more!\n"); break; case 'l': export_list(stderr); exit(EXIT_SUCCESS); case 'm': minmove = (double )atoi(optarg); break; case 'V': (void)fprintf(stderr, "%s: version %s (revision %s)\n", progname, VERSION, REVISION); exit(EXIT_SUCCESS); default: usage(); /* NOTREACHED */ } } if (daemonize && logfile == stdout) { syslog(LOG_ERR, "Daemon mode with no valid logfile name - exiting."); exit(EXIT_FAILURE); } if (method->magic != NULL) { source.server = (char *)method->magic; source.port = NULL; source.device = NULL; } else { source.server = (char *)"localhost"; source.port = (char *)DEFAULT_GPSD_PORT; source.device = NULL; } if (optind < argc) { /* in this case, switch to the method "socket" always */ gpsd_source_spec(argv[optind], &source); } #if 0 (void)fprintf(logfile,"<!-- server: %s port: %s device: %s -->\n", source.server, source.port, source.device); #endif /* catch all interesting signals */ (void)signal(SIGTERM, quit_handler); (void)signal(SIGQUIT, quit_handler); (void)signal(SIGINT, quit_handler); /* might be time to daemonize */ if (daemonize) { /* not SuS/POSIX portable, but we have our own fallback version */ if (daemon(0, 0) != 0) (void) fprintf(stderr,"demonization failed: %s\n", strerror(errno)); } //syslog (LOG_INFO, "---------- STARTED ----------"); if (gps_open(source.server, source.port, &gpsdata) != 0) { (void)fprintf(stderr, "%s: no gpsd running or network error: %d, %s\n", progname, errno, gps_errstr(errno)); exit(EXIT_FAILURE); } if (source.device != NULL) flags |= WATCH_DEVICE; (void)gps_stream(&gpsdata, flags, source.device); print_gpx_header(); (void)gps_mainloop(&gpsdata, 5000000, conditionally_log_fix); print_gpx_footer(); (void)gps_close(&gpsdata); exit(EXIT_SUCCESS); }