info.c
author viric@mandarina
Wed, 07 Oct 2009 21:20:12 +0200
changeset 283 f049b802be64
parent 267 11631dd11ff8
permissions -rw-r--r--
Updating version references to 0.6.6, and Changelog.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
165
7b914d4003c2 Fixing licenses in some files, and updating some documents.
viric@mandarina
parents: 147
diff changeset
     1
/*
7b914d4003c2 Fixing licenses in some files, and updating some documents.
viric@mandarina
parents: 147
diff changeset
     2
    Task Spooler - a task queue system for the unix user
267
11631dd11ff8 Updating copyright years in the source.
viric@mandarina
parents: 246
diff changeset
     3
    Copyright (C) 2007-2009  LluĂ­s Batlle i Rossell
165
7b914d4003c2 Fixing licenses in some files, and updating some documents.
viric@mandarina
parents: 147
diff changeset
     4
7b914d4003c2 Fixing licenses in some files, and updating some documents.
viric@mandarina
parents: 147
diff changeset
     5
    Please find the license in the provided COPYING file.
7b914d4003c2 Fixing licenses in some files, and updating some documents.
viric@mandarina
parents: 147
diff changeset
     6
*/
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
     7
#include <stdlib.h>
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
     8
#include <string.h>
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
     9
#include <unistd.h>
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    10
#include <stdio.h>
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    11
#include <stdarg.h>
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    12
#include <sys/time.h>
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    13
#include "main.h"
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    14
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    15
void pinfo_init(struct Procinfo *p)
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    16
{
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    17
    p->ptr = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    18
    p->nchars = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    19
    p->allocchars = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    20
    p->start_time.tv_sec = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    21
    p->start_time.tv_usec = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    22
    p->end_time.tv_sec = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    23
    p->end_time.tv_usec = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    24
    p->enqueue_time.tv_sec = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    25
    p->enqueue_time.tv_usec = 0;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    26
}
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    27
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    28
void pinfo_free(struct Procinfo *p)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    29
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    30
    if (p->ptr)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    31
    {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    32
        free(p->ptr);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    33
    }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    34
    p->nchars = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    35
    p->allocchars = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    36
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    37
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    38
void pinfo_addinfo(struct Procinfo *p, int maxsize, const char *line, ...)
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    39
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    40
    va_list ap;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    41
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    42
    int newchars = p->nchars + maxsize;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    43
    void *newptr;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    44
    int res;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    45
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    46
    va_start(ap, line);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    47
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    48
    /* Ask for more memory for the array, if needed */
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    49
    if (newchars > p->allocchars)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    50
    {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    51
        int newmem;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    52
        int newalloc;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    53
        newalloc = newchars;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    54
        newmem = newchars * sizeof(*p->ptr);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    55
        newptr = realloc(p->ptr, newmem);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    56
        if(newptr == 0)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    57
        {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    58
            warning("Cannot realloc more memory (%i) in pinfo_addline. "
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    59
                    "Not adding the content.", newmem);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    60
            return;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    61
        }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    62
        p->ptr = (char *) newptr;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    63
        p->allocchars = newalloc;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    64
    }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    65
246
239b28c0cca9 Adding information on the exit status (signal/exit code).
viric@mandarina
parents: 231
diff changeset
    66
    res = vsnprintf(p->ptr + p->nchars, (p->allocchars - p->nchars), line, ap);
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    67
    p->nchars += res; /* We don't store the final 0 */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    68
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    69
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    70
void pinfo_dump(const struct Procinfo *p, int fd)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    71
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    72
    if (p->ptr)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    73
    {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    74
        int res;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    75
        int rest = p->nchars;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    76
        while (rest > 0)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    77
        {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    78
            res = write(fd, p->ptr, rest);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    79
            if (res == -1)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    80
            {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    81
                warning("Cannot write more chars in pinfo_dump");
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    82
                return;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    83
            }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    84
            rest -= res;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    85
        }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    86
    }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    87
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    88
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    89
int pinfo_size(const struct Procinfo *p)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    90
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    91
    return p->nchars;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    92
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    93
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    94
void pinfo_set_enqueue_time(struct Procinfo *p)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    95
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    96
    gettimeofday(&p->enqueue_time, 0);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    97
    p->start_time.tv_sec = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    98
    p->start_time.tv_usec = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
    99
    p->end_time.tv_sec = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   100
    p->end_time.tv_usec = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   101
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   102
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   103
void pinfo_set_start_time(struct Procinfo *p)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   104
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   105
    gettimeofday(&p->start_time, 0);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   106
    p->end_time.tv_sec = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   107
    p->end_time.tv_usec = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   108
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   109
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   110
void pinfo_set_end_time(struct Procinfo *p)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   111
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   112
    gettimeofday(&p->end_time, 0);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   113
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   114
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   115
float pinfo_time_until_now(const struct Procinfo *p)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   116
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   117
    float t;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   118
    struct timeval now;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   119
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   120
    gettimeofday(&now, 0);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   121
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   122
    t = now.tv_sec - p->start_time.tv_sec;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   123
    t += (float) (now.tv_usec - p->start_time.tv_usec) / 1000000.;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   124
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   125
    return t;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   126
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   127
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   128
float pinfo_time_run(const struct Procinfo *p)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   129
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   130
    float t;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   131
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   132
    t = p->end_time.tv_sec - p->start_time.tv_sec;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   133
    t += (float) (p->end_time.tv_usec - p->start_time.tv_usec) / 1000000.;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   134
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   135
    return t;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents:
diff changeset
   136
}