int main (int argc, char *argv[]) { const char *filename = NULL; int isstdin = 0; const char *chars = "-#"; int i; unsigned int width, height; unsigned char *data; int x_hot, y_hot; int status; ProgramName = argv[0]; for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (arg[0] == '-') { switch (arg[1]) { case '\0': filename = NULL; continue; case 'c': if (++i >= argc) usage (); chars = argv[i]; continue; default: usage (); } } else { filename = arg; } } if (strlen (chars) != 2) { fprintf (stderr, "%s: bad character list \"%s\", must have exactly 2 characters\n", ProgramName, chars); exit (1); } if (!filename) { filename = copy_stdin (); isstdin = 1; } status = XmuReadBitmapDataFromFile (filename, &width, &height, &data, &x_hot, &y_hot); if (isstdin) (void) unlink (filename); /* don't need it anymore */ if (status != BitmapSuccess) { fprintf (stderr, "%s: unable to read bitmap from file \"%s\"\n", ProgramName, isstdin ? "(stdin)" : filename); exit (1); } print_scanline (width, height, data, chars); exit (0); }
static notmuch_bool_t insert_message (void *ctx, notmuch_database_t *notmuch, int fdin, const char *dir, tag_op_list_t *tag_ops) { char *tmppath; char *newpath; char *newdir; int fdout; char *cleanup_path; fdout = maildir_open_tmp_file (ctx, dir, &tmppath, &newpath, &newdir); if (fdout < 0) return FALSE; cleanup_path = tmppath; if (! copy_stdin (fdin, fdout)) goto FAIL; if (fsync (fdout) != 0) { fprintf (stderr, "Error: fsync failed: %s\n", strerror (errno)); goto FAIL; } close (fdout); fdout = -1; /* Atomically move the new message file from the Maildir 'tmp' directory * to the 'new' directory. We follow the Dovecot recommendation to * simply use rename() instead of link() and unlink(). * See also: http://wiki.dovecot.org/MailboxFormat/Maildir#Mail_delivery */ if (rename (tmppath, newpath) != 0) { fprintf (stderr, "Error: rename() failed: %s\n", strerror (errno)); goto FAIL; } cleanup_path = newpath; if (! sync_dir (newdir)) goto FAIL; /* Even if adding the message to the notmuch database fails, * the message is on disk and we consider the delivery completed. */ add_file_to_database (notmuch, newpath, tag_ops); return TRUE; FAIL: if (fdout >= 0) close (fdout); unlink (cleanup_path); return FALSE; }