view src/protocols/zephyr/error_message.c @ 5388:5d0df915ca09

[gaim-migrate @ 5764] This patch is Sofar's (Auke Kok) napster update warmenhovinated by me. So... the Napster PRPL works with Opennap servers now. Thanks Auke. There are a few places that still need a bit of work. Namely joining and parting chats. I don't have time to look at it right now, but search for XXX and // and you'll see the stuff that is relevant to it, if anyone wants to fix the memleak or two. For any potential Gaim hackers out there, a few notes: -Put all declarations at the top of a block--we're not all using C99 -Please don't use // comments, use /* */ (// is for C) -Try to use dynamic buffers rather than static buffers in most places. I think most of us Gaim people perfer dynamic rather than static. I wish oscar.c was this short. Or this clean. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 15 May 2003 21:43:42 +0000
parents 424a40f12a6c
children 347e456550e6
line wrap: on
line source

/*
 * $Header$
 * $Source$
 * $Locker$
 *
 * Copyright 1987 by the Student Information Processing Board
 * of the Massachusetts Institute of Technology
 *
 * For copyright info, see "mit-sipb-copyright.h".
 */

#include <sysdep.h>
#include "error_table.h"
#include "mit-sipb-copyright.h"
#include "com_err.h"

static const char rcsid[] =
    "$Header$";
static const char copyright[] =
    "Copyright 1986, 1987, 1988 by the Student Information Processing Board\nand the department of Information Systems\nof the Massachusetts Institute of Technology";

char *error_table_name_r __P((int, char *));

struct et_list * _et_list = (struct et_list *) NULL;

const char * error_message (code)
long	code;
{
    static char buf[COM_ERR_BUF_LEN];

    return(error_message_r(code, buf));
}

const char * error_message_r (code, buf)
long	code;
char	*buf;
{
    int offset;
    struct et_list *et;
    int table_num;
    int started = 0;
    char *cp, namebuf[6];

    offset = code & ((1<<ERRCODE_RANGE)-1);
    table_num = code - offset;
    if (!table_num)
	return strerror(offset);
    for (et = _et_list; et; et = et->next) {
	if (et->table->base == table_num) {
	    /* This is the right table */
	    if (et->table->n_msgs <= offset)
		break;
	    return(et->table->msgs[offset]);
	}
    }

    strcpy (buf, "Unknown code ");
    if (table_num) {
	strcat (buf, error_table_name_r (table_num, namebuf));
	strcat (buf, " ");
    }
    for (cp = buf; *cp; cp++)
	;
    if (offset >= 100) {
	*cp++ = '0' + offset / 100;
	offset %= 100;
	started++;
    }
    if (started || offset >= 10) {
	*cp++ = '0' + offset / 10;
	offset %= 10;
    }
    *cp++ = '0' + offset;
    *cp = '\0';
    return(buf);
}