comparison plugins/spellchk.c @ 10896:2714b51a0dad

[gaim-migrate @ 12610] Now THAT'S code reuse. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 03 May 2005 02:39:55 +0000
parents 9cf14a87eedc
children 0ef4fbeeefaf
comparison
equal deleted inserted replaced
10895:ffb30c2e82cb 10896:2714b51a0dad
1656 save_list(); 1656 save_list();
1657 } 1657 }
1658 1658
1659 static void save_list() 1659 static void save_list()
1660 { 1660 {
1661 FILE *f; 1661 GString *data;
1662 char *name;
1663 GtkTreeIter iter; 1662 GtkTreeIter iter;
1664 char tempfilename[BUF_LONG]; 1663
1665 int fd; 1664 data = g_string_new("");
1666
1667 name = g_build_filename(gaim_user_dir(), "dict", NULL);
1668 strcpy(tempfilename, name);
1669 strcat(tempfilename,".XXXXXX");
1670 fd = g_mkstemp(tempfilename);
1671 if (fd < 0) {
1672 perror(tempfilename);
1673 g_free(name);
1674 return;
1675 }
1676 if (!(f = fdopen(fd, "w"))) {
1677 perror("fdopen");
1678 close(fd);
1679 g_free(name);
1680 return;
1681 }
1682
1683 fchmod(fd, S_IRUSR | S_IWUSR);
1684 1665
1685 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { 1666 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) {
1686 do { 1667 do {
1687 GValue val0 = {0, }; 1668 GValue val0 = {0, };
1688 GValue val1 = {0, }; 1669 GValue val1 = {0, };
1689 1670
1690 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 0, &val0); 1671 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 0, &val0);
1691 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 1, &val1); 1672 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 1, &val1);
1692 1673
1693 fprintf(f, "BAD %s\nGOOD %s\n\n", g_value_get_string(&val0), g_value_get_string(&val1)); 1674 g_string_append_printf(data, "BAD %s\nGOOD %s\n\n", g_value_get_string(&val0), g_value_get_string(&val1));
1694 1675
1695 g_value_unset(&val0); 1676 g_value_unset(&val0);
1696 g_value_unset(&val1); 1677 g_value_unset(&val1);
1697 1678
1698 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)); 1679 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter));
1699 } 1680 }
1700 1681
1701 if (fclose(f)) { 1682 gaim_util_write_data_to_file("dict", data->str, -1);
1702 gaim_debug(GAIM_DEBUG_ERROR, "spellchk", 1683
1703 "Error writing to %s: %m\n", tempfilename); 1684 g_string_free(data, TRUE);
1704 g_unlink(tempfilename);
1705 g_free(name);
1706 return;
1707 }
1708 g_rename(tempfilename, name);
1709 g_free(name);
1710 } 1685 }
1711 1686
1712 static void 1687 static void
1713 check_if_something_is_selected(GtkTreeModel *model, 1688 check_if_something_is_selected(GtkTreeModel *model,
1714 GtkTreePath *path, GtkTreeIter *iter, gpointer data) 1689 GtkTreePath *path, GtkTreeIter *iter, gpointer data)