static void recv_request( const messenger_context_handle *handle, uint16_t tag, void *data, size_t len ) { UNUSED( tag ); UNUSED( data ); UNUSED( len ); buffer *reply = get_switches(); send_reply_message( handle, 0, reply->data, reply->length ); free_buffer( reply ); }
static void field_instruction_end(ParserContext *ctx) { FieldInstructionState *state = get_state(ctx); gchar *field_type, *buffer; GSList *switches = NULL, *formatswitches = NULL, *iter; const FieldInfo *field_info = fields; GScanner *tokenizer = g_scanner_new(&field_parser); g_scanner_input_text(tokenizer, state->scanbuffer->str, strlen(state->scanbuffer->str)); /* Get field type */ if(!(field_type = get_string_token(tokenizer))) return; /* Determine if field type is supported and get switches and arguments */ while(field_info->name != NULL) { if(g_ascii_strcasecmp(field_type, field_info->name) == 0) { state->type = field_info->type; switches = get_switches(tokenizer, switches, field_info->switches, field_info->argswitches, field_info->wideswitches, field_info->wideargswitches); if(field_info->has_argument) { if(!(buffer = get_string_token(tokenizer))) return; state->argument = g_strdup(buffer); switches = get_switches(tokenizer, switches, field_info->switches, field_info->argswitches, field_info->wideswitches, field_info->wideargswitches); } break; } field_info++; } if(field_info->name == NULL) /* Field name wasn't found in list */ { g_warning(_("'%s' field not supported"), field_type); g_scanner_destroy(tokenizer); return; } formatswitches = get_switches(tokenizer, formatswitches, "", "@#*", "", ""); for(iter = formatswitches; iter; iter = g_slist_next(iter)) { SwitchInfo *info = (SwitchInfo *)iter->data; /* Parse a date format consisting of \@ and a string */ if(strcmp(info->switchname, "@") == 0) state->date_format = g_strdup(info->switcharg); /* Parse a numeric format consisting of \# and a string */ else if(strcmp(info->switchname, "#") == 0) state->numeric_format = g_strdup(info->switcharg); /* Parse a general format consisting of \* and a keyword */ else if(strcmp(info->switchname, "*") == 0) { if(strcmp(info->switcharg, "ALPHABETIC") == 0) state->general_number_format = NUMBER_ALPHABETIC; else if(strcmp(info->switcharg, "alphabetic") == 0) state->general_number_format = NUMBER_alphabetic; else if(strcmp(info->switcharg, "Arabic") == 0) state->general_number_format = NUMBER_ARABIC; else if(strcmp(info->switcharg, "ArabicDash") == 0) state->general_number_format = NUMBER_ARABIC_DASH; else if(strcmp(info->switcharg, "CIRCLENUM") == 0) state->general_number_format = NUMBER_CIRCLENUM; else if(strcmp(info->switcharg, "GB1") == 0) state->general_number_format = NUMBER_DECIMAL_ENCLOSED_PERIOD; else if(strcmp(info->switcharg, "GB2") == 0) state->general_number_format = NUMBER_DECIMAL_ENCLOSED_PARENTHESES; else if(strcmp(info->switcharg, "Hex") == 0) state->general_number_format = NUMBER_HEX; else if(strcmp(info->switcharg, "MERGEFORMATINET") == 0) ; /* ignore */ else if(strcmp(info->switcharg, "Ordinal") == 0) state->general_number_format = NUMBER_ORDINAL; else if(strcmp(info->switcharg, "Roman") == 0) state->general_number_format = NUMBER_ROMAN; else if(strcmp(info->switcharg, "roman") == 0) state->general_number_format = NUMBER_roman; else g_warning(_("Format '%s' not supported"), info->switcharg); /* Just continue */ } } Destination *fielddest = g_queue_peek_nth(ctx->destination_stack, 1); FieldState *fieldstate = g_queue_peek_tail(fielddest->state_stack); switch(state->type) { case FIELD_TYPE_HYPERLINK: /* Actually inserting hyperlinks into the text buffer is a whole security can of worms I don't want to open! Just use field result */ fieldstate->ignore_field_result = FALSE; break; case FIELD_TYPE_INCLUDEPICTURE: { GError *error = NULL; gchar **pathcomponents = g_strsplit(state->argument, "\\", 0); gchar *realfilename = g_build_filenamev(pathcomponents); g_strfreev(pathcomponents); GdkPixbuf *picture = gdk_pixbuf_new_from_file(realfilename, &error); if(!picture) g_warning(_("Error loading picture from file '%s': %s"), realfilename, error->message); else { /* Insert picture into text buffer */ GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(ctx->textbuffer, &iter, ctx->endmark); gtk_text_buffer_insert_pixbuf(ctx->textbuffer, &iter, picture); g_object_unref(picture); } g_free(realfilename); } /* Don't use calculated field result */ fieldstate->ignore_field_result = TRUE; break; case FIELD_TYPE_PAGE: { gchar *output = format_integer(1, state->general_number_format); GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(ctx->textbuffer, &iter, ctx->endmark); gtk_text_buffer_insert(ctx->textbuffer, &iter, output, -1); g_free(output); } /* Don't use calculated field result */ fieldstate->ignore_field_result = TRUE; break; default: g_assert_not_reached(); } g_free(state->argument); g_free(state->date_format); g_free(state->numeric_format); g_slist_foreach(switches, (GFunc)free_switch_info, NULL); g_slist_foreach(formatswitches, (GFunc)free_switch_info, NULL); g_scanner_destroy(tokenizer); }
static SSHORT parse_cmd_line( int argc, TEXT** argv, bool zapPasswd) { /************************************** * * p a r s e _ c m d _ l i n e * ************************************** * * Functional description * Parses the command line. After it was parsed * executes commands that do require server access * (help, show, etc.) and checks some conditions * for other command. * * returns: * * FB_SUCCESS on normal completion, * ACT_QUIT if user chooses to quit * ACT_PROMT used by main() to switch into * the prompt mode * ACT_NONE on error or * if no further actions necessary * (like help, version, etc.) * **************************************/ TEXT msg[MSG_LEN]; bool quitflag = false; ibmgr_data.operation = OP_NONE; ibmgr_data.suboperation = SOP_NONE; ibmgr_data.par_entered = 0; SSHORT ret = get_switches(argc, argv, ibmgr_in_sw_table, &ibmgr_data, &quitflag, zapPasswd); if (ret != FB_SUCCESS) { if (ret == ERR_SYNTAX) { SRVRMGR_msg_get(MSG_SYNTAX, msg); fprintf(OUTFILE, "%s\n", msg); } return ACT_NONE; } switch (ibmgr_data.operation) { case OP_SHUT: if (strcmp(ibmgr_data.user, SYSDBA_USER_NAME)) { SRVRMGR_msg_get(MSG_NOPERM, msg); fprintf(OUTFILE, "%s\n", msg); ret = ACT_NONE; break; } // The only allowed suboperation when shutdown // has been started is to IGNORE it. if (ibmgr_data.shutdown && ibmgr_data.suboperation != SOP_SHUT_IGN) { SRVRMGR_msg_get(MSG_SHUTDOWN, msg); fprintf(OUTFILE, "%s\n", msg); SRVRMGR_msg_get(MSG_CANTSHUT, msg); fprintf(OUTFILE, "%s\n", msg); ret = ACT_NONE; } break; case OP_START: if ((strcmp(ibmgr_data.real_user, "root") && strcmp(ibmgr_data.real_user, FIREBIRD_USER_NAME) && strcmp(ibmgr_data.real_user, INTERBASE_USER_NAME) && strcmp(ibmgr_data.real_user, INTERBASE_USER_SHORT)) || strcmp(ibmgr_data.user, SYSDBA_USER_NAME)) { SRVRMGR_msg_get(MSG_NOPERM, msg); fprintf(OUTFILE, "%s\n", msg); ret = ACT_NONE; break; } break; case OP_HELP: print_help(); ret = ACT_NONE; break; case OP_SHOW: print_config(); ret = ACT_NONE; break; case OP_VERSION: ret = ACT_NONE; break; case OP_SET: ret = ACT_PROMPT; break; } if (quitflag) if (ibmgr_data.shutdown) { SRVRMGR_msg_get(MSG_SHUTDOWN, msg); fprintf(OUTFILE, "%s\n", msg); SRVRMGR_msg_get(MSG_CANTQUIT, msg); fprintf(OUTFILE, "%s\n", msg); ret = ACT_NONE; } else ret = ACT_QUIT; return ret; }