/* $Header$
*
- * Utility routines used by the SMS extraction programs.
+ * Utility routines used by the MOIRA extraction programs.
+ *
+ * (c) Copyright 1988 by the Massachusetts Institute of Technology.
+ * For copying and distribution information, please see the file
+ * <mit-copyright.h>.
*/
+#include <mit-copyright.h>
#include <stdio.h>
#include <sys/time.h>
+#include <moira.h>
+#include <moira_site.h>
-char *malloc();
-
-
-/* Trim trailing spaces from a string by replacing one of them with a null.
- */
-trim(s)
-register char *s;
+fix_file(targetfile)
+char *targetfile;
{
- register char *p;
-
- for (p = s; *s; s++)
- if (*s != ' ')
- p = s;
- if (p != s) {
- if (*p == ' ')
- *p = 0;
- else
- p[1] = 0;
+ char oldfile[64], filename[64];
+
+ sprintf(oldfile, "%s.old", targetfile);
+ sprintf(filename, "%s~", targetfile);
+ if (rename(targetfile, oldfile) == 0) {
+ if (rename(filename, targetfile) < 0) {
+ rename(oldfile, targetfile);
+ perror("Unable to install new file (rename failed)\n");
+ fprintf(stderr, "Filename = %s\n", targetfile);
+ exit(MR_CCONFIG);
+ }
+ } else {
+ if (rename(filename, targetfile) < 0) {
+ perror("Unable to rename old file\n");
+ fprintf(stderr, "Filename = %s\n", targetfile);
+ exit(MR_CCONFIG);
+ }
}
+ unlink(oldfile);
}
-/* return a "saved" copy of the string */
-
-char *strsave(s)
+char *dequote(s)
register char *s;
{
- register char *r;
-
- r = malloc(strlen(s) + 1);
- strcpy(r, s);
- return(r);
-}
-
-
-
-/* ingres_date_and_time: passed a unix time_t, returns a string that ingres
- * can parse to obtain that time.
- */
-
-static char *month_name[] = {
- "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct",
- "nov", "dec"
- };
-
-
-char *ingres_date(), *ingres_time();
-
-char *ingres_date_and_time(l)
-long l;
-{
- char *ans = NULL, *date, *time;
-
- if ((date = ingres_date(l)) && (time = ingres_time(l))) {
- char buf[BUFSIZ];
- sprintf(buf, "%s %s", date, time);
- ans = strsave(buf);
- }
- if (date)
- free(date);
- if (time)
- free(time);
- return ans;
+ char *last = s;
+
+ while (*s) {
+ if (*s == '"')
+ *s = '\'';
+ else if (*s != ' ')
+ last = s;
+ s++;
+ }
+ if (*last == ' ')
+ *last = '\0';
+ else
+ *(++last) = '\0';
+ return(s);
}
-char *ingres_time(t)
- long t;
-{
- struct tm *tm;
-
- if (t == (long) 0)
- (void) time(&t);
- if ((tm = localtime(&t)) == (struct tm *) NULL) {
- return NULL;
- } else {
- char buf[BUFSIZ];
- sprintf(buf, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min,
- tm->tm_sec);
- return strsave(buf);
- }
-}
-
-char *ingres_date(t)
- long t;
+db_error(code)
+int code;
{
- struct tm *tm;
-
- if (t == (long) 0)
- (void) time(&t);
-
- if ((tm = localtime(&t)) == (struct tm *) NULL) {
- return NULL;
- } else {
- char buf[BUFSIZ];
-
- sprintf(buf, "%02d-%3.3s-%04d", tm->tm_mday,
- month_name[tm->tm_mon], 1900 + tm->tm_year);
- return strsave(buf);
- }
+ extern char *whoami;
+
+ com_err(whoami, MR_INGRES_ERR, " code %d\n", code);
+ if (code == -49900 || code == -37000 || code == 17700)
+ exit(MR_DEADLOCK);
+ critical_alert("DCM", "%s build encountered DATABASE ERROR %d",
+ whoami, code);
+ exit(MR_INGRES_ERR);
}
-