Back to index

citadel  8.12
aidepost.c File Reference
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
#include <errno.h>
#include <string.h>
#include <time.h>
#include "citadel.h"
#include "citadel_dirs.h"
#include "snprintf.h"

Go to the source code of this file.


static void ap_make_message (FILE *fp, char *target_room, char *author, char *subject)
int main (int argc, char **argv)

Function Documentation

static void ap_make_message ( FILE *  fp,
char *  target_room,
char *  author,
char *  subject 
) [static]

Definition at line 33 of file aidepost.c.

       int a;
       long bb, cc;
       time_t now;
       putc(255, fp);
       putc(MES_NORMAL, fp);
       putc(1, fp);
       fprintf(fp, "Proom_aide");
       putc(0, fp);
       fprintf(fp, "T%ld", (long)now);
       putc(0, fp);
       fprintf(fp, "A%s", author);
       putc(0, fp);
       fprintf(fp, "O%s", target_room);
       putc(0, fp);
       if (strlen(subject) > 0) {
              fprintf(fp, "U%s%c", subject, 0);
       putc('M', fp);
       bb = ftell(fp);
       while (a = getc(stdin), a > 0) {
              if (a != 8)
                     putc(a, fp);
              else {
                     cc = ftell(fp);
                     if (cc != bb)
                            fseek(fp, (-1L), 1);
       putc(0, fp);
       putc(0, fp);
       putc(0, fp);

Here is the caller graph for this function:

int main ( int  argc,
char **  argv 

Definition at line 70 of file aidepost.c.

       char tempspool[64];
       char target_room[ROOMNAMELEN];
       char author[64];
       char subject[256];
       FILE *tempfp, *spoolfp;
       int ch;
       int i;
       int relh=0;
       int home=0;
       char relhome[PATH_MAX]="";
       char ctdldir[PATH_MAX]=CTDLDIR;

       calc_dirs_n_files(relh, home, relhome, ctdldir, 0);

       strcpy(target_room, "Aide");
       strcpy(author, "Citadel");
       strcpy(subject, "");
       for (i=1; i<argc; ++i) {
              if (!strncasecmp(argv[i], "-r", 2)) {
                     strncpy(target_room, &argv[i][2], sizeof(target_room));
                     target_room[sizeof(target_room)-1] = 0;
              else if (!strncasecmp(argv[i], "-a", 2)) {
                     strncpy(author, &argv[i][2], sizeof(author));
                     author[sizeof(author)-1] = 0;
              else if (!strncasecmp(argv[i], "-s", 2)) {
                     strncpy(subject, &argv[i][2], sizeof(subject));
                     subject[sizeof(subject)-1] = 0;
              } else {
                     fprintf(stderr, "%s: usage: %s "
                                   "[-rTargetRoom] [-aAuthor] [-sSubject]\n",
                            argv[0], argv[0]);

       snprintf(tempspool, sizeof tempspool, "%s/ap.%04x.%08lx", ctdl_netin_dir, getpid(), time(NULL));
       unlink(tempspool);   /* unlinking it for now, keeps it from being posted prematurely */

       tempfp = fopen(tempspool, "w+b");
       if (tempfp == NULL) {
              perror("cannot open temp file");

       /* Generate a message from stdin */
       ap_make_message(tempfp, target_room, author, subject);

       /* Copy it to a new temp file in the spool directory */

       spoolfp = fopen(tempspool, "wb");
       if (spoolfp == NULL) {
              perror("cannot open spool file");
       while (ch = getc(tempfp), (ch >= 0)) {
              putc(ch, spoolfp);


Here is the call graph for this function: