~vish/ubuntu/maverick/pidgin/bug25979

« back to all changes in this revision

Viewing changes to libpurple/protocols/zephyr/ZVariables.c

  • Committer: Bazaar Package Importer
  • Author(s): Felix Geyer
  • Date: 2009-10-09 19:40:26 UTC
  • mfrom: (1.4.1 upstream) (46.1.10 karmic)
  • Revision ID: james.westby@ubuntu.com-20091009194026-wbqqh0bsbz19nx5q
Tags: 1:2.6.2-1ubuntu7
* Don't stick the buddy list window to all desktops as some
  window managers have trouble to properly unstick it (LP: #346840)
  - debian/patches/11_buddy_list_really_show.patch
* Always use default tray icon size on KDE (LP: #209440)
  - debian/patches/62_tray_icon_size_kde.patch
* Use scrollbars in the preferences dialog if the screen height is
  below 700 px instead of 600 px
  - debian/patches/60_1024x600_gtkprefs.c.patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
#include <pwd.h>
19
19
#endif
20
20
 
21
 
static int get_localvarfile __P((char *bfr));
 
21
static char *get_localvarfile __P((void));
22
22
static char *get_varval __P((char *fn, char *val));
23
23
static int varline __P((char *bfr, char *var));
24
24
 
25
25
char *ZGetVariable(var)
26
26
    char *var;
27
27
{
28
 
    char varfile[128], *ret;
29
 
 
30
 
    if (get_localvarfile(varfile))
31
 
        return ((char *)0);
32
 
 
33
 
    if ((ret = get_varval(varfile, var)) != ZERR_NONE)
34
 
        return (ret);
 
28
        char *varfile, *ret;
 
29
 
 
30
        if ((varfile = get_localvarfile()) == NULL)
 
31
                return ((char *)0);
 
32
 
 
33
        if ((ret = get_varval(varfile, var)) != ZERR_NONE) {
 
34
                g_free(varfile);
 
35
                return ret;
 
36
        }
35
37
 
36
38
#ifdef WIN32
37
 
    sprintf(varfile, "C:\\zephyr\\zephyr.var");
 
39
        varfile = g_strdup("C:\\zephyr\\zephyr.var");
38
40
#else
39
 
    sprintf(varfile, "%s/zephyr.vars", CONFDIR);
 
41
        varfile = g_strdup_printf("%s/zephyr.vars", CONFDIR);
40
42
#endif
41
 
    return (get_varval(varfile, var));
 
43
        ret = get_varval(varfile, var);
 
44
        g_free(varfile);
 
45
 
 
46
        return ret;
42
47
}
43
48
 
44
49
Code_t ZSetVariable(var, value)
47
52
{
48
53
    int written;
49
54
    FILE *fpin, *fpout;
50
 
    char varfile[128], varfilebackup[128], varbfr[512];
 
55
    char *varfile, *varfilebackup, varbfr[512];
51
56
 
52
57
    written = 0;
53
58
        
54
 
    if (get_localvarfile(varfile))
 
59
    if ((varfile = get_localvarfile()) == NULL)
55
60
        return (ZERR_INTERNAL);
56
61
 
57
 
    (void) strcpy(varfilebackup, varfile);
58
 
    (void) strcat(varfilebackup, ".backup");
 
62
    varfilebackup = g_strconcat(varfile, ".backup", NULL);
59
63
        
60
 
    if (!(fpout = fopen(varfilebackup, "w")))
 
64
    if (!(fpout = fopen(varfilebackup, "w"))) {
 
65
        g_free(varfile);
 
66
        g_free(varfilebackup);
61
67
        return (errno);
 
68
    }
62
69
    if ((fpin = fopen(varfile, "r")) != NULL) {
63
70
        while (fgets(varbfr, sizeof varbfr, fpin) != (char *) 0) {
64
71
            if (varbfr[strlen(varbfr)-1] < ' ')
74
81
    } 
75
82
    if (!written)
76
83
        fprintf(fpout, "%s = %s\n", var, value);
77
 
    if (fclose(fpout) == EOF)
78
 
            return(EIO);                /* can't rely on errno */
79
 
    if (rename(varfilebackup, varfile))
 
84
    if (fclose(fpout) == EOF) {
 
85
        g_free(varfilebackup);
 
86
        g_free(varfile);
 
87
        return(EIO);            /* can't rely on errno */
 
88
    }
 
89
    if (rename(varfilebackup, varfile)) {
 
90
        g_free(varfilebackup);
 
91
        g_free(varfile);
80
92
        return (errno);
 
93
    }
 
94
    g_free(varfilebackup);
 
95
    g_free(varfile);
81
96
    return (ZERR_NONE);
82
97
}       
83
98
 
85
100
    char *var;
86
101
{
87
102
    FILE *fpin, *fpout;
88
 
    char varfile[128], varfilebackup[128], varbfr[512];
 
103
    char *varfile, *varfilebackup, varbfr[512];
89
104
 
90
 
    if (get_localvarfile(varfile))
 
105
    if ((varfile = get_localvarfile()) == NULL)
91
106
        return (ZERR_INTERNAL);
92
107
 
93
 
    (void) strcpy(varfilebackup, varfile);
94
 
    (void) strcat(varfilebackup, ".backup");
 
108
    varfilebackup = g_strconcat(varfile, ".backup", NULL);
95
109
        
96
 
    if (!(fpout = fopen(varfilebackup, "w")))
 
110
    if (!(fpout = fopen(varfilebackup, "w"))) {
 
111
        g_free(varfile);
 
112
        g_free(varfilebackup);
97
113
        return (errno);
 
114
    }
98
115
    if ((fpin = fopen(varfile, "r")) != NULL) {
99
116
        while (fgets(varbfr, sizeof varbfr, fpin) != (char *) 0) {
100
117
            if (varbfr[strlen(varbfr)-1] < ' ')
104
121
        }
105
122
        (void) fclose(fpin);            /* don't care about read close errs */
106
123
    } 
107
 
    if (fclose(fpout) == EOF)
108
 
            return(EIO);                /* errno isn't reliable */
109
 
    if (rename(varfilebackup, varfile))
 
124
    if (fclose(fpout) == EOF) {
 
125
        g_free(varfilebackup);
 
126
        g_free(varfile);
 
127
        return(EIO);            /* errno isn't reliable */
 
128
    }
 
129
    if (rename(varfilebackup, varfile)) {
 
130
        g_free(varfilebackup);
 
131
        g_free(varfile);
110
132
        return (errno);
 
133
    }
 
134
    g_free(varfilebackup);
 
135
    g_free(varfile);
111
136
    return (ZERR_NONE);
112
137
}       
113
138
 
114
 
static int get_localvarfile(bfr)
115
 
    char *bfr;
 
139
static char *get_localvarfile(void)
116
140
{
117
 
    const char *envptr;
 
141
    const char *base;
118
142
#ifndef WIN32
119
143
    struct passwd *pwd;
120
 
    envptr = purple_home_dir();
 
144
    base = purple_home_dir();
121
145
#else
122
 
    envptr = getenv("HOME");
123
 
    if (!envptr)
124
 
        envptr = getenv("HOMEPATH");
125
 
    if (!envptr) 
126
 
        envptr = "C:\\";
 
146
    base = getenv("HOME");
 
147
    if (!base)
 
148
        base = getenv("HOMEPATH");
 
149
    if (!base) 
 
150
        base = "C:\\";
127
151
#endif
128
 
    if (envptr)
129
 
        (void) strcpy(bfr, envptr);
130
 
    else {
 
152
    if (!base) {
131
153
#ifndef WIN32
132
154
        if (!(pwd = getpwuid((int) getuid()))) {
133
155
            fprintf(stderr, "Zephyr internal failure: Can't find your entry in /etc/passwd\n");
134
 
            return (1);
 
156
            return NULL;
135
157
        }
136
 
        (void) strcpy(bfr, pwd->pw_dir);
 
158
        base = pwd->pw_dir;
137
159
#endif
138
160
    }
139
161
 
140
 
    (void) strcat(bfr, "/");
141
 
    (void) strcat(bfr, ".zephyr.vars");
142
 
    return (0);
 
162
    return g_strconcat(base, "/.zephyr.vars", NULL);
143
163
144
164
        
145
165
static char *get_varval(fn, var)
186
206
#define max(a,b) ((a > b) ? (a) : (b))
187
207
#endif
188
208
 
189
 
    if (g_strncasecmp(bfr, var, max(strlen(var), cp - bfr)))
 
209
    if (g_ascii_strncasecmp(bfr, var, max(strlen(var), cp - bfr)))
190
210
        return(0);                      /* var is not the var in
191
211
                                           bfr ==> no match */
192
212