static void gp2x_intro_screen(void) { char name[1024]; FILE *f; gp2x_video_flip(); sprintf(name,get_resource_path("skins/iOSsplash.bmp")); f=fopen(name,"rb"); if (f) { fread(gp2xsplash_bmp,1,77878,f); fclose(f); } while(1) { load_bmp_8bpp(gp2x_screen8,gp2xsplash_bmp); gp2x_video_flip(); int ExKey=gp2x_joystick_read(0); if(ExKey!=0)break; usleep(50000); } sprintf(name,get_resource_path("skins/iOSmenu.bmp")); f=fopen(name,"rb"); if (f) { fread(gp2xmenu_bmp,1,77878,f); fclose(f); } }
void set_sidepane_state(ChmSee* self, gboolean state) { GtkWidget* icon_widget; g_object_set(selfp->ui_chmfile, "sidepane-visible", state, NULL); if (state) { icon_widget = gtk_image_new_from_file(get_resource_path("hide-pane.png")); } else { icon_widget = gtk_image_new_from_file(get_resource_path("show-pane.png")); } gtk_widget_show(icon_widget); gtk_tool_button_set_icon_widget( GTK_TOOL_BUTTON(gtk_ui_manager_get_widget(selfp->ui_manager, "/toolbar/sidepane")), icon_widget); };
static void on_open(GtkWidget *widget, ChmSee *self) { GladeXML *glade; GtkWidget *dialog; GtkFileFilter *filter; /* create openfile dialog */ glade = glade_xml_new(get_resource_path(GLADE_FILE), "openfile_dialog", NULL); dialog = glade_xml_get_widget(glade, "openfile_dialog"); g_signal_connect(G_OBJECT (dialog), "response", G_CALLBACK (open_response_cb), self); /* File list fiter */ filter = gtk_file_filter_new(); gtk_file_filter_set_name(filter, _("CHM Files")); gtk_file_filter_add_pattern(filter, "*.[cC][hH][mM]"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filter); filter = gtk_file_filter_new(); gtk_file_filter_set_name(filter, _("All Files")); gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filter); /* Previous opened folder */ if (selfp->last_dir) { gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), selfp->last_dir); } g_object_unref(glade); }
void get_rom_sample_path (int argc, char **argv, int game_index) { int i; alternate_name = 0; mame_argc = argc; mame_argv = argv; game = game_index; //rompath = get_string ("directory", "rompath", NULL, IMAMEBASEPATH "/roms"); strcpy(romPathBuffer, get_documents_path(".")); rompath = romPathBuffer; //samplepath = get_string ("directory", "samplepath", NULL, IMAMEBASEPATH "/samples"); strcpy(samplePathBuffer, get_resource_path("samples")); samplepath = samplePathBuffer; /* handle '-romdir' hack. We should get rid of this BW */ alternate_name = 0; for (i = 1; i < argc; i++) { if (strcasecmp (argv[i], "-romdir") == 0) { i++; if (i < argc) alternate_name = argv[i]; } } /* decompose paths into components (handled by fileio.c) */ decompose_rom_sample_path (rompath, samplepath); }
void pic32_update_resource(const char *resource) { /* The tool_version is defined in the string MCHP_VERSION */ char *Microchip; #ifndef MCHP_VERSION char *new_version = xstrdup("undefined1_21"); #warning MCHP_VERSION not defined #else char *new_version = xstrdup(QUOTE(MCHP_VERSION)); #endif int major = 0, minor = 0; Microchip = new_version; if (Microchip) { for (; (*Microchip) && ((*Microchip < '0') || (*Microchip > '9')); Microchip++); if (*Microchip) { major = strtol(Microchip, &Microchip, 0); if ((*Microchip) && ((*Microchip == '_') || (*Microchip == '.'))) { Microchip++; minor = strtol(Microchip, &Microchip, 0); for (; *Microchip && *Microchip != ' '; Microchip++); } pic32_tool_version = major *100 + minor; version_part1 = new_version; *Microchip = 0; version_part2 = Microchip+1; } } get_resource_path(resource); process_resource_file(0, 0); }
static void on_about(GtkWidget *widget) { GladeXML *glade; GtkWidget *dialog; glade = glade_xml_new(get_resource_path(GLADE_FILE), "about_dialog", NULL); dialog = glade_xml_get_widget(glade, "about_dialog"); g_signal_connect(G_OBJECT (dialog), "response", G_CALLBACK (about_response_cb), NULL); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG (dialog), PACKAGE_VERSION); g_object_unref(glade); }
static nsresult gecko_utils_init_prefs(void) { nsresult rv; nsCOMPtr<nsIPrefService> prefService(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS (rv, rv); nsCOMPtr<nsILocalFile> file; rv = NS_NewNativeLocalFile(nsEmbedCString(get_resource_path("default-prefs.js")), PR_TRUE, getter_AddRefs(file)); NS_ENSURE_SUCCESS (rv, rv); rv = prefService->ReadUserPrefs(file); rv |= prefService->ReadUserPrefs(nsnull); NS_ENSURE_SUCCESS (rv, rv); return rv; }
static void populate_window(ChmSee *self) { GtkWidget* vbox = gtk_vbox_new(FALSE, 0); GladeXML *glade; glade = glade_xml_new(get_resource_path(GLADE_FILE), "main_vbox", NULL); if (glade == NULL) { g_error("Cannot find glade file!"); exit(1); } g_object_set_data(G_OBJECT (self), "glade", glade); GtkWidget *main_vbox; main_vbox = get_widget(self, "main_vbox"); gtk_container_add(GTK_CONTAINER (self), vbox); GtkActionGroup* action_group = gtk_action_group_new ("MenuActions"); selfp->action_group = action_group; gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), self); gtk_action_group_add_toggle_actions (action_group, toggle_entries, G_N_ELEMENTS (toggle_entries), self); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "NewTab"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "CloseTab"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "Home"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "Back"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "Forward"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "SidePane"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "ZoomIn"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "ZoomOut"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "ZoomReset"), FALSE); GtkUIManager* ui_manager = gtk_ui_manager_new (); selfp->ui_manager = ui_manager; gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); GtkAccelGroup* accel_group = gtk_ui_manager_get_accel_group (ui_manager); gtk_window_add_accel_group (GTK_WINDOW (self), accel_group); GError* error = NULL; if (!gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1, &error)) { g_message ("building menus failed: %s", error->message); g_error_free (error); exit (EXIT_FAILURE); } GtkWidget* menubar = gtk_handle_box_new(); selfp->menubar = menubar; gtk_container_add(GTK_CONTAINER(menubar), gtk_ui_manager_get_widget (ui_manager, "/MainMenu")); gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0); GtkWidget* toolbar = gtk_handle_box_new(); selfp->toolbar = toolbar; gtk_container_add(GTK_CONTAINER(toolbar), gtk_ui_manager_get_widget(ui_manager, "/toolbar")); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); GtkWidget* ui_chmfile = chmsee_ui_chmfile_new(); selfp->ui_chmfile = ui_chmfile; gtk_box_pack_start(GTK_BOX(vbox), ui_chmfile, TRUE, TRUE, 0); gtk_container_set_focus_child(GTK_CONTAINER(vbox), ui_chmfile); g_signal_connect_swapped(ui_chmfile, "model_changed", G_CALLBACK(on_ui_chmfile_model_changed), self); g_signal_connect_swapped(ui_chmfile, "html_changed", G_CALLBACK(on_ui_chmfile_html_changed), self); g_signal_connect_swapped(ui_chmfile, "notify::link-message", G_CALLBACK(on_ui_chmfile_html_link_message_notify), self); gtk_tool_button_set_icon_widget( GTK_TOOL_BUTTON(gtk_ui_manager_get_widget(ui_manager, "/toolbar/sidepane")), gtk_image_new_from_file(get_resource_path("show-pane.png"))); gtk_box_pack_start (GTK_BOX (vbox), main_vbox, FALSE, FALSE, 0); gtk_widget_show_all(vbox); accel_group = g_object_new(GTK_TYPE_ACCEL_GROUP, NULL); gtk_window_add_accel_group(GTK_WINDOW (self), accel_group); /* status bar */ selfp->statusbar = glade_xml_get_widget(glade, "statusbar"); selfp->scid_default = gtk_statusbar_get_context_id(GTK_STATUSBAR (selfp->statusbar), "default"); update_status_bar(self, _("Ready!")); }
static void chmsee_init(ChmSee* self) { self->priv = CHMSEE_GET_PRIVATE(self); selfp->home = g_build_filename(g_get_home_dir(), ".chmsee", NULL); g_debug("chmsee home = %s", selfp->home); if (!g_file_test(selfp->home, G_FILE_TEST_IS_DIR)) mkdir(selfp->home, 0777); selfp->cache_dir = g_build_filename(selfp->home, "bookshelf", NULL); if (!g_file_test(selfp->cache_dir, G_FILE_TEST_IS_DIR)) mkdir(selfp->cache_dir, 0777); selfp->lang = 0; selfp->last_dir = g_strdup(g_get_home_dir()); selfp->context_menu_link = NULL; selfp->book = NULL; selfp->pos_x = -100; selfp->pos_y = -100; selfp->width = 0; selfp->height = 0; selfp->hpaned_position = -1; selfp->has_toc = FALSE; selfp->has_index = FALSE; selfp->fullscreen = FALSE; selfp->expect_fullscreen = FALSE; selfp->state = CHMSEE_STATE_INIT; gtk_widget_add_events(GTK_WIDGET(self), GDK_STRUCTURE_MASK | GDK_BUTTON_PRESS_MASK ); g_signal_connect(G_OBJECT(self), "scroll-event", G_CALLBACK(on_scroll_event), NULL); g_signal_connect(G_OBJECT(self), "map", G_CALLBACK(on_map), NULL); g_signal_connect(G_OBJECT(self), "window-state-event", G_CALLBACK(on_window_state_event), NULL); gtk_drag_dest_set (GTK_WIDGET (self), GTK_DEST_DEFAULT_ALL, view_drop_targets, G_N_ELEMENTS (view_drop_targets), GDK_ACTION_COPY); /* Quit event handle */ g_signal_connect(G_OBJECT (self), "delete_event", G_CALLBACK (delete_cb), self); g_signal_connect(G_OBJECT (self), "destroy", G_CALLBACK (destroy_cb), self); /* Widget size changed event handle */ g_signal_connect(G_OBJECT (self), "configure-event", G_CALLBACK (on_configure_event), self); /* Init gecko */ chmsee_html_init_system(); //chmsee_html_set_default_lang(selfp->lang); populate_window(self); chmsee_load_config(self); if (selfp->pos_x >= 0 && selfp->pos_y >= 0) gtk_window_move(GTK_WINDOW (self), selfp->pos_x, selfp->pos_y); if (selfp->width > 0 && selfp->height > 0) gtk_window_resize(GTK_WINDOW (self), selfp->width, selfp->height); else gtk_window_resize(GTK_WINDOW (self), 800, 600); gtk_window_set_title(GTK_WINDOW (self), "ChmSee"); gtk_window_set_icon_from_file(GTK_WINDOW (self), get_resource_path("chmsee-icon.png"), NULL); }
void parse_cmdline (int argc, char **argv, int game_index) { static float f_beam, f_flicker; char *resolution; char *joyname; char tmpres[10]; int i; char *tmpstr; mame_argc = argc; mame_argv = argv; game = game_index; /* read graphic configuration */ options.use_artwork = get_bool ("config", "artwork", NULL, 1); options.use_samples = get_bool ("config", "samples", NULL, 1); video_sync = get_bool ("config", "vsync", NULL, 0); wait_vsync = get_bool ("config", "waitvsync", NULL, 0); use_dirty = get_bool ("config", "dirty", NULL, -1); options.antialias = get_bool ("config", "antialias", NULL, 1); options.translucency = get_bool ("config", "translucency", NULL, 1); tmpstr = get_string ("config", "depth", NULL, "auto"); options.color_depth = atoi(tmpstr); if (options.color_depth != 8 && options.color_depth != 16) options.color_depth = 0; /* auto */ skiplines = get_int ("config", "skiplines", NULL, 0); skipcolumns = get_int ("config", "skipcolumns", NULL, 0); f_beam = get_float ("config", "beam", NULL, 1.5);//TODO if (f_beam < 1.0) f_beam = 1.0; if (f_beam > 16.0) f_beam = 16.0; f_flicker = get_float ("config", "flicker", NULL, 0.0); if (f_flicker < 0.0) f_flicker = 0.0; if (f_flicker > 100.0) f_flicker = 100.0; osd_gamma_correction = get_float ("config", "gamma", NULL, 1.0); if (osd_gamma_correction < 0.5) osd_gamma_correction = 0.5; if (osd_gamma_correction > 2.0) osd_gamma_correction = 2.0; tmpstr = get_string ("config", "frameskip", "fs", "auto"); if (!strcasecmp(tmpstr,"auto")) { frameskip = 0; autoframeskip = 1; } else { frameskip = atoi(tmpstr); autoframeskip = 0; } options.norotate = get_bool ("config", "norotate", NULL, 0); options.ror = get_bool ("config", "ror", NULL, 0); options.rol = get_bool ("config", "rol", NULL, 0); options.flipx = get_bool ("config", "flipx", NULL, 0); options.flipy = get_bool ("config", "flipy", NULL, 0); /* read sound configuration */ soundcard = get_int ("config", "soundcard", NULL, -1); options.use_emulated_ym3812 = !get_bool ("config", "ym3812opl", NULL, 0); options.samplerate = get_int ("config", "samplerate", "sr", 22050); if (options.samplerate < 5000) options.samplerate = 5000; if (options.samplerate > 44100) options.samplerate = 44100; usestereo = get_bool ("config", "stereo", NULL, 0); attenuation = get_int ("config", "volume", NULL, 0); if (attenuation < -32) attenuation = -32; if (attenuation > 0) attenuation = 0; /* read input configuration */ use_mouse = get_bool ("config", "mouse", NULL, 1); joyname = get_string ("config", "joystick", "joy", "standard"); /* misc configuration */ options.cheat = get_bool ("config", "cheat", NULL, 0); options.mame_debug = get_bool ("config", "debug", NULL, 0); cheatfile = get_string ("config", "cheatfile", "cf", "cheat.dat"); history_filename = get_string ("config", "historyfile", NULL, "history.dat"); /* JCK 980917 */ mameinfo_filename = get_string ("config", "mameinfofile", NULL, "mameinfo.dat"); /* JCK 980917 */ /* get resolution */ resolution = get_string ("config", "resolution", NULL, "auto"); /* set default subdirectories */ /* Les Bird nvdir = get_string ("directory", "nvram", NULL, IMAMEBASEPATH "/nvram" ); hidir = get_string ("directory", "hi", NULL, IMAMEBASEPATH "/hi"); cfgdir = get_string ("directory", "cfg", NULL, IMAMEBASEPATH "/cfg"); screenshotdir = get_string ("directory", "snap", NULL, IMAMEBASEPATH "/snap"); memcarddir = get_string ("directory", "memcard", NULL, IMAMEBASEPATH "/memcard"); stadir = get_string ("directory", "sta", NULL, IMAMEBASEPATH "/sta"); artworkdir = get_string ("directory", "artwork", NULL, IMAMEBASEPATH "/artwork"); cheatdir = get_string ("directory", "cheat", NULL, IMAMEBASEPATH); */ nvdir = strdup(get_resource_path("nvram")); // Les Bird hidir = strdup(get_documents_path("hi")); // Les Bird cfgdir = strdup(get_documents_path("cfg")); // Les Bird screenshotdir = strdup(get_documents_path("snap")); // Les Bird memcarddir = strdup(get_documents_path("memcard")); // Les Bird stadir = strdup(get_documents_path("sta")); // Les Bird artworkdir = strdup(get_resource_path("artwork")); // Les Bird cheatdir = strdup(get_resource_path("cheats")); // Les Bird logerror("cheatfile = %s - cheatdir = %s\n",cheatfile,cheatdir); //printf("cheatfile = %s - cheatdir = %s\n",cheatfile,cheatdir); //printf("cfgdir = %s\n",cfgdir); tmpstr = get_string ("config", "language", NULL, "english"); options.language_file = osd_fopen(0,tmpstr,OSD_FILETYPE_LANGUAGE,0); /* this is handled externally cause the audit stuff needs it, too */ get_rom_sample_path (argc, argv, game_index); /* process some parameters */ options.beam = (int)(f_beam * 0x00010000); if (options.beam < 0x00010000) options.beam = 0x00010000; if (options.beam > 0x00100000) options.beam = 0x00100000; options.flicker = (int)(f_flicker * 2.55); if (options.flicker < 0) options.flicker = 0; if (options.flicker > 255) options.flicker = 255; /* any option that starts with a digit is taken as a resolution option */ /* this is to handle the old "-wxh" commandline option. */ for (i = 1; i < argc; i++) { if (argv[i][0] == '-' && isdigit(argv[i][1]) && (strstr(argv[i],"x") || strstr(argv[i],"X"))) resolution = &argv[i][1]; } /* break up resolution into gfx_width and gfx_height */ gfx_height = gfx_width = 0; if (strcasecmp (resolution, "auto") != 0) { char *tmp; strncpy (tmpres, resolution, 10); tmp = strtok (tmpres, "xX"); gfx_width = atoi (tmp); tmp = strtok (0, "xX"); if (tmp) gfx_height = atoi (tmp); options.vector_width = gfx_width; options.vector_height = gfx_height; } /* convert joystick name into an Allegro-compliant joystick signature */ joystick = -2; /* default to invalid value */ for (i = 0; joy_table[i].name != NULL; i++) { if (strcasecmp (joy_table[i].name, joyname) == 0) { joystick = joy_table[i].id; logerror("using joystick %s = %08x\n", joyname,joy_table[i].id); break; } } if (joystick == -2) { logerror("%s is not a valid entry for a joystick\n", joyname); joystick = JOY_TYPE_NONE; } /* Underclock settings */ underclock_sound = get_int ("config", "uclocks", NULL, 0); underclock_cpu = get_int ("config", "uclock", NULL, 0); /* Fast sound setting */ fast_sound = get_bool("config", "fastsound", NULL, 0); /* Rotate controls */ rotate_controls = get_bool("config", "rotatecontrols", NULL, 0); }
static int process_single_obj( rsComm_t *conn, char *parColl, char *fileName, int required_num_replicas, char *grpRescForReplication, char *emailToNotify ) { genQueryInp_t genQueryInp; int i; genQueryOut_t *genQueryOut = NULL; sqlResult_t *replNumStruct, *rescStruct, *dataPathStruct, *chkSumStruct; char *replNum, *rescName, *dataPathName, *chkSum; int t; int i1a[10]; int i1b[10]; int i2a[10]; char *condVal[2]; char v1[200], v2[200]; char vault_path[2048]; char *chksum_str = NULL; dataObjInp_t myDataObjInp; dataObjInfo_t *myDataObjInfo = NULL; unregDataObj_t myUnregDataObjInp; transferStat_t *transStat = NULL; ReplicaCheckStatusStruct *pReplicaStatus; int nReplicas; char tmpstr[1024]; int at_least_one_copy_is_good = 0; int newN; int rn; int validKwFlags; char *outBadKeyWd; msParam_t msGrpRescStr; /* it can be a single resc name or a paired values. */ /* fprintf(stderr,"msiAutoReplicateService():process_single_obj()\n"); */ memset( &genQueryInp, 0, sizeof( genQueryInp_t ) ); i1a[0] = COL_DATA_REPL_NUM; i1b[0] = 0; i1a[1] = COL_D_RESC_NAME; i1b[1] = 0; i1a[2] = COL_D_RESC_GROUP_NAME; i1b[2] = 0; i1a[3] = COL_D_DATA_PATH; i1b[3] = 0; i1a[4] = COL_D_DATA_CHECKSUM; i1b[4] = 0; genQueryInp.selectInp.inx = i1a; genQueryInp.selectInp.value = i1b; genQueryInp.selectInp.len = 5; i2a[0] = COL_COLL_NAME; i2a[1] = COL_DATA_NAME; genQueryInp.sqlCondInp.inx = i2a; sprintf( v1, "='%s'", parColl ); condVal[0] = v1; sprintf( v2, "='%s'", fileName ); condVal[1] = v2; genQueryInp.sqlCondInp.value = condVal; genQueryInp.sqlCondInp.len = 2; genQueryInp.maxRows = 10; genQueryInp.continueInx = 0; t = rsGenQuery( conn, &genQueryInp, &genQueryOut ); if ( t < 0 ) { rodsLog( LOG_NOTICE, "msiAutoReplicateService():process_single_obj(): rsGenQuery failed errocode=%d", t ); if ( t == CAT_NO_ROWS_FOUND ) { /* no data is found */ return 0; } return( t ); } if ( genQueryOut->rowCnt <= 0 ) { rodsLog( LOG_ERROR, "msiAutoReplicateService():process_single_obj(): return 0 record from calling rsGenQuery() for objid=%s/%s", parColl, fileName ); return 0; } nReplicas = genQueryOut->rowCnt; pReplicaStatus = ( ReplicaCheckStatusStruct * )calloc( nReplicas, sizeof( ReplicaCheckStatusStruct ) ); for ( i = 0; i < nReplicas; i++ ) { pReplicaStatus[i].registered = 0; pReplicaStatus[i].checksum[0] = '\0'; } for ( i = 0; i < genQueryOut->rowCnt; i++ ) { replNumStruct = getSqlResultByInx( genQueryOut, COL_DATA_REPL_NUM ); replNum = &replNumStruct->value[replNumStruct->len * i]; pReplicaStatus[i].repl_num = atoi( replNum ); rescStruct = getSqlResultByInx( genQueryOut, COL_D_RESC_NAME ); rescName = &rescStruct->value[rescStruct->len * i]; getSqlResultByInx( genQueryOut, COL_D_RESC_GROUP_NAME ); dataPathStruct = getSqlResultByInx( genQueryOut, COL_D_DATA_PATH ); dataPathName = &dataPathStruct->value[dataPathStruct->len * i]; chkSumStruct = getSqlResultByInx( genQueryOut, COL_D_DATA_CHECKSUM ); chkSum = &chkSumStruct->value[chkSumStruct->len * i]; vault_path[0] = '\0'; t = get_resource_path( conn, rescName, vault_path ); if ( t < 0 ) { rodsLog( LOG_NOTICE, "msiAutoReplicateService():process_single_obj():get_resource_path failed, status=%d", t ); free( pReplicaStatus ); // JMc cppcheck - leak return t; } if ( strncmp( dataPathName, vault_path, strlen( vault_path ) ) != 0 ) { /* fprintf(stderr,"AB1-> %s/%s, v=%s, is a registered copy.\n", parColl,fileName, replNum); */ pReplicaStatus[i].registered = 1; } else { pReplicaStatus[i].registered = 0; } if ( ( chkSum != NULL ) && ( strlen( chkSum ) > 0 ) ) { strcpy( pReplicaStatus[i].checksum, chkSum ); } } freeGenQueryOut( &genQueryOut ); /* check replica status */ at_least_one_copy_is_good = 0; for ( i = 0; i < nReplicas; i++ ) { /* check the file existence first */ memset( &myDataObjInp, 0, sizeof( dataObjInp_t ) ); snprintf( myDataObjInp.objPath, MAX_NAME_LEN, "%s/%s", parColl, fileName ); myDataObjInp.openFlags = O_RDONLY; sprintf( tmpstr, "%d", pReplicaStatus[i].repl_num ); addKeyVal( &myDataObjInp.condInput, REPL_NUM_KW, tmpstr ); rn = pReplicaStatus[i].repl_num; t = rsDataObjOpen( conn, &myDataObjInp ); if ( t < 0 ) { /* fprintf(stderr,"%d. %s/%s, %d failed to open and has checksum status=%d\n", i, parColl, fileName, rn, t); */ if ( t == SYS_OUT_OF_FILE_DESC ) { free( pReplicaStatus ); // JMc cppcheck - leak return t; } else { pReplicaStatus[i].chksum_status = t; } } else { openedDataObjInp_t myDataObjCloseInp; memset( &myDataObjCloseInp, 0, sizeof( openedDataObjInp_t ) ); myDataObjCloseInp.l1descInx = t; t = rsDataObjClose( conn, &myDataObjCloseInp ); chksum_str = NULL; /* compute checksum rsDataObjChksum() */ memset( &myDataObjInp, 0, sizeof( dataObjInp_t ) ); sprintf( myDataObjInp.objPath, "%s/%s", parColl, fileName ); addKeyVal( &myDataObjInp.condInput, FORCE_CHKSUM_KW, "" ); sprintf( tmpstr, "%d", pReplicaStatus[i].repl_num ); addKeyVal( &myDataObjInp.condInput, REPL_NUM_KW, tmpstr ); t = rsDataObjChksum( conn, &myDataObjInp, &chksum_str ); pReplicaStatus[i].chksum_status = t; /* t == USER_CHKSUM_MISMATCH means a bad copy */ /* fprintf(stderr,"%d. %s/%s, %d has checksum status=%d\n", i, parColl, fileName, rn, t); */ if ( t >= 0 ) { if ( strlen( pReplicaStatus[i].checksum ) > 0 ) { if ( strcmp( pReplicaStatus[i].checksum, chksum_str ) != 0 ) { /* mismatch */ pReplicaStatus[i].chksum_status = USER_CHKSUM_MISMATCH; } else { at_least_one_copy_is_good = 1; } } else { at_least_one_copy_is_good = 1; } } } } /* if there is none good copies left. In some casee, the checksum failed due to the fact that the server is down. We leave this case to be taken care of next time. */ if ( at_least_one_copy_is_good == 0 ) { rodsLog( LOG_ERROR, "msiAutoReplicateService():process_single_obj(): Obj='%s/%s': Warning: The system detects that all copies might be corrupted.", parColl, fileName ); #ifndef windows_platform if ( ( emailToNotify != NULL ) && ( strlen( emailToNotify ) > 0 ) ) { char msg_sub[1024], msg_body[1024]; strcpy( msg_sub, "iRODS msiAutoReplicateService() error" ); sprintf( msg_body, "msiAutoReplicateService():process_single_obj(): Obj='%s/%s': at least one storage server is down or all copies are corrupted.", parColl, fileName ); UnixSendEmail( emailToNotify, msg_sub, msg_body ); } #endif free( pReplicaStatus ); // JMc cppcheck - leak return 0; } /* since we have at least one copy is good. We delete those bad copies (USER_CHKSUM_MISMATCH). */ newN = nReplicas; for ( i = 0; i < nReplicas; i++ ) { memset( &myDataObjInp, 0, sizeof( dataObjInp_t ) ); sprintf( myDataObjInp.objPath, "%s/%s", parColl, fileName ); sprintf( tmpstr, "%d", pReplicaStatus[i].repl_num ); addKeyVal( &myDataObjInp.condInput, REPL_NUM_KW, tmpstr ); rn = pReplicaStatus[i].repl_num; if ( pReplicaStatus[i].registered == 1 ) { /* here is the catch. iRODS. */ int adchksum; /* fprintf(stderr,"CD->%s/%s, v=%d, is a registered copy.\n", parColl, fileName, rn); */ adchksum = ( ( int )( pReplicaStatus[i].chksum_status / 1000 ) ) * 1000; if ( ( pReplicaStatus[i].chksum_status == USER_CHKSUM_MISMATCH ) || ( pReplicaStatus[i].chksum_status == UNIX_FILE_OPEN_ERR ) || ( adchksum == UNIX_FILE_OPEN_ERR ) ) /* USER_CHKSUM_MISMATCH -> indicates the registered file is changed. * UNIX_FILE_OPEN_ERR --> indicates the registered file is removed by original owner. * -510002 is transformed from UNIX open error. */ { rodsLog( LOG_NOTICE, "msiAutoReplicateService():process_single_obj(): registered copy will be removed: %s, repl=%d", myDataObjInp.objPath, rn ); t = getDataObjInfo( conn, &myDataObjInp, &myDataObjInfo, NULL, 0 ); if ( t >= 0 ) { myUnregDataObjInp.dataObjInfo = myDataObjInfo; myUnregDataObjInp.condInput = &myDataObjInp.condInput; t = rsUnregDataObj( conn, &myUnregDataObjInp ); if ( t >= 0 ) { newN = newN - 1; } else { rodsLog( LOG_ERROR, "msiAutoReplicateService():rsUnregDataObj(): failed for %s/%s:%d. erStat=%d", parColl, fileName, rn, t ); return t; } } else { rodsLog( LOG_ERROR, "msiAutoReplicateService():getDataObjInfo(): failed for %s/%s:%d. erStat=%d", parColl, fileName, rn, t ); return t; } } else { rodsLog( LOG_ERROR, "%s:%d, the registered copy has errored checksum status=%d.", myDataObjInp.objPath, rn, pReplicaStatus[i].chksum_status ); return t; } } else { /* the data file is in vault */ if ( pReplicaStatus[i].chksum_status == USER_CHKSUM_MISMATCH ) { t = rsDataObjUnlink( conn, &myDataObjInp ); if ( t >= 0 ) { newN = newN - 1; } else { rodsLog( LOG_ERROR, "msiAutoReplicateService():rsDataObjUnlink() for %s:%d failed. errStat=%d", myDataObjInp.objPath, rn, t ); free( pReplicaStatus ); // JMc cppcheck - leak return t; } } } } fillStrInMsParam( &msGrpRescStr, grpRescForReplication ); /* make necessary copies based on the required number of copies */ if ( newN < required_num_replicas ) { rodsLog( LOG_NOTICE, "msiAutoReplicateService():process_single_obj(): making necessary %d copies as required.", ( required_num_replicas - newN ) ); for ( i = 0; i < ( required_num_replicas - newN ); i++ ) { memset( &myDataObjInp, 0, sizeof( dataObjInp_t ) ); snprintf( myDataObjInp.objPath, MAX_NAME_LEN, "%s/%s", parColl, fileName ); /* addKeyVal(&myDataObjInp.condInput, DEST_RESC_NAME_KW, grpRescForReplication); */ validKwFlags = OBJ_PATH_FLAG | DEST_RESC_NAME_FLAG | NUM_THREADS_FLAG | BACKUP_RESC_NAME_FLAG | RESC_NAME_FLAG | UPDATE_REPL_FLAG | REPL_NUM_FLAG | ALL_FLAG | ADMIN_FLAG | VERIFY_CHKSUM_FLAG | RBUDP_TRANSFER_FLAG | RBUDP_SEND_RATE_FLAG | RBUDP_PACK_SIZE_FLAG; t = parseMsKeyValStrForDataObjInp( &msGrpRescStr, &myDataObjInp, DEST_RESC_NAME_KW, validKwFlags, &outBadKeyWd ); if ( t < 0 ) { if ( outBadKeyWd != NULL ) { rodsLog( LOG_ERROR, "msiAutoReplicateService():rsDataObjRepl(): input keyWd - %s error. status = %d", outBadKeyWd, t ); free( outBadKeyWd ); } else { rodsLog( LOG_ERROR, "msiAutoReplicateService():rsDataObjRepl(): input msKeyValStr error. status = %d", t ); } free( pReplicaStatus ); // JMc cppcheck - leak return t; } t = rsDataObjRepl( conn, &myDataObjInp, &transStat ); if ( t < 0 ) { rodsLog( LOG_ERROR, "msiAutoReplicateService():rsDataObjRepl() failed for %s/%s:%d into '%s'. err code=%d.", parColl, fileName, rn, grpRescForReplication, t ); repl_storage_error = 1; free( pReplicaStatus ); // JMc cppcheck - leak return t; } if ( transStat != NULL ) { free( transStat ); } } } free( pReplicaStatus ); // JMC cppcheck - leak return 0; }