blob: 15af887167e45ef2a968126102880a113a437884 [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2000 Silicon Graphics, Inc.
* All Rights Reserved.
*/
/************
64 bits in a Cray word
12345678901234567890123456789012
1234567890123456789012345678901234567890123456789012345678901234
________________________________________________________________
< pid >< word-offset in file (same #) >< pid >
1234567890123456789012345678901234567890123456789012345678901234
________________________________________________________________
< pid >< offset in file of this word >< pid >
8 bits to a bytes == character
NBPW 8
************/
#include <stdio.h>
#include <sys/param.h>
#ifdef UNIT_TEST
#include <unistd.h>
#include <stdlib.h>
#endif
static char Errmsg[80];
#define LOWER16BITS(X) (X & 0177777)
#define LOWER32BITS(X) (X & 0xffffffff)
/***
#define HIGHBITS(WRD, bits) ( (-1 << (64-bits)) & WRD)
#define LOWBITS(WRD, bits) ( (-1 >> (64-bits)) & WRD)
****/
#define NBPBYTE 8 /* number bits per byte */
#ifndef DEBUG
#define DEBUG 0
#endif
/***********************************************************************
*
*
* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 15 bytes
* 1234567890123456789012345678901234567890123456789012345678901234 bits
* ________________________________________________________________ 1 word
* < pid >< offset in file of this word >< pid >
*
* the words are put together where offset zero is the start.
* thus, offset 16 is the start of the second full word
* Thus, offset 8 is in middle of word 1
***********************************************************************/
int
datapidgen(pid, buffer, bsize, offset)
int pid;
char *buffer;
int bsize;
int offset;
{
return -1; /* not support on non-64 bits word machines */
}
/***********************************************************************
*
*
***********************************************************************/
int
datapidchk(pid, buffer, bsize, offset, errmsg)
int pid;
char *buffer;
int bsize;
int offset;
char **errmsg;
{
if ( errmsg != NULL ) {
*errmsg = Errmsg;
}
sprintf(Errmsg, "Not supported on this OS.");
return 0;
} /* end of datapidchk */
#if UNIT_TEST
/***********************************************************************
* main for doing unit testing
***********************************************************************/
int
main(ac, ag)
int ac;
char **ag;
{
int size=1234;
char *buffer;
int ret;
char *errmsg;
if ((buffer=(char *)malloc(size)) == NULL ) {
perror("malloc");
exit(2);
}
datapidgen(-1, buffer, size, 3);
/***
fwrite(buffer, size, 1, stdout);
fwrite("\n", 1, 1, stdout);
****/
printf("datapidgen(-1, buffer, size, 3)\n");
ret=datapidchk(-1, buffer, size, 3, &errmsg);
printf("datapidchk(-1, buffer, %d, 3, &errmsg) returned %d %s\n",
size, ret, errmsg);
ret=datapidchk(-1, &buffer[1], size-1, 4, &errmsg);
printf("datapidchk(-1, &buffer[1], %d, 4, &errmsg) returned %d %s\n",
size-1, ret, errmsg);
buffer[25]= 0x0;
buffer[26]= 0x0;
buffer[27]= 0x0;
buffer[28]= 0x0;
printf("changing char 25-28\n");
ret=datapidchk(-1, &buffer[1], size-1, 4, &errmsg);
printf("datapidchk(-1, &buffer[1], %d, 4, &errmsg) returned %d %s\n",
size-1, ret, errmsg);
printf("------------------------------------------\n");
datapidgen(getpid(), buffer, size, 5);
/*******
fwrite(buffer, size, 1, stdout);
fwrite("\n", 1, 1, stdout);
******/
printf("\ndatapidgen(getpid(), buffer, size, 5)\n");
ret=datapidchk(getpid(), buffer, size, 5, &errmsg);
printf("datapidchk(getpid(), buffer, %d, 5, &errmsg) returned %d %s\n",
size, ret, errmsg);
ret=datapidchk(getpid(), &buffer[1], size-1, 6, &errmsg);
printf("datapidchk(getpid(), &buffer[1], %d, 6, &errmsg) returned %d %s\n",
size-1, ret, errmsg);
buffer[25]= 0x0;
printf("changing char 25\n");
ret=datapidchk(getpid(), &buffer[1], size-1, 6, &errmsg);
printf("datapidchk(getpid(), &buffer[1], %d, 6, &errmsg) returned %d %s\n",
size-1, ret, errmsg);
exit(0);
}
#endif