TEST(corestr,strdelchr) { std::string value = "String for doing deletes"; strdelchr(value,'a'); strdelchr(value,'e'); strdelchr(value,'i'); strdelchr(value,'o'); EXPECT_STREQ("Strng fr dng dlts", value.c_str()); }
void httpAdmin(Connection *Conn,PVStr(user),FILE *tc,PCStr(group),PVStr(search),void *env,iFUNCP prfunc,sFUNCP ckfunc,PVStr(adminid)) { const char *np; CStr(sub,128); CStr(dhtml,128); CStr(url,1024); CStr(durl,1024); CStr(aurl,1024); CStr(aclurl,1024); CStr(adminmbox,1024); FILE *cfp,*acl; CStr(opath,1024); FILE *admfp; CStr(line,1024); nonxalpha_unescape(search,AVStr(search),0); strdelchr(search,AVStr(search),"\"'<>"); sub[0] = 0; Xsscanf(search,"Admin=%[^&]",AVStr(sub)); if( np = strstr(search,"USER="******"USER=%[^&]",AVStr(user)); setVStrEnd(adminid,0); if( np = strstr(search,"ADMINID=") ) Xsscanf(np,"ADMINID=%[^&]",AVStr(adminid)); url[0] = 0; if( np = strstr(search,"URL=") ) Xsscanf(np,"URL=%[^&]",AVStr(url)); nonxalpha_unescape(url,AVStr(durl),0); /* if( !streq(user,"anonymous") ){ fprintf(tc,"you cannot control %s users\r\n",)user); return; } */ if( streq(sub,"GetACL") || streq(sub,"PutACL") ){ CStr(line,1024); if( adminid[0] == 0 ){ fprintf(tc,"You must show your <I>Admin-ID</I>.\r\n"); return; } if( streq(sub,"PutACL") ) if( durl[0] == 0 ){ fprintf(tc,"You must show your <I>ACL-URL</I> (URL of your GACL).\r\n"); return; }else if( durl[0] ){ cfp = tmpfile(); URLget(durl,1,cfp); if( file_size(fileno(cfp)) <= 0 ){ fprintf(tc,"Your GACL at <%s> is not accessible\r\n",durl); return; } } if( (admfp = openMuid(0,adminid,AVStr(adminmbox))) == NULL ){ fprintf(tc,"The <I>Admin-ID</I> shown [%s] does not exist.\r\n",adminid); return; } if( streq(sub,"GetACL") ) if( (acl = openGACL(0,adminid)) && 0 < file_size(fileno(acl)) ){ line[0] = 0; while( fgets(line,sizeof(line),acl) != NULL ){ if( line[0] == '#' ){ fputs(line,tc); break; } if( line[0] == '\r' || line[0] == '\n' ) break; } if( line[0] != '#' ) /* maybe template */ fprintf(tc,"#<PLAINTEXT>\r\n"); copyfile1(acl,tc); fflush(tc); notifyAdmin(Conn,admfp,acl,adminid,adminmbox,"downloaded"); return; } acl = openGACL(1,adminid); line[0] = 0; fgets(line,sizeof(line),acl); fseek(acl,0,0); if( streq(sub,"GetACL") ){ putBuiltinHTML(Conn,acl,"NNTP/HTTP-Gateway-Admin","news/adminNewACL.dhtml",NULL,prfunc,env); fflush(acl); fseek(acl,0,0); copyfile1(acl,tc); notifyAdmin(Conn,admfp,acl,adminid,adminmbox,"created+downloaded"); fclose(acl); fflush(tc); return; } if( line[0] == 0 || line[0] == '#' ){ fseek(admfp,0,2); fprintf(admfp,"ACL-URL: %s\r\n",durl); fflush(admfp); }else{ /* check consistensy of ACL-URL */ } uploadACL(Conn,user,tc,acl,cfp,adminid,adminmbox,durl,env,ckfunc); fseek(cfp,0,0); copyfile1(cfp,acl); Ftruncate(acl,0,1); fflush(tc); notifyAdmin(Conn,admfp,cfp,adminid,adminmbox,"uploaded"); fclose(cfp); fclose(acl); fclose(admfp); } sprintf(dhtml,"news/admin%s.dhtml",sub); putBuiltinHTML(Conn,tc,"NNTP/HTTP-Gateway-Admin",dhtml,NULL,prfunc,env); }
/* * Rename entry * Signal handler for "activate" rename entry */ gboolean rename_entry() { FILE *fp = NULL; GtkWidget *name_dialog = NULL; GtkWidget *msg_dialog = NULL; GtkWidget *vbox = NULL; GtkWidget *hbox = NULL; GtkWidget *label = NULL; GtkWidget *name_entry = NULL; const gchar *entry_text = NULL; gchar old_entry_display_name[MAX_NAME_LEN]; gchar new_entry_display_name[MAX_NAME_LEN]; gchar new_entry_name[MAX_PATH_LEN]; gchar old_entry_name[MAX_PATH_LEN]; book_data *book = NULL; section_data *section = NULL; entry_data *entry = NULL; gchar *temp_string; gint result; // Assert master exists g_assert_nonnull(master); // Get currently selected book = get_current_book_or_return_with_warning(); section = get_current_section_or_return_with_warning(); entry = get_current_entry_or_return_with_warning(); // Write current entry write_current_entry(); // Create name dialog name_dialog = gtk_dialog_new_with_buttons(app_name, GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); gtk_widget_set_size_request(name_dialog, SM_DLG_WIDTH, SM_DLG_HEIGHT); gtk_window_set_type_hint(GTK_WINDOW(name_dialog), GDK_WINDOW_TYPE_HINT_MENU); gtk_window_set_resizable(GTK_WINDOW(name_dialog), FALSE); label = gtk_label_new("Enter new entry name..."); name_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(name_entry), MAX_NAME_LEN-5); // Get auto name if(options.auto_name_entry == TRUE) { temp_string = g_malloc0(MAX_NAME_LEN); strdelchr(temp_string, get_auto_entry_name(get_text_view(book)), ILLEGAL_CHARS); temp_string[MAX_NAME_LEN-5] = 0; if(strcmp(temp_string, "") == 0) gtk_entry_set_text(GTK_ENTRY(name_entry), entry->name); else gtk_entry_set_text(GTK_ENTRY(name_entry), temp_string); g_free(temp_string); } else { gtk_entry_set_text(GTK_ENTRY(name_entry), entry->name); } vbox = gtk_dialog_get_content_area(GTK_DIALOG(name_dialog)); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), name_entry, TRUE, TRUE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); gtk_entry_set_activates_default(GTK_ENTRY(name_entry), TRUE); gtk_dialog_set_default_response (GTK_DIALOG(name_dialog),GTK_RESPONSE_ACCEPT); gtk_widget_show_all(name_dialog); // Run dialog result = gtk_dialog_run(GTK_DIALOG(name_dialog)); switch (result) { case GTK_RESPONSE_ACCEPT: entry_text = gtk_entry_get_text(GTK_ENTRY(name_entry)); // Scan name for illegal characters temp_string = g_malloc0(MAX_NAME_LEN); strdelchr(temp_string, entry_text, ILLEGAL_CHARS); gtk_entry_set_text(GTK_ENTRY(name_entry), temp_string); g_free(temp_string); entry_text = gtk_entry_get_text(GTK_ENTRY(name_entry)); // Old entry file g_snprintf(old_entry_name, sizeof(old_entry_name), "%s%s%s%s%s%s%s.txt", note_dir, G_DIR_SEPARATOR_S, book->name, G_DIR_SEPARATOR_S, section->name, G_DIR_SEPARATOR_S, entry->name); // New entry file g_snprintf(new_entry_name, sizeof(new_entry_name), "%s%s%s%s%s%s%s.txt", note_dir, G_DIR_SEPARATOR_S, book->name, G_DIR_SEPARATOR_S, section->name, G_DIR_SEPARATOR_S, entry_text); // Ignore rename if names match if(strcmp(entry->name, entry_text) == 0) { gtk_widget_destroy(name_dialog); return TRUE; } // Set display name strncpy(old_entry_display_name, entry->name, MAX_NAME_LEN-5); if(strlen(old_entry_display_name) > 25) strcpy(old_entry_display_name+25, "...\0"); strncpy(new_entry_display_name, entry_text, MAX_NAME_LEN-5); if(strlen(new_entry_display_name) > 25) strcpy(new_entry_display_name+25, "...\0"); // Check that new entry name is valid if(strlen(entry_text) < 1) { sn_warning("Unable to rename entry [%s] to [%s].", entry->name, entry_text); msg_dialog = gtk_message_dialog_new(GTK_WINDOW(main_window), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "Unable to rename entry \"%s\" to \"%s\".", old_entry_display_name, new_entry_display_name); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msg_dialog), "Please ensure the entry name contains a valid character."); gtk_window_set_title(GTK_WINDOW(msg_dialog), app_name); gtk_window_set_type_hint(GTK_WINDOW(msg_dialog), GDK_WINDOW_TYPE_HINT_MENU); gtk_window_set_resizable(GTK_WINDOW(msg_dialog), FALSE); result = gtk_dialog_run(GTK_DIALOG(msg_dialog)); gtk_widget_destroy(name_dialog); gtk_widget_destroy(msg_dialog); return FALSE; } // Check that new entry name is valid fp = fopen(new_entry_name, "wx"); if (fp == NULL) { sn_warning("Unable to rename entry [%s] to [%s].", entry->name, entry_text); msg_dialog = gtk_message_dialog_new(GTK_WINDOW(main_window), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "Unable to rename entry \"%s\" to \"%s\".", old_entry_display_name, new_entry_display_name); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msg_dialog), "Please ensure the entry name doesn't aleady exist."); gtk_window_set_title(GTK_WINDOW(msg_dialog), app_name); gtk_window_set_type_hint(GTK_WINDOW(msg_dialog), GDK_WINDOW_TYPE_HINT_MENU); gtk_window_set_resizable(GTK_WINDOW(msg_dialog), FALSE); result = gtk_dialog_run(GTK_DIALOG(msg_dialog)); gtk_widget_destroy(name_dialog); gtk_widget_destroy(msg_dialog); return FALSE; } fclose(fp); sn_trace("Renaming entry [%s] to [%s].", entry->name, entry_text); // Rename entry file result = rename(old_entry_name, new_entry_name); if(result == 0) { // Remove history remove_history(); // Update entry strcpy(entry->name, entry_text); // Update book write_book(book, note_dir); // Update view populate_entries(book, section); on_entry_change(get_entry_view(book), book); gtk_widget_destroy(name_dialog); return TRUE; } else { sn_warning("Unable to rename entry [%s].", entry->name); gtk_widget_destroy(name_dialog); return FALSE; } default: gtk_widget_destroy(name_dialog); return FALSE; } // End switch return FALSE; } // Rename entry
static chd_error chdcd_parse_gdi(const char *tocfname, cdrom_toc &outtoc, chdcd_track_input_info &outinfo) { FILE *infile; int i, numtracks; std::string path = std::string(tocfname); infile = fopen(tocfname, "rt"); path = get_file_path(path); if (infile == (FILE *)NULL) { return CHDERR_FILE_NOT_FOUND; } /* clear structures */ memset(&outtoc, 0, sizeof(outtoc)); outinfo.reset(); outtoc.flags = CD_FLAG_GDROM; fgets(linebuffer,511,infile); numtracks=atoi(linebuffer); for(i=0;i<numtracks;++i) { char *tok; int trknum; int trksize,trktype; int sz; fgets(linebuffer,511,infile); tok=strtok(linebuffer," "); trknum=atoi(tok)-1; outinfo.track[trknum].swap=false; outinfo.track[trknum].offset=0; outtoc.tracks[trknum].datasize = 0; outtoc.tracks[trknum].subtype = CD_SUB_NONE; outtoc.tracks[trknum].subsize = 0; outtoc.tracks[trknum].pgsub = CD_SUB_NONE; tok=strtok(NULL," "); outtoc.tracks[trknum].physframeofs=atoi(tok); tok=strtok(NULL," "); trktype=atoi(tok); tok=strtok(NULL," "); trksize=atoi(tok); if(trktype==4 && trksize==2352) { outtoc.tracks[trknum].trktype=CD_TRACK_MODE1_RAW; outtoc.tracks[trknum].datasize=2352; } if(trktype==4 && trksize==2048) { outtoc.tracks[trknum].trktype=CD_TRACK_MODE1; outtoc.tracks[trknum].datasize=2048; } if(trktype==0) { outtoc.tracks[trknum].trktype=CD_TRACK_AUDIO; outtoc.tracks[trknum].datasize=2352; outinfo.track[trknum].swap = true; } std::string name; tok=strtok(NULL," "); name = tok; if (tok[0]=='"') { do { tok=strtok(NULL," "); if (tok!=NULL) { name += " "; name += tok; } } while(tok!=NULL && (strrchr(tok,'"')-tok !=(strlen(tok)-1))); strdelchr(name,'"'); } outinfo.track[trknum].fname.assign(path).append(name); sz = get_file_size(outinfo.track[trknum].fname.c_str()); outtoc.tracks[trknum].frames = sz/trksize; outtoc.tracks[trknum].padframes = 0; if (trknum != 0) { int dif=outtoc.tracks[trknum].physframeofs-(outtoc.tracks[trknum-1].frames+outtoc.tracks[trknum-1].physframeofs); outtoc.tracks[trknum-1].frames += dif; outtoc.tracks[trknum-1].padframes = dif; } } #if 0 for(i=0; i < numtracks; i++) { printf("%s %d %d %d (true %d)\n", outinfo.track[i].fname.c_str(), outtoc.tracks[i].frames, outtoc.tracks[i].padframes, outtoc.tracks[i].physframeofs, outtoc.tracks[i].frames - outtoc.tracks[i].padframes); } #endif /* close the input TOC */ fclose(infile); /* store the number of tracks found */ outtoc.numtrks = numtracks; return CHDERR_NONE; }