コード例 #1
0
ファイル: test__gfal_posix_open.c プロジェクト: ic-hep/emi3
static void test_generic_open_simple(char* url_exist, char* url_noent, char* url_noaccess){
	int ret = -1;
	int fd;
	if(url_exist){
		fd = gfal_open(url_exist, O_RDONLY, 555);
		assert_true_with_message(fd >0 && gfal_posix_code_error()==0 && errno==0, " must be a valid open %d %d %d", fd, gfal_posix_code_error(), errno);
		gfal_posix_check_error();
		ret = gfal_close(fd);
		assert_true_with_message(fd !=0 && ret==0 && gfal_posix_code_error()==0 && errno==0, " must be a valid close %d %d %d", ret, gfal_posix_code_error(), errno);
		gfal_posix_check_error();	
		ret = gfal_close(fd);
		assert_true_with_message( ret==-1 && gfal_posix_code_error()==EBADF && errno==EBADF, " must be a bad descriptor %d %d %d", ret, gfal_posix_code_error(), errno);
	}
	
	if(url_noent){
		gfal_posix_clear_error();
		fd = gfal_open(url_noent, O_RDONLY, 555);
		assert_true_with_message( fd <=0 && gfal_posix_code_error()==ENOENT && errno==ENOENT, " must be a non existing file %d %d %d", ret, gfal_posix_code_error(), errno);
	}
	
	if(url_noaccess){	
		gfal_posix_clear_error();
		fd = gfal_open(url_noaccess, O_RDONLY, 555);
		assert_true_with_message( fd <=0 && gfal_posix_code_error()==EACCES && errno==EACCES, " must be a non accessible file %d %d %d", fd, gfal_posix_code_error(), errno);
		gfal_posix_clear_error();	
	}	
	
}
コード例 #2
0
ファイル: test__gfal_posix_open.c プロジェクト: ic-hep/emi3
void gfal2_test_open_posix_all_simple()
{
	int ret = gfal_open(NULL, O_RDONLY, 555);
	assert_true_with_message( ret < 0 && gfal_posix_code_error() == EFAULT && errno==EFAULT, " must be a EFAULT response");
	gfal_posix_clear_error();
	
}
コード例 #3
0
char *
lcg_compute_checksum (const char *file, enum gfal_cksm_type cksmtype, char *errbuf, int errbufsz)
{
	unsigned long cksm = 0;
	EVP_MD_CTX evpctx;
	int fd = -1;
	unsigned int nbread = 0;
	char buffer[GFAL_CKSM_BUFSIZE];
	char checksum[2 * EVP_MAX_MD_SIZE + 1];
	unsigned char cksm_raw[EVP_MAX_MD_SIZE + 1];
	int cksmsize = 0;

	if (file == NULL || cksmtype == GFAL_CKSM_NONE) {
		gfal_errmsg (errbuf, errbufsz, GFAL_ERRLEVEL_ERROR, "[LCG-UTIL][compute_checksum][] Invalid arguments");
		errno = EINVAL;
		return (NULL);
	}

	memset (checksum, 0, (2 * EVP_MAX_MD_SIZE + 1) * sizeof (char));

	if (cksmtype == GFAL_CKSM_CRC32 || cksmtype == GFAL_CKSM_ADLER32) {
		zlib_handle = dlopen ("libz.so", RTLD_LAZY);
		if (zlib_handle == NULL) {
			gfal_errmsg (errbuf, errbufsz, GFAL_ERRLEVEL_ERROR, "[LCG-UTIL][compute_checksum][] CRC32/ADLER32 need zlib!");
			errno = ELIBACC;
			return (NULL);
		}

		zlib_crc32 = (unsigned long (*) (unsigned long, const char *, unsigned int)) dlsym (zlib_handle, "crc32");
		zlib_adler32 = (unsigned long (*) (unsigned long, const char *, unsigned int)) dlsym (zlib_handle, "adler32");
		if (zlib_crc32 == NULL || zlib_adler32 == NULL) {
			gfal_errmsg (errbuf, errbufsz, GFAL_ERRLEVEL_ERROR, "[LCG-UTIL][compute_checksum][] invalid zlib library!");
			errno = ELIBBAD;
			return (NULL);
		}
	}

	fd = gfal_open (file, O_RDONLY, 0);
	if (fd < 0)
		return (NULL);

	if (cksmtype == GFAL_CKSM_ADLER32)
		cksm = zlib_adler32 (0L, 0, 0);
	else if (cksmtype == GFAL_CKSM_CRC32)
		cksm = zlib_crc32 (0L, 0, 0);
	else {
		if (cksmtype == GFAL_CKSM_MD5)
			EVP_DigestInit (&evpctx, EVP_md5());
		else
			EVP_DigestInit (&evpctx, EVP_sha1());
	}

	while ((nbread = (unsigned int) gfal_read (fd, buffer, GFAL_CKSM_BUFSIZE)) > 0) {
		if (cksmtype == GFAL_CKSM_ADLER32)
			cksm = zlib_adler32 (cksm, buffer, nbread);
		else if (cksmtype == GFAL_CKSM_CRC32)
			cksm = zlib_crc32 (cksm, buffer, nbread);
		else
			EVP_DigestUpdate(&evpctx, buffer, (size_t) nbread);
	}

	gfal_close (fd);

	if (nbread < 0)
		return (NULL);

	if (cksmtype == GFAL_CKSM_ADLER32 || cksmtype == GFAL_CKSM_CRC32) {
		sprintf(checksum, "%08x", (unsigned int) cksm);
	} else {
		char *p;
		int i;

		EVP_DigestFinal (&evpctx, cksm_raw, &cksmsize);

		for (i = 0, p = checksum; i < cksmsize; ++i, p = p + 2)
			sprintf(p, "%02x", cksm_raw[i]);
	}

	return (strdup (checksum));
}
コード例 #4
0
ファイル: gfal_testrw.c プロジェクト: adevress/gfal2
int main(int argc, char **argv)
{
   int fd;
   int i;
   char ibuf[BLKLEN];
   char obuf[BLKLEN];
   int rc;

   // gfal_set_verbose(GFAL_VERBOSE_TRACE | GFAL_VERBOSE_VERBOSE);	// switch Gfal in verbose mode
   if (argc != 2) {
	   fprintf (stderr, "usage: %s filename\n", argv[0]);
	   exit (1);
   }

   for (i = 0; i < BLKLEN; i++)
	   obuf[i] = i;

   printf ("creating file %s\n", argv[1]);
   if ((fd = gfal_open (argv[1], O_WRONLY|O_CREAT, 0644)) < 0) {
		gfal_posix_check_error();
		exit (1);
   }
   
	printf ("open successful, fd = %d\n", fd);

	if ((rc = gfal_write (fd, obuf, BLKLEN)) != BLKLEN) {
		gfal_posix_check_error();
		(void) gfal_close (fd);
		exit (1);
	}
	printf ("write successful\n");

	if ((rc = gfal_close (fd)) < 0) {
		gfal_posix_check_error();
		exit (1);
	}
	printf ("close successful\n");


	printf ("reading back %s\n", argv[1]);
	if ((fd = gfal_open (argv[1], O_RDONLY, 0)) < 0) {
		gfal_posix_check_error();
		exit (1);
	}
	printf ("open successful, fd = %d\n", fd);

	if ((rc = gfal_read (fd, ibuf, BLKLEN)) != BLKLEN) {
			gfal_posix_check_error();
			(void) gfal_close (fd);
			exit (1);
	   }
	   printf ("read successful\n");

	   if ((rc = gfal_close (fd)) < 0) {
			gfal_posix_check_error();
			exit (1);
	   }
	   printf ("close successful\n");

	   for (i = 0; i < BLKLEN; i++) {
		   if (ibuf[i] != obuf[i]) {
				fprintf (stderr, "compare failed at offset %d\n", i);
				exit (1);
		   }
	   }
	   printf ("compare successful\n");
	   exit (0);
}