Mercurial > pidgin
diff src/util.c @ 1252:46c09828e929
[gaim-migrate @ 1262]
still need to do buddy.c, conversation.c, dialogs.c, prefs.c.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Wed, 13 Dec 2000 22:12:02 +0000 |
| parents | b5783215b245 |
| children | 9da444224f0e |
line wrap: on
line diff
--- a/src/util.c Wed Dec 13 20:23:06 2000 +0000 +++ b/src/util.c Wed Dec 13 22:12:02 2000 +0000 @@ -39,19 +39,20 @@ static GdkPixmap *icon_pm = NULL; static GdkBitmap *icon_bm = NULL; -char *full_date() { - char * date; +char *full_date() +{ + char *date; time_t tme; time(&tme); date = ctime(&tme); - date[strlen(date)-1] = '\0'; + date[strlen(date) - 1] = '\0'; return date; } gint badchar(char c) { - switch(c) { + switch (c) { case ' ': case ',': case '(': @@ -69,354 +70,369 @@ gchar *sec_to_text(gint sec) { - int hrs, min; - char minutes[64]; - char hours[64]; - char *sep; - char *ret = g_malloc(256); - - hrs = sec / 3600; - min = sec % 3600; + int hrs, min; + char minutes[64]; + char hours[64]; + char *sep; + char *ret = g_malloc(256); - min = min / 60; - sec = min % 60; + hrs = sec / 3600; + min = sec % 3600; + + min = min / 60; + sec = min % 60; - if (min) { - if (min == 1) - g_snprintf(minutes, sizeof(minutes), "%d minute.", min); - else - g_snprintf(minutes, sizeof(minutes), "%d minutes.", min); - sep = ", "; - } else { - if (!hrs) - g_snprintf(minutes, sizeof(minutes), "%d minutes.", min); - else { - minutes[0] = '.'; - minutes[1] = '\0'; - } - sep = ""; - } + if (min) { + if (min == 1) + g_snprintf(minutes, sizeof(minutes), "%d minute.", min); + else + g_snprintf(minutes, sizeof(minutes), "%d minutes.", min); + sep = ", "; + } else { + if (!hrs) + g_snprintf(minutes, sizeof(minutes), "%d minutes.", min); + else { + minutes[0] = '.'; + minutes[1] = '\0'; + } + sep = ""; + } - if (hrs) { - if (hrs == 1) - g_snprintf(hours, sizeof(hours), "%d hour%s", hrs, sep); - else - g_snprintf(hours, sizeof(hours), "%d hours%s", hrs, sep); - } else - hours[0] = '\0'; + if (hrs) { + if (hrs == 1) + g_snprintf(hours, sizeof(hours), "%d hour%s", hrs, sep); + else + g_snprintf(hours, sizeof(hours), "%d hours%s", hrs, sep); + } else + hours[0] = '\0'; - - g_snprintf(ret, 256, "%s%s", hours, minutes); - return ret; + g_snprintf(ret, 256, "%s%s", hours, minutes); + + return ret; } gint linkify_text(char *text) { - char *c, *t; - char *cpy = g_malloc(strlen(text) * 2 + 1); - char url_buf[512]; - int cnt=0; - /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ + char *c, *t; + char *cpy = g_malloc(strlen(text) * 2 + 1); + char url_buf[512]; + int cnt = 0; + /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ - strncpy(cpy, text, strlen(text)); - cpy[strlen(text)] = 0; - c = cpy; - while(*c) { - if (!strncasecmp(c, "<A", 2)) { - while(1) { - if (!strncasecmp(c, "/A>", 3)) { - break; - } - text[cnt++] = *c; - c++; - if (!(*c)) - break; - } - } else if ( (!strncasecmp(c, "http://", 7) || (!strncasecmp(c, "https://", 8)))) { - t = c; - while(1) { - if (badchar(*t)) { + strncpy(cpy, text, strlen(text)); + cpy[strlen(text)] = 0; + c = cpy; + while (*c) { + if (!strncasecmp(c, "<A", 2)) { + while (1) { + if (!strncasecmp(c, "/A>", 3)) { + break; + } + text[cnt++] = *c; + c++; + if (!(*c)) + break; + } + } else if ((!strncasecmp(c, "http://", 7) || (!strncasecmp(c, "https://", 8)))) { + t = c; + while (1) { + if (badchar(*t)) { - if (*(t) == ',' && (*(t+1) != ' ')) - { + if (*(t) == ',' && (*(t + 1) != ' ')) { t++; continue; } - if (*(t-1) == '.') - t--; - strncpy(url_buf, c, t-c); - url_buf[t-c] = 0; - cnt += g_snprintf(&text[cnt++], 1024, "<A HREF=\"%s\">%s</A>", url_buf, url_buf); - cnt--; - c = t; - break; - } - if (!t) - break; - t++; + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + cnt += + g_snprintf(&text[cnt++], 1024, "<A HREF=\"%s\">%s</A>", + url_buf, url_buf); + cnt--; + c = t; + break; + } + if (!t) + break; + t++; - } - } else if (!strncasecmp(c, "www.", 4)) { - if (strncasecmp(c, "www..", 5)) { - t = c; - while(1) { - if (badchar(*t)) { - if (t-c == 4) { - break; - } + } + } else if (!strncasecmp(c, "www.", 4)) { + if (strncasecmp(c, "www..", 5)) { + t = c; + while (1) { + if (badchar(*t)) { + if (t - c == 4) { + break; + } - if (*(t) == ',' && (*(t+1) != ' ')) - { - t++; - continue; + if (*(t) == ',' && (*(t + 1) != ' ')) { + t++; + continue; + } + + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + cnt += + g_snprintf(&text[cnt++], 1024, + "<A HREF=\"http://%s\">%s</A>", url_buf, + url_buf); + cnt--; + c = t; + break; } - - if (*(t-1) == '.') - t--; - strncpy(url_buf, c, t-c); - url_buf[t-c] = 0; - cnt += g_snprintf(&text[cnt++], 1024, "<A HREF=\"http://%s\">%s</A>", url_buf, url_buf); - cnt--; - c = t; - break; - } - if (!t) - break; - t++; - } - } - } else if (!strncasecmp(c, "ftp://", 6)) { - t = c; - while(1) { - if (badchar(*t)) { - if (*(t-1) == '.') - t--; - strncpy(url_buf, c, t-c); - url_buf[t-c] = 0; - cnt += g_snprintf(&text[cnt++], 1024, "<A HREF=\"%s\">%s</A>", url_buf, url_buf); - cnt--; - c = t; - break; - } - if (!t) - break; - t++; + if (!t) + break; + t++; + } + } + } else if (!strncasecmp(c, "ftp://", 6)) { + t = c; + while (1) { + if (badchar(*t)) { + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + cnt += + g_snprintf(&text[cnt++], 1024, "<A HREF=\"%s\">%s</A>", + url_buf, url_buf); + cnt--; + c = t; + break; + } + if (!t) + break; + t++; - } - } else if (!strncasecmp(c, "ftp.", 4) ) { + } + } else if (!strncasecmp(c, "ftp.", 4)) { if (strncasecmp(c, "ftp..", 5)) { - t = c; - while(1) { - if (badchar(*t)) { - if (t-c == 4) { - break; - } - if (*(t-1) == '.') - t--; - strncpy(url_buf, c, t-c); - url_buf[t-c] = 0; - cnt += g_snprintf(&text[cnt++], 1024, "<A HREF=\"ftp://%s\">%s</A>", url_buf, url_buf); - cnt--; - c = t; - break; - } - if (!t) - break; - t++; - } + t = c; + while (1) { + if (badchar(*t)) { + if (t - c == 4) { + break; + } + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + cnt += + g_snprintf(&text[cnt++], 1024, + "<A HREF=\"ftp://%s\">%s</A>", url_buf, + url_buf); + cnt--; + c = t; + break; + } + if (!t) + break; + t++; + } } - } else if (!strncasecmp(c, "mailto:", 7)) { - t = c; - while(1) { - if (badchar(*t)) { - if (*(t-1) == '.') - t--; - strncpy(url_buf, c, t-c); - url_buf[t-c] = 0; - cnt += g_snprintf(&text[cnt++], 1024, "<A HREF=\"%s\">%s</A>", url_buf, url_buf); - cnt--; - c = t; - break; - } - if (!t) - break; - t++; + } else if (!strncasecmp(c, "mailto:", 7)) { + t = c; + while (1) { + if (badchar(*t)) { + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + cnt += + g_snprintf(&text[cnt++], 1024, "<A HREF=\"%s\">%s</A>", + url_buf, url_buf); + cnt--; + c = t; + break; + } + if (!t) + break; + t++; - } - } else if (!strncasecmp(c, "@", 1)) { - char *tmp; - int flag; - int len=0; + } + } else if (!strncasecmp(c, "@", 1)) { + char *tmp; + int flag; + int len = 0; char illegal_chars[] = "!@#$%^&*()[]{}/\\<>\":;\0"; - url_buf[0] = 0; + url_buf[0] = 0; - if (*(c-1) == ' ' || *(c+1) == ' ' || rindex(illegal_chars, *(c+1)) || *(c+1) == 13 || *(c+1) == 10) - flag = 0; - else - flag = 1; + if (*(c - 1) == ' ' || *(c + 1) == ' ' || rindex(illegal_chars, *(c + 1)) + || *(c + 1) == 13 || *(c + 1) == 10) + flag = 0; + else + flag = 1; - t = c; - while(flag) { - if (badchar(*t)) { - cnt -= (len - 1); - break; - } else { - len++; - tmp = g_malloc(len + 1); - tmp[len] = 0; - tmp[0] = *t; - strncpy(tmp + 1, url_buf, len - 1); - strcpy(url_buf, tmp); - url_buf[len] = 0; - g_free(tmp); - t--; - if (t < cpy) { - cnt = 0; - break; - } - } - } + t = c; + while (flag) { + if (badchar(*t)) { + cnt -= (len - 1); + break; + } else { + len++; + tmp = g_malloc(len + 1); + tmp[len] = 0; + tmp[0] = *t; + strncpy(tmp + 1, url_buf, len - 1); + strcpy(url_buf, tmp); + url_buf[len] = 0; + g_free(tmp); + t--; + if (t < cpy) { + cnt = 0; + break; + } + } + } - t = c + 1; + t = c + 1; - while(flag) { - if (badchar(*t)) { - if (*(t-1) == '.') - t--; - cnt += g_snprintf(&text[cnt++], 1024, "<A HREF=\"mailto:%s\">%s</A>", url_buf, url_buf); - text[cnt]=0; + while (flag) { + if (badchar(*t)) { + if (*(t - 1) == '.') + t--; + cnt += + g_snprintf(&text[cnt++], 1024, + "<A HREF=\"mailto:%s\">%s</A>", url_buf, url_buf); + text[cnt] = 0; - cnt--; - c = t; + cnt--; + c = t; - break; - } else { - strncat(url_buf, t, 1); - len++; - url_buf[len] = 0; - } + break; + } else { + strncat(url_buf, t, 1); + len++; + url_buf[len] = 0; + } - t++; + t++; - } + } - } + } - if (*c == 0) - break; + if (*c == 0) + break; - text[cnt++] = *c; - c++; + text[cnt++] = *c; + c++; - } - text[cnt]=0; + } + text[cnt] = 0; g_free(cpy); - return cnt; + return cnt; } -FILE *open_log_file (char *name) +FILE *open_log_file(char *name) { - char *buf; - char *buf2; - char log_all_file[256]; - struct log_conversation *l; - struct stat st; - int flag = 0; - FILE *fd; - int res; - gchar* gaim_dir; + char *buf; + char *buf2; + char log_all_file[256]; + struct log_conversation *l; + struct stat st; + int flag = 0; + FILE *fd; + int res; + gchar *gaim_dir; - if (!(general_options & OPT_GEN_LOG_ALL)) { + if (!(general_options & OPT_GEN_LOG_ALL)) { - l = find_log_info(name); - if (!l) - return NULL; + l = find_log_info(name); + if (!l) + return NULL; - if (stat(l->filename, &st) < 0) - flag = 1; + if (stat(l->filename, &st) < 0) + flag = 1; - fd = fopen(l->filename, "a"); + fd = fopen(l->filename, "a"); - if (flag) { /* is a new file */ - fprintf(fd, "<HTML><HEAD><TITLE>" ); - fprintf(fd, "IM Sessions with %s", name ); - fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n" ); - } + if (flag) { /* is a new file */ + fprintf(fd, "<HTML><HEAD><TITLE>"); + fprintf(fd, "IM Sessions with %s", name); + fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n"); + } - return fd; - } + return fd; + } buf = g_malloc(BUF_LONG); buf2 = g_malloc(BUF_LONG); gaim_dir = gaim_user_dir(); - - /* Dont log yourself */ + + /* Dont log yourself */ strncpy(log_all_file, gaim_dir, 256); - stat(log_all_file, &st); - if (!S_ISDIR(st.st_mode)) - unlink(log_all_file); + stat(log_all_file, &st); + if (!S_ISDIR(st.st_mode)) + unlink(log_all_file); - fd = fopen(log_all_file, "r"); + fd = fopen(log_all_file, "r"); - if (!fd) { - res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR); - if (res < 0) { - g_snprintf(buf, BUF_LONG, "Unable to make directory %s for logging", log_all_file); - do_error_dialog(buf, "Error!"); - g_free(buf); - g_free(buf2); - return NULL; - } - } else - fclose(fd); + if (!fd) { + res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR); + if (res < 0) { + g_snprintf(buf, BUF_LONG, "Unable to make directory %s for logging", + log_all_file); + do_error_dialog(buf, "Error!"); + g_free(buf); + g_free(buf2); + return NULL; + } + } else + fclose(fd); - g_snprintf(log_all_file, 256, "%s/logs", gaim_dir); + g_snprintf(log_all_file, 256, "%s/logs", gaim_dir); - if (stat(log_all_file, &st) < 0) - flag = 1; - if (!S_ISDIR(st.st_mode)) - unlink(log_all_file); + if (stat(log_all_file, &st) < 0) + flag = 1; + if (!S_ISDIR(st.st_mode)) + unlink(log_all_file); - fd = fopen(log_all_file, "r"); - if (!fd) { - res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR); - if (res < 0) { - g_snprintf(buf, BUF_LONG, "Unable to make directory %s for logging", log_all_file); - do_error_dialog(buf, "Error!"); - g_free(buf); - g_free(buf2); - return NULL; - } - } else - fclose(fd); + fd = fopen(log_all_file, "r"); + if (!fd) { + res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR); + if (res < 0) { + g_snprintf(buf, BUF_LONG, "Unable to make directory %s for logging", + log_all_file); + do_error_dialog(buf, "Error!"); + g_free(buf); + g_free(buf2); + return NULL; + } + } else + fclose(fd); + - - g_snprintf(log_all_file, 256, "%s/logs/%s.log", gaim_dir, normalize(name)); - if (stat(log_all_file, &st) < 0) - flag = 1; + g_snprintf(log_all_file, 256, "%s/logs/%s.log", gaim_dir, normalize(name)); + if (stat(log_all_file, &st) < 0) + flag = 1; - debug_printf("Logging to: \"%s\"\n", log_all_file); + debug_printf("Logging to: \"%s\"\n", log_all_file); - fd = fopen(log_all_file, "a"); + fd = fopen(log_all_file, "a"); - if (fd && flag) { /* is a new file */ - fprintf(fd, "<HTML><HEAD><TITLE>" ); - fprintf(fd, "IM Sessions with %s", name ); - fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n" ); - } + if (fd && flag) { /* is a new file */ + fprintf(fd, "<HTML><HEAD><TITLE>"); + fprintf(fd, "IM Sessions with %s", name); + fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n"); + } g_free(buf); g_free(buf2); g_free(gaim_dir); - return fd; + return fd; } @@ -424,31 +440,31 @@ int escape_message(char *msg) { char *c, *cpy; - int cnt=0; + int cnt = 0; /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ if (strlen(msg) > BUF_LEN) { debug_printf("Warning: truncating message to 2048 bytes\n"); - msg[2047]='\0'; + msg[2047] = '\0'; } cpy = g_strdup(msg); c = cpy; - while(*c) { - switch(*c) { + while (*c) { + switch (*c) { case '$': case '[': case ']': case '(': case ')': case '#': - msg[cnt++]='\\'; + msg[cnt++] = '\\'; /* Fall through */ default: - msg[cnt++]=*c; + msg[cnt++] = *c; } c++; } - msg[cnt]='\0'; + msg[cnt] = '\0'; g_free(cpy); return cnt; } @@ -457,17 +473,17 @@ int escape_text(char *msg) { char *c, *cpy; - int cnt=0; + int cnt = 0; /* Assumes you have a buffer able to cary at least BUF_LEN * 4 bytes */ if (strlen(msg) > BUF_LEN) { fprintf(stderr, "Warning: truncating message to 2048 bytes\n"); - msg[2047]='\0'; + msg[2047] = '\0'; } cpy = g_strdup(msg); c = cpy; - while(*c) { - switch(*c) { + while (*c) { + switch (*c) { case '\n': msg[cnt++] = '<'; msg[cnt++] = 'B'; @@ -478,61 +494,60 @@ case '}': case '\\': case '"': - msg[cnt++]='\\'; + msg[cnt++] = '\\'; /* Fall through */ default: - msg[cnt++]=*c; + msg[cnt++] = *c; } c++; } - msg[cnt]='\0'; + msg[cnt] = '\0'; g_free(cpy); return cnt; } -char * escape_text2(char *msg) +char *escape_text2(char *msg) { char *c, *cpy; char *woo; - int cnt=0; - /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ - if (strlen(msg) > BUF_LEN) { - fprintf(stderr, "Warning: truncating message to 2048 bytes\n"); - msg[2047]='\0'; - } + int cnt = 0; + /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ + if (strlen(msg) > BUF_LEN) { + fprintf(stderr, "Warning: truncating message to 2048 bytes\n"); + msg[2047] = '\0'; + } - woo = malloc(strlen(msg) * 2); - cpy = g_strdup(msg); - c = cpy; - while(*c) { - switch(*c) { - case '\n': - woo[cnt++] = '<'; - woo[cnt++] = 'B'; - woo[cnt++] = 'R'; - woo[cnt++] = '>'; - break; - case '{': - case '}': - case '\\': - case '"': - woo[cnt++]='\\'; - /* Fall through */ - default: - woo[cnt++]=*c; - } - c++; - } - woo[cnt]='\0'; + woo = malloc(strlen(msg) * 2); + cpy = g_strdup(msg); + c = cpy; + while (*c) { + switch (*c) { + case '\n': + woo[cnt++] = '<'; + woo[cnt++] = 'B'; + woo[cnt++] = 'R'; + woo[cnt++] = '>'; + break; + case '{': + case '}': + case '\\': + case '"': + woo[cnt++] = '\\'; + /* Fall through */ + default: + woo[cnt++] = *c; + } + c++; + } + woo[cnt] = '\0'; - g_free (cpy); - return woo; + g_free(cpy); + return woo; } -char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - "0123456789+/"; - +char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" "0123456789+/"; + char *tobase64(char *text) { @@ -540,47 +555,47 @@ char *c; unsigned int tmp = 0; int len = 0, n = 0; - + c = text; - - while(c) { + + while (c) { tmp = tmp << 8; tmp += *c; n++; if (n == 3) { - out = g_realloc(out, len+4); + out = g_realloc(out, len + 4); out[len] = alphabet[(tmp >> 18) & 0x3f]; - out[len+1] = alphabet[(tmp >> 12) & 0x3f]; - out[len+2] = alphabet[(tmp >> 6) & 0x3f]; - out[len+3] = alphabet[tmp & 0x3f]; + out[len + 1] = alphabet[(tmp >> 12) & 0x3f]; + out[len + 2] = alphabet[(tmp >> 6) & 0x3f]; + out[len + 3] = alphabet[tmp & 0x3f]; len += 4; tmp = 0; n = 0; } c++; } - switch(n) { + switch (n) { case 2: - out = g_realloc(out, len+5); + out = g_realloc(out, len + 5); out[len] = alphabet[(tmp >> 12) & 0x3f]; - out[len+1] = alphabet[(tmp >> 6) & 0x3f]; - out[len+2] = alphabet[tmp & 0x3f]; - out[len+3] = '='; - out[len+4] = 0; + out[len + 1] = alphabet[(tmp >> 6) & 0x3f]; + out[len + 2] = alphabet[tmp & 0x3f]; + out[len + 3] = '='; + out[len + 4] = 0; break; case 1: - out = g_realloc(out, len+4); + out = g_realloc(out, len + 4); out[len] = alphabet[(tmp >> 6) & 0x3f]; - out[len+1] = alphabet[tmp & 0x3f]; - out[len+2] = '='; - out[len+3] = 0; + out[len + 1] = alphabet[tmp & 0x3f]; + out[len + 2] = '='; + out[len + 3] = 0; break; case 0: - out = g_realloc(out, len+2); + out = g_realloc(out, len + 2); out[len] = '='; - out[len+1] = 0; + out[len + 1] = 0; break; } return out; @@ -589,84 +604,84 @@ char *frombase64(char *text) { - char *out = NULL; - char tmp = 0; - char *c; - gint32 tmp2 = 0; - int len = 0, n = 0; - - c = text; - - while(*c) { - if (*c >= 'A' && *c <= 'Z') { - tmp = *c - 'A'; - } else if (*c >= 'a' && *c <= 'z') { - tmp = 26 + (*c - 'a'); - } else if (*c >= '0' && *c <= 57) { - tmp = 52 + (*c - '0'); - } else if (*c == '+') { - tmp = 62; - } else if (*c == '/') { - tmp = 63; - } else if (*c == '=') { - if (n == 3) { - out = g_realloc(out, len + 2); - out[len] = (char)(tmp2 >> 10) & 0xff; - len++; - out[len] = (char)(tmp2 >> 2) & 0xff; - len++; - } else if (n == 2) { - out = g_realloc(out, len + 1); - out[len] = (char)(tmp2 >> 4) & 0xff; - len++; - } - break; - } - tmp2 = ((tmp2 << 6) | (tmp & 0xff)); - n++; - if (n == 4) { - out = g_realloc(out, len + 3); - out[len] = (char)((tmp2 >> 16) & 0xff); - len++; - out[len] = (char)((tmp2 >> 8) & 0xff); - len++; - out[len] = (char)(tmp2 & 0xff); - len++; - tmp2 = 0; - n = 0; - } - c++; - } + char *out = NULL; + char tmp = 0; + char *c; + gint32 tmp2 = 0; + int len = 0, n = 0; + + c = text; - out = g_realloc(out, len+1); - out[len] = 0; - - return out; + while (*c) { + if (*c >= 'A' && *c <= 'Z') { + tmp = *c - 'A'; + } else if (*c >= 'a' && *c <= 'z') { + tmp = 26 + (*c - 'a'); + } else if (*c >= '0' && *c <= 57) { + tmp = 52 + (*c - '0'); + } else if (*c == '+') { + tmp = 62; + } else if (*c == '/') { + tmp = 63; + } else if (*c == '=') { + if (n == 3) { + out = g_realloc(out, len + 2); + out[len] = (char)(tmp2 >> 10) & 0xff; + len++; + out[len] = (char)(tmp2 >> 2) & 0xff; + len++; + } else if (n == 2) { + out = g_realloc(out, len + 1); + out[len] = (char)(tmp2 >> 4) & 0xff; + len++; + } + break; + } + tmp2 = ((tmp2 << 6) | (tmp & 0xff)); + n++; + if (n == 4) { + out = g_realloc(out, len + 3); + out[len] = (char)((tmp2 >> 16) & 0xff); + len++; + out[len] = (char)((tmp2 >> 8) & 0xff); + len++; + out[len] = (char)(tmp2 & 0xff); + len++; + tmp2 = 0; + n = 0; + } + c++; + } + + out = g_realloc(out, len + 1); + out[len] = 0; + + return out; } char *normalize(const char *s) { static char buf[BUF_LEN]; - char *t, *u; - int x=0; + char *t, *u; + int x = 0; - g_return_val_if_fail ((s != NULL), NULL); + g_return_val_if_fail((s != NULL), NULL); - u = t = g_strdup(s); + u = t = g_strdup(s); - strcpy(t, s); - g_strdown(t); - - while(*t && (x < BUF_LEN - 1)) { + strcpy(t, s); + g_strdown(t); + + while (*t && (x < BUF_LEN - 1)) { if (*t != ' ') { buf[x] = *t; x++; } t++; } - buf[x]='\0'; - g_free(u); + buf[x] = '\0'; + g_free(u); return buf; } @@ -697,23 +712,23 @@ { #ifndef _WIN32 if (icon_pm == NULL) { - icon_pm = gdk_pixmap_create_from_xpm_d(w, &icon_bm, - NULL, (gchar **)aimicon_xpm); + icon_pm = gdk_pixmap_create_from_xpm_d(w, &icon_bm, NULL, (gchar **)aimicon_xpm); } gdk_window_set_icon(w, NULL, icon_pm, icon_bm); - if (mainwindow) gdk_window_set_group(w, mainwindow->window); + if (mainwindow) + gdk_window_set_group(w, mainwindow->window); #endif } struct aim_user *find_user(const char *name, int protocol) { - char *who = g_strdup(normalize(name)); - GList *usr = aim_users; - struct aim_user *u; + char *who = g_strdup(normalize(name)); + GList *usr = aim_users; + struct aim_user *u; - while(usr) { - u = (struct aim_user *)usr->data; - if (!strcmp(normalize(u->username), who)) { + while (usr) { + u = (struct aim_user *)usr->data; + if (!strcmp(normalize(u->username), who)) { if (protocol != -1) { if (u->protocol == protocol) { g_free(who); @@ -723,12 +738,12 @@ g_free(who); return u; } - - } - usr = usr->next; - } - g_free(who); - return NULL; + + } + usr = usr->next; + } + g_free(who); + return NULL; } @@ -738,50 +753,50 @@ { char *c; static char cpy[BUF_LONG]; - int cnt=0; + int cnt = 0; time_t t = time(0); struct tm *tme = localtime(&t); char tmp[20]; cpy[0] = '\0'; c = msg; - while(*c) { - switch(*c) { + while (*c) { + switch (*c) { case '%': - if (*(c+1)) { - switch (*(c+1)) { + if (*(c + 1)) { + switch (*(c + 1)) { case 'n': // append name - strcpy (cpy+cnt, name); + strcpy(cpy + cnt, name); cnt += strlen(name); c++; break; case 'd': // append date - strftime (tmp, 20, "%D", tme); - strcpy (cpy+cnt, tmp); + strftime(tmp, 20, "%D", tme); + strcpy(cpy + cnt, tmp); cnt += strlen(tmp); c++; break; case 't': // append time - strftime (tmp, 20, "%r", tme); - strcpy (cpy+cnt, tmp); + strftime(tmp, 20, "%r", tme); + strcpy(cpy + cnt, tmp); cnt += strlen(tmp); c++; break; default: - cpy[cnt++]=*c; + cpy[cnt++] = *c; } } break; default: - cpy[cnt++]=*c; + cpy[cnt++] = *c; } c++; } - cpy[cnt]='\0'; - return(cpy); + cpy[cnt] = '\0'; + return (cpy); } GtkWidget *picture_button(GtkWidget *window, char *text, char **xpm) @@ -808,8 +823,7 @@ pixmap = gtk_pixmap_new(pm, mask); gtk_box_pack_end(GTK_BOX(button_box_2), pixmap, FALSE, FALSE, 0); - if (text) - { + if (text) { label = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(button_box_3), label, FALSE, FALSE, 2); gtk_widget_show(label); @@ -825,7 +839,7 @@ gtk_widget_show(button); gdk_pixmap_unref(pm); gdk_bitmap_unref(mask); - + return button; } @@ -839,7 +853,8 @@ GtkWidget *pixmap; GtkWidget *label; - if (!button_tips) button_tips = gtk_tooltips_new(); + if (!button_tips) + button_tips = gtk_tooltips_new(); button = gtk_button_new(); if (display_options & OPT_DISP_COOL_LOOK) gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); @@ -863,21 +878,20 @@ gdk_bitmap_unref(mask); } - if (dispstyle == 2 || dispstyle == 1) - { + if (dispstyle == 2 || dispstyle == 1) { label = gtk_label_new(text); gtk_widget_show(label); gtk_box_pack_end(GTK_BOX(button_box_2), label, FALSE, FALSE, 0); } - gtk_tooltips_set_tip(button_tips, button, text, "Gaim"); + gtk_tooltips_set_tip(button_tips, button, text, "Gaim"); gtk_widget_show(button); return button; } /* remove leading whitespace from a string */ -char *remove_spaces (char *str) +char *remove_spaces(char *str) { int i; char *new; @@ -885,7 +899,7 @@ if (str == NULL) return NULL; - i = strspn (str, " \t\n\r\f"); + i = strspn(str, " \t\n\r\f"); new = &str[i]; return new; @@ -893,31 +907,31 @@ /* translate an AIM 3 buddylist (*.lst) to a GAIM buddylist */ -void translate_lst (FILE *src_fp, char *dest) +void translate_lst(FILE *src_fp, char *dest) { char line[BUF_LEN], *line2; char *name; int i; - sprintf (dest, "m 1\n"); - - while (fgets (line, BUF_LEN, src_fp)) { - line2 = remove_spaces (line); - if (strstr (line2, "group") == line2) { - name = strpbrk (line2, " \t\n\r\f") + 1; - strcat (dest, "g "); - for (i = 0; i < strcspn (name, "\n\r"); i++) + sprintf(dest, "m 1\n"); + + while (fgets(line, BUF_LEN, src_fp)) { + line2 = remove_spaces(line); + if (strstr(line2, "group") == line2) { + name = strpbrk(line2, " \t\n\r\f") + 1; + strcat(dest, "g "); + for (i = 0; i < strcspn(name, "\n\r"); i++) if (name[i] != '\"') - strncat (dest, &name[i], 1); - strcat (dest, "\n"); + strncat(dest, &name[i], 1); + strcat(dest, "\n"); } - if (strstr (line2, "buddy") == line2) { - name = strpbrk (line2, " \t\n\r\f") + 1; - strcat (dest, "b "); - for (i = 0; i < strcspn (name, "\n\r"); i++) + if (strstr(line2, "buddy") == line2) { + name = strpbrk(line2, " \t\n\r\f") + 1; + strcat(dest, "b "); + for (i = 0; i < strcspn(name, "\n\r"); i++) if (name[i] != '\"') - strncat (dest, &name[i], 1); - strcat (dest, "\n"); + strncat(dest, &name[i], 1); + strcat(dest, "\n"); } } @@ -926,75 +940,75 @@ /* translate an AIM 4 buddylist (*.blt) to GAIM format */ -void translate_blt (FILE *src_fp, char *dest) +void translate_blt(FILE *src_fp, char *dest) { int i; char line[BUF_LEN]; char *buddy; - sprintf (dest, "m 1\n"); - - while (strstr (fgets (line, BUF_LEN, src_fp), "Buddy") == NULL) ; - while (strstr (fgets (line, BUF_LEN, src_fp), "list") == NULL) ; + sprintf(dest, "m 1\n"); + + while (strstr(fgets(line, BUF_LEN, src_fp), "Buddy") == NULL); + while (strstr(fgets(line, BUF_LEN, src_fp), "list") == NULL); while (1) { - fgets (line, BUF_LEN, src_fp); - if (strchr (line, '}') != NULL) + fgets(line, BUF_LEN, src_fp); + if (strchr(line, '}') != NULL) break; - + /* Syntax starting with "<group> {" */ - if (strchr (line, '{') != NULL) { - strcat (dest, "g "); - buddy = remove_spaces (strtok (line, "{")); + if (strchr(line, '{') != NULL) { + strcat(dest, "g "); + buddy = remove_spaces(strtok(line, "{")); for (i = 0; i < strlen(buddy); i++) { if (buddy[i] != '\"') - strncat (dest, &buddy[i], 1); + strncat(dest, &buddy[i], 1); } - strcat (dest, "\n"); - while (strchr (fgets (line, BUF_LEN, src_fp), '}') == NULL) { - buddy = remove_spaces (line); - strcat (dest, "b "); - if (strchr (buddy, '\"') != NULL) { - strncat (dest, &buddy[1], strlen(buddy)-3); - strcat (dest, "\n"); + strcat(dest, "\n"); + while (strchr(fgets(line, BUF_LEN, src_fp), '}') == NULL) { + buddy = remove_spaces(line); + strcat(dest, "b "); + if (strchr(buddy, '\"') != NULL) { + strncat(dest, &buddy[1], strlen(buddy) - 3); + strcat(dest, "\n"); } else - strcat (dest, buddy); + strcat(dest, buddy); } } /* Syntax "group buddy buddy ..." */ else { - buddy = remove_spaces (strtok (line, " \n")); - strcat (dest, "g "); - if (strchr (buddy, '\"') != NULL) { - strcat (dest, &buddy[1]); - strcat (dest, " "); - buddy = remove_spaces (strtok (NULL, " \n")); - while (strchr (buddy, '\"') == NULL) { - strcat (dest, buddy); - strcat (dest, " "); - buddy = remove_spaces (strtok (NULL, " \n")); + buddy = remove_spaces(strtok(line, " \n")); + strcat(dest, "g "); + if (strchr(buddy, '\"') != NULL) { + strcat(dest, &buddy[1]); + strcat(dest, " "); + buddy = remove_spaces(strtok(NULL, " \n")); + while (strchr(buddy, '\"') == NULL) { + strcat(dest, buddy); + strcat(dest, " "); + buddy = remove_spaces(strtok(NULL, " \n")); } - strncat (dest, buddy, strlen(buddy)-1); + strncat(dest, buddy, strlen(buddy) - 1); } else { - strcat (dest, buddy); + strcat(dest, buddy); } - strcat (dest, "\n"); - while ((buddy = remove_spaces (strtok (NULL, " \n"))) != NULL) { - strcat (dest, "b "); - if (strchr (buddy, '\"') != NULL) { - strcat (dest, &buddy[1]); - strcat (dest, " "); - buddy = remove_spaces (strtok (NULL, " \n")); - while (strchr (buddy, '\"') == NULL) { - strcat (dest, buddy); - strcat (dest, " "); - buddy = remove_spaces (strtok (NULL, " \n")); + strcat(dest, "\n"); + while ((buddy = remove_spaces(strtok(NULL, " \n"))) != NULL) { + strcat(dest, "b "); + if (strchr(buddy, '\"') != NULL) { + strcat(dest, &buddy[1]); + strcat(dest, " "); + buddy = remove_spaces(strtok(NULL, " \n")); + while (strchr(buddy, '\"') == NULL) { + strcat(dest, buddy); + strcat(dest, " "); + buddy = remove_spaces(strtok(NULL, " \n")); } - strncat (dest, buddy, strlen(buddy)-1); + strncat(dest, buddy, strlen(buddy) - 1); } else { - strcat (dest, buddy); + strcat(dest, buddy); } - strcat (dest, "\n"); + strcat(dest, "\n"); } } } @@ -1004,7 +1018,7 @@ char *stylize(gchar *text, int length) { - gchar *buf; + gchar *buf; char tmp[length]; buf = g_malloc(length); @@ -1036,86 +1050,86 @@ } if (font_options & OPT_FONT_FGCOL) { - g_snprintf(tmp, length, "<FONT COLOR=\"#%02X%02X%02X\">%s</FONT>", fgcolor.red, fgcolor.green, fgcolor.blue, buf); + g_snprintf(tmp, length, "<FONT COLOR=\"#%02X%02X%02X\">%s</FONT>", fgcolor.red, + fgcolor.green, fgcolor.blue, buf); strcpy(buf, tmp); } if (font_options & OPT_FONT_BGCOL) { - g_snprintf(tmp, length, "<BODY BGCOLOR=\"#%02X%02X%02X\">%s</BODY>", bgcolor.red, bgcolor.green, bgcolor.blue, buf); + g_snprintf(tmp, length, "<BODY BGCOLOR=\"#%02X%02X%02X\">%s</BODY>", bgcolor.red, + bgcolor.green, bgcolor.blue, buf); strcpy(buf, tmp); } - + return buf; } -int set_dispstyle (int chat) +int set_dispstyle(int chat) { int dispstyle; if (chat) { - switch (display_options & (OPT_DISP_CHAT_BUTTON_TEXT | - OPT_DISP_CHAT_BUTTON_XPM)) { + switch (display_options & (OPT_DISP_CHAT_BUTTON_TEXT | OPT_DISP_CHAT_BUTTON_XPM)) { case OPT_DISP_CHAT_BUTTON_TEXT: - dispstyle = 1; - break; + dispstyle = 1; + break; case OPT_DISP_CHAT_BUTTON_XPM: - dispstyle = 0; - break; - default: /* both or neither */ - dispstyle = 2; - break; + dispstyle = 0; + break; + default: /* both or neither */ + dispstyle = 2; + break; } } else { - switch (display_options & (OPT_DISP_CONV_BUTTON_TEXT | - OPT_DISP_CONV_BUTTON_XPM)) { + switch (display_options & (OPT_DISP_CONV_BUTTON_TEXT | OPT_DISP_CONV_BUTTON_XPM)) { case OPT_DISP_CONV_BUTTON_TEXT: - dispstyle = 1; - break; + dispstyle = 1; + break; case OPT_DISP_CONV_BUTTON_XPM: - dispstyle = 0; - break; - default: /* both or neither */ - dispstyle = 2; - break; + dispstyle = 0; + break; + default: /* both or neither */ + dispstyle = 2; + break; } } return dispstyle; } -void show_usage (int mode, char *name) +void show_usage(int mode, char *name) { switch (mode) { - case 0: /* full help text */ - printf ("Usage: %s [OPTION]...\n\n" - " -a, --acct display account editor window\n" - " -l, --login[=NAME] automatically login (optional argument NAME specifies\n" - " account(s) to use)\n" - " -u, --user=NAME use account NAME\n" - " -v, --version display version information window\n" - " -h, --help display this help and exit\n", name); - break; - case 1: /* short message */ - printf ("Try `%s -h' for more information.\n", name); - break; + case 0: /* full help text */ + printf("Usage: %s [OPTION]...\n\n" + " -a, --acct display account editor window\n" + " -l, --login[=NAME] automatically login (optional argument NAME specifies\n" + " account(s) to use)\n" + " -u, --user=NAME use account NAME\n" + " -v, --version display version information window\n" + " -h, --help display this help and exit\n", name); + break; + case 1: /* short message */ + printf("Try `%s -h' for more information.\n", name); + break; } } -void set_first_user (char *name) +void set_first_user(char *name) { struct aim_user *u; - u = find_user (name, -1); + u = find_user(name, -1); - if (!u) { /* new user */ + if (!u) { /* new user */ u = g_new0(struct aim_user, 1); g_snprintf(u->username, sizeof(u->username), "%s", name); - u->protocol = 0 /* PROTO_TOC */; - aim_users = g_list_prepend (aim_users, u); - } else { /* user already exists */ - aim_users = g_list_remove (aim_users, u); - aim_users = g_list_prepend (aim_users, u); + u->protocol = 0 /* PROTO_TOC */ ; + aim_users = g_list_prepend(aim_users, u); + } else { /* user already exists */ + aim_users = g_list_remove(aim_users, u); + aim_users = g_list_prepend(aim_users, u); } save_prefs(); } @@ -1128,22 +1142,22 @@ returns: 0 if successful -1 if no user was found that had a saved password */ -int do_auto_login (char *name) +int do_auto_login(char *name) { struct aim_user *u; char **names, **n, *first = NULL; int retval = -1; - if (name != NULL) { /* list of names given */ - names = g_strsplit (name, ",", 32); + if (name !=NULL) { /* list of names given */ + names = g_strsplit(name, ",", 32); for (n = names; *n != NULL; n++) { - printf ("user %s...\n", *n); + printf("user %s...\n", *n); u = find_user(*n, -1); - if (u) { /* found a user */ + if (u) { /* found a user */ if (first == NULL) - first = g_strdup (*n); + first = g_strdup(*n); if (u->options & OPT_USR_REM_PASS) { - printf ("got user %s\n", *n); + printf("got user %s\n", *n); retval = 0; serv_login(u); } @@ -1151,10 +1165,10 @@ } /* make the first user listed the default */ if (first != NULL) - set_first_user (first); - g_strfreev (names); - g_free (first); - } else { /* no name given, use default */ + set_first_user(first); + g_strfreev(names); + g_free(first); + } else { /* no name given, use default */ u = (struct aim_user *)aim_users->data; if (u->options & OPT_USR_REM_PASS) { retval = 0; @@ -1164,17 +1178,17 @@ return retval; } - + -int file_is_dir (char *path, GtkWidget *w) +int file_is_dir(char *path, GtkWidget *w) { struct stat st; char *name; if (stat(path, &st) == 0 && S_ISDIR(st.st_mode)) { /* append a / if needed */ - if (path[strlen(path)-1] != '/') - name = g_strconcat(path,"/",NULL); + if (path[strlen(path) - 1] != '/') + name = g_strconcat(path, "/", NULL); else name = g_strdup(path); gtk_file_selection_set_filename(GTK_FILE_SELECTION(w), name); @@ -1185,7 +1199,8 @@ return 0; } -GSList *message_split(char *message, int limit) { +GSList *message_split(char *message, int limit) +{ static GSList *ret = NULL; int lastgood = 0, curgood = 0, curpos = 0, len = strlen(message); gboolean intag = FALSE; @@ -1207,7 +1222,7 @@ ret = g_slist_append(ret, g_strdup(&message[lastgood])); return ret; } - + curgood = curpos = 0; intag = FALSE; while (curpos <= limit) { @@ -1237,7 +1252,8 @@ /* returns a string of the form ~/.gaim, where ~ is replaced by the user's home * dir. this string should be freed after it's used. Note that there is no * trailing slash after .gaim. */ -gchar* gaim_user_dir() { +gchar *gaim_user_dir() +{ return g_strjoin(G_DIR_SEPARATOR_S, g_get_home_dir(), ".gaim", NULL); } @@ -1248,8 +1264,9 @@ while (dest < end) { if (*src == '\n' && dest < end - 4) { strcpy(dest, "<BR>"); - src++; dest+=4; - } - else *dest++ = *src++; + src++; + dest += 4; + } else + *dest++ = *src++; } }
