static int gftpui_common_cmd_chdir (void *uidata, gftp_request * request, void *other_uidata, gftp_request * other_request, const char *command) { gftpui_callback_data * cdata; char *tempstr, *newdir = NULL; if (!GFTP_IS_CONNECTED (request)) { request->logging_function (gftp_logging_error, request, _("Error: Not connected to a remote site\n")); return (1); } else if (*command == '\0') { request->logging_function (gftp_logging_error, request, _("usage: chdir <directory>\n")); return (1); } else if (request->protonum == GFTP_LOCAL_NUM) { if (*command != '/' && request->directory != NULL) { tempstr = gftp_build_path (request, request->directory, command, NULL); newdir = gftp_expand_path (request, tempstr); g_free (tempstr); } else newdir = gftp_expand_path (request, command); if (newdir == NULL) { request->logging_function (gftp_logging_error, request, _("usage: chdir <directory>\n")); return (1); } } cdata = g_malloc0 (sizeof (*cdata)); cdata->request = request; cdata->uidata = uidata; cdata->input_string = newdir != NULL ? newdir : (char *) command; cdata->run_function = gftpui_common_run_chdir; cdata->dont_clear_cache = 1; gftpui_common_run_callback_function (cdata); g_free (cdata); if (newdir != NULL) g_free (newdir); return (1); }
static int fsp_chdir (gftp_request * request, const char *directory) { fsp_protocol_data *lpd; char *tempstr, *olddir; g_return_val_if_fail (request != NULL, GFTP_EFATAL); g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL); g_return_val_if_fail (directory != NULL, GFTP_EFATAL); lpd = request->protocol_data; g_return_val_if_fail (lpd != NULL, GFTP_EFATAL); g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL); olddir=NULL; /* build new directory string */ olddir = request->directory; if (*directory != '/' && request->directory != NULL) { tempstr = g_strconcat (request->directory, "/", directory, NULL); request->directory = gftp_expand_path (request, tempstr); g_free (tempstr); } else request->directory = gftp_expand_path (request, directory); if (fsp_getpro (lpd->fsp,request->directory,NULL) == 0) { request->logging_function (gftp_logging_misc, request, _("Successfully changed directory to %s\n"), directory); if (olddir != NULL) g_free (olddir); return (0); } else { request->logging_function (gftp_logging_error, request, _("Could not change directory to %s\n"), directory); g_free (request->directory); request->directory = olddir; return (GFTP_ERETRYABLE); } }
int chdir_edit (GtkWidget * widget, gpointer data) { gftp_window_data * wdata; const char *edttxt; char *tempstr; wdata = data; if (!check_status (_("Chdir"), wdata, gftpui_common_use_threads (wdata->request), 0, 0, wdata->request->chdir != NULL)) return (0); if (check_reconnect (wdata) < 0) return (0); edttxt = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (wdata->combo)->entry)); if (!GFTP_IS_CONNECTED (wdata->request) && *edttxt != '\0') { toolbar_hostedit (NULL, NULL); return (0); } if ((tempstr = gftp_expand_path (wdata->request, edttxt)) == NULL) return (FALSE); if (gftpui_run_chdir (wdata, tempstr)) add_history (wdata->combo, wdata->history, wdata->histlen, edttxt); g_free (tempstr); return (0); }
void gftp_setup_startup_directory (gftp_request * request, const char *option_name) { char *startup_directory, *tempstr; gftp_lookup_request_option (request, option_name, &startup_directory); if (*startup_directory != '\0' && (tempstr = gftp_expand_path (request, startup_directory)) != NULL) { gftp_set_directory (request, tempstr); g_free (tempstr); } }
void about_dialog (gpointer data) { GtkWidget * tempwid, * notebook, * box, * label, * view, * vscroll, * dialog; char *tempstr, *temp1str, *no_license_agreement, *str, buf[255], *share_dir; size_t len; FILE * fd; #if GTK_MAJOR_VERSION > 1 GtkTextBuffer * textbuf; GtkTextIter iter; gint textlen; #endif share_dir = gftp_get_share_dir (); no_license_agreement = g_strdup_printf (_("Cannot find the license agreement file COPYING. Please make sure it is in either %s or in %s"), BASE_CONF_DIR, share_dir); #if GTK_MAJOR_VERSION == 1 dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog), _("About gFTP")); gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->action_area), 5); gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dialog)->action_area), TRUE); #else dialog = gtk_dialog_new_with_buttons (_("About gFTP"), NULL, 0, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); #endif gtk_window_set_wmclass (GTK_WINDOW(dialog), "about", "gFTP"); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 10); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 5); gtk_widget_realize (dialog); if (gftp_icon != NULL) { gdk_window_set_icon (dialog->window, NULL, gftp_icon->pixmap, gftp_icon->bitmap); gdk_window_set_icon_name (dialog->window, gftp_version); } notebook = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), notebook, TRUE, TRUE, 0); gtk_widget_show (notebook); box = gtk_vbox_new (TRUE, 5); gtk_container_border_width (GTK_CONTAINER (box), 10); gtk_widget_show (box); tempwid = toolbar_pixmap (dialog, "gftp-logo.xpm"); gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); gtk_widget_show (tempwid); tempstr = g_strdup_printf (_("%s\nCopyright (C) 1998-2007 Brian Masney <*****@*****.**>\nOfficial Homepage: http://www.gftp.org/\n"), gftp_version); str = _("Translated by"); if (strcmp (str, "Translated by") != 0) { tempstr = g_realloc (tempstr, (gulong) (strlen (tempstr) + strlen (str) + 1)); strcat (tempstr, str); } tempwid = gtk_label_new (tempstr); g_free (tempstr); gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); gtk_widget_show (tempwid); label = gtk_label_new (_("About")); gtk_widget_show (label); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), box, label); box = gtk_vbox_new (FALSE, 5); gtk_container_border_width (GTK_CONTAINER (box), 10); gtk_widget_show (box); tempwid = gtk_table_new (1, 2, FALSE); gtk_box_pack_start (GTK_BOX (box), tempwid, TRUE, TRUE, 0); gtk_widget_show (tempwid); #if GTK_MAJOR_VERSION == 1 view = gtk_text_new (NULL, NULL); gtk_text_set_editable (GTK_TEXT (view), FALSE); gtk_text_set_word_wrap (GTK_TEXT (view), TRUE); gtk_table_attach (GTK_TABLE (tempwid), view, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0); gtk_widget_show (view); vscroll = gtk_vscrollbar_new (GTK_TEXT (view)->vadj); gtk_table_attach (GTK_TABLE (tempwid), vscroll, 1, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); gtk_widget_show (vscroll); #else view = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD); vscroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (vscroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (vscroll), view); gtk_widget_show (view); gtk_table_attach (GTK_TABLE (tempwid), vscroll, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0); gtk_widget_show (vscroll); textbuf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); #endif label = gtk_label_new (_("License Agreement")); gtk_widget_show (label); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), box, label); #if GTK_MAJOR_VERSION == 1 tempwid = gtk_button_new_with_label (_(" Close ")); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), tempwid, FALSE, FALSE, 0); gtk_signal_connect_object (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (dialog)); gtk_widget_grab_default (tempwid); gtk_widget_show (tempwid); #else g_signal_connect_swapped (GTK_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), GTK_OBJECT (dialog)); #endif tempstr = g_strconcat ("/usr/share/common-licenses/GPL", NULL); if (access (tempstr, F_OK) != 0) { g_free (tempstr); temp1str = g_strconcat (share_dir, "/COPYING", NULL); tempstr = gftp_expand_path (NULL, temp1str); g_free (temp1str); if (access (tempstr, F_OK) != 0) { g_free (tempstr); tempstr = gftp_expand_path (NULL, BASE_CONF_DIR "/COPYING"); if (access (tempstr, F_OK) != 0) { #if GTK_MAJOR_VERSION == 1 gtk_text_insert (GTK_TEXT (view), NULL, NULL, NULL, no_license_agreement, -1); #else textlen = gtk_text_buffer_get_char_count (textbuf); gtk_text_buffer_get_iter_at_offset (textbuf, &iter, textlen); gtk_text_buffer_insert (textbuf, &iter, no_license_agreement, -1); #endif gtk_widget_show (dialog); return; } } } if ((fd = fopen (tempstr, "r")) == NULL) { #if GTK_MAJOR_VERSION == 1 gtk_text_insert (GTK_TEXT (view), NULL, NULL, NULL, no_license_agreement, -1); #else textlen = gtk_text_buffer_get_char_count (textbuf); gtk_text_buffer_get_iter_at_offset (textbuf, &iter, textlen); gtk_text_buffer_insert (textbuf, &iter, no_license_agreement, -1); #endif gtk_widget_show (dialog); g_free (tempstr); return; } g_free (tempstr); memset (buf, 0, sizeof (buf)); while ((len = fread (buf, 1, sizeof (buf) - 1, fd))) { buf[len] = '\0'; #if GTK_MAJOR_VERSION == 1 gtk_text_insert (GTK_TEXT (view), NULL, NULL, NULL, buf, -1); #else textlen = gtk_text_buffer_get_char_count (textbuf); gtk_text_buffer_get_iter_at_offset (textbuf, &iter, textlen); gtk_text_buffer_insert (textbuf, &iter, buf, -1); #endif } fclose (fd); gtk_widget_show (dialog); g_free (no_license_agreement); gftp_free_pixmap ("gftp-logo.xpm"); }
static void gftp_read_bookmarks (char *global_data_path) { char *tempstr, *temp1str, buf[255], *curpos; gftp_config_vars * global_entry; gftp_bookmarks_var * newentry; FILE *bmfile; size_t len; int line; if ((tempstr = gftp_expand_path (NULL, BOOKMARKS_FILE)) == NULL) { printf (_("gFTP Error: Bad bookmarks file name %s\n"), BOOKMARKS_FILE); exit (EXIT_FAILURE); } if (access (tempstr, F_OK) == -1) { temp1str = g_strdup_printf ("%s/bookmarks", global_data_path); if (access (temp1str, F_OK) == -1) { printf (_("Warning: Cannot find master bookmark file %s\n"), temp1str); g_free (temp1str); return; } copyfile (temp1str, tempstr); g_free (temp1str); } if ((bmfile = fopen (tempstr, "r")) == NULL) { printf (_("gFTP Error: Cannot open bookmarks file %s: %s\n"), tempstr, g_strerror (errno)); exit (EXIT_FAILURE); } g_free (tempstr); line = 0; newentry = NULL; while (fgets (buf, sizeof (buf), bmfile)) { len = strlen (buf); if (len > 0 && buf[len - 1] == '\n') buf[--len] = '\0'; if (len > 0 && buf[len - 1] == '\r') buf[--len] = '\0'; line++; if (*buf == '[') { newentry = g_malloc0 (sizeof (*newentry)); for (; buf[len - 1] == ' ' || buf[len - 1] == ']'; buf[--len] = '\0'); newentry->path = g_strdup (buf + 1); newentry->isfolder = 0; gftp_add_bookmark (newentry); } else if (strncmp (buf, "hostname", 8) == 0 && newentry) { curpos = buf + 9; if (newentry->hostname) g_free (newentry->hostname); newentry->hostname = g_strdup (curpos); } else if (strncmp (buf, "port", 4) == 0 && newentry) newentry->port = strtol (buf + 5, NULL, 10); else if (strncmp (buf, "protocol", 8) == 0 && newentry) { curpos = buf + 9; if (newentry->protocol) g_free (newentry->protocol); newentry->protocol = g_strdup (curpos); } else if (strncmp (buf, "remote directory", 16) == 0 && newentry) { curpos = buf + 17; if (newentry->remote_dir) g_free (newentry->remote_dir); newentry->remote_dir = g_strdup (curpos); } else if (strncmp (buf, "local directory", 15) == 0 && newentry) { curpos = buf + 16; if (newentry->local_dir) g_free (newentry->local_dir); newentry->local_dir = g_strdup (curpos); } else if (strncmp (buf, "username", 8) == 0 && newentry) { curpos = buf + 9; if (newentry->user) g_free (newentry->user); newentry->user = g_strdup (curpos); } else if (strncmp (buf, "password", 8) == 0 && newentry) { curpos = buf + 9; if (newentry->pass) g_free (newentry->pass); /* Always try to descramble passords. If the password is not scrambled, descramble_password returns the string unchanged */ newentry->pass = gftp_descramble_password (curpos); newentry->save_password = *newentry->pass != '\0'; } else if (strncmp (buf, "account", 7) == 0 && newentry) { curpos = buf + 8; if (newentry->acct) g_free (newentry->acct); newentry->acct = g_strdup (curpos); } else if (*buf == '#' || *buf == '\0') continue; else { if ((curpos = strchr (buf, '=')) == NULL) continue; *curpos = '\0'; if ((global_entry = g_hash_table_lookup (gftp_global_options_htable, buf)) == NULL || gftp_option_types[global_entry->otype].read_function == NULL) { printf (_("gFTP Warning: Skipping line %d in bookmarks file: %s\n"), line, buf); continue; } if (newentry->local_options_hash == NULL) newentry->local_options_hash = g_hash_table_new (string_hash_function, string_hash_compare); newentry->num_local_options_vars++; newentry->local_options_vars = g_realloc (newentry->local_options_vars, (gulong) sizeof (gftp_config_vars) * newentry->num_local_options_vars); memcpy (&newentry->local_options_vars[newentry->num_local_options_vars - 1], global_entry, sizeof (newentry->local_options_vars[newentry->num_local_options_vars - 1])); newentry->local_options_vars[newentry->num_local_options_vars - 1].flags &= ~GFTP_CVARS_FLAGS_DYNMEM; newentry->local_options_vars[newentry->num_local_options_vars - 1].value = NULL; if (gftp_option_types[global_entry->otype].read_function (curpos + 1, &newentry->local_options_vars[newentry->num_local_options_vars - 1], line) != 0) { printf (_("gFTP Warning: Skipping line %d in bookmarks file: %s\n"), line, buf); continue; } g_hash_table_insert (newentry->local_options_hash, newentry->local_options_vars[newentry->num_local_options_vars - 1].key, &newentry->local_options_vars[newentry->num_local_options_vars - 1]); } } }