[DGD] (mis)adventures with extensions

chris . psych_mayo at hotmail.com
Wed Sep 26 11:52:35 CEST 2007


I have never written in c before (lpc all my life), but after a crash course educational binge i managed to concoct what i think may be sound c code.  I think the problem is my understanding of the extension interface.

I made a function write_bin(string filepath, string text).  It writes a binary file from text to the file in filepath.
When i send input with a path, (from my / root in this case), it writes a binary file, but not where i tell it to, but in /dgd/mud/.  It doesnt use the filename i gave it, but uses the second argument input for a filename.  The code for the extension is as follows:

# include 
# include "dgd_ext.h"

/* write_bin(string path, string text) */
static void write_bin(DGD_FRAME_T f, int nargs, DGD_VALUE_T *retval) {
  DGD_VALUE_T val;
  DGD_STRING_T path;
  DGD_STRING_T text;
  char *arg0;
  char *arg1;
  unsigned int i;
  FILE *buffy;
  /* fetch the arguments */
  val = DGD_FRAME_ARG(f, nargs, 0);
  path = DGD_STRING_GETVAL(val);
  val = DGD_FRAME_ARG(f, nargs, 1);
  text = DGD_STRING_GETVAL(val);
  /* make copies */
  path = DGD_STRING_NEW(DGD_STRING_TEXT(path), DGD_STRING_LENGTH(path));
  arg0 = DGD_STRING_TEXT(path);
  text = DGD_STRING_NEW(DGD_STRING_TEXT(text), DGD_STRING_LENGTH(text));
  arg1 = DGD_STRING_TEXT(text);
  buffy = fopen(arg1,"ab");
  fwrite(arg1,sizeof(arg1[0]), sizeof(arg1),buffy);
  fclose(buffy);
  }

static char write_bin_proto[] = { DGD_TYPE_VOID, DGD_TYPE_STRING, DGD_TYPE_STRING, 0 };
static DGD_EXTKFUN_T kf[1] = {
    "write_bin",
    write_bin_proto,
    &write_bin
};

void extension_init(void)
{
    DGD_EXT_KFUN(kf, 1);
}

Thank you for your time,
-chris
_________________________________________________________________
Connect to the next generation of MSN Messenger 
http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-us&source=wlmailtagline



More information about the DGD mailing list