1
1

convert: remove unnecessary/unused opal_size2int() function

The comments in the file even said "This file will hopefully not last
long in the tree...".
Этот коммит содержится в:
Jeff Squyres 2015-02-16 07:17:33 -08:00
родитель 4e318c9df1
Коммит 9d7171e8f1
3 изменённых файлов: 1 добавлений и 193 удалений

Просмотреть файл

@ -9,7 +9,7 @@
# University of Stuttgart. All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2007-2010 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2007-2015 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2013 NVIDIA Corporation. All rights reserved.
# Copyright (c) 2013 Intel, Inc. All rights reserved
# $COPYRIGHT$
@ -40,7 +40,6 @@ headers = \
bit_ops.h \
cmd_line.h \
crc.h \
convert.h \
daemon_init.h \
error.h \
few.h \
@ -78,7 +77,6 @@ libopalutil_la_SOURCES = \
basename.c \
cmd_line.c \
crc.c \
convert.c \
daemon_init.c \
error.c \
few.c \

Просмотреть файл

@ -1,112 +0,0 @@
/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2006 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "opal_config.h"
#include <stdio.h>
#include <stdlib.h>
#include "opal/util/convert.h"
#include "opal/constants.h"
#if SIZEOF_SIZE_T <= SIZEOF_INT
/*
* This is the [short] case where we can just cast and we're all good
*/
int opal_size2int(size_t in, int *out, bool want_check)
{
*out = (int)in;
return OPAL_SUCCESS;
}
#else
/*
* The rest of the file handles the case where
* sizeof(size_t)>sizeof(int).
*/
static bool init_done = false;
static unsigned int int_pos = 0;
static void opal_size2int_init(void);
static void warn(void);
int opal_size2int(size_t in, int *out, bool want_check)
{
int *pos = (int *) &in;
unsigned int i;
if (!init_done) {
opal_size2int_init();
}
*out = pos[int_pos];
if (want_check) {
/* Remember that size_t is unsigned, so we don't need to check
for when in < 0 (in which case the internal checks would be
slightly different) */
for (i = 0; i < (sizeof(in) / sizeof(*out)); ++i) {
if (i != int_pos) {
if (pos[i] != 0) {
warn();
return OPAL_ERR_NOT_IMPLEMENTED;
}
}
}
}
return OPAL_SUCCESS;
}
static void opal_size2int_init(void)
{
size_t bogus = 1;
int *i = (int *) &bogus;
for (int_pos = 0; int_pos < (sizeof(bogus) / sizeof(int)); ++int_pos) {
if (i[int_pos] == 1) {
break;
}
}
init_done = true;
}
static void warn(void)
{
#if OPAL_ENABLE_DEBUG
/* Developer builds */
fprintf(stderr, "WARNING: A size_t value was attempted to be cast to an int (sizeof(size_t) == %ld, sizeof(int) == %ld), but data was lost in the conversion. This should never happen (i.e., we should never try to convert a value that will be 'too big'). Since this is a developer build, I'm going to abort, and you can check the corefile. Enjoy.\n", (long) sizeof(size_t), (long) sizeof(int));
abort();
#else
static bool warned = false;
if (!warned) {
fprintf(stderr, "Open MPI WARNING: A bad cast (size_t->int) occurred.\n");
fprintf(stderr, "Please inform the Open MPI developers. This message will not repeat.\n");
fprintf(stderr, "Attempting to continue (no guarantees about correctness...\n");
warned = true;
}
#endif
}
#endif

Просмотреть файл

@ -1,78 +0,0 @@
/*
* Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2006 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/**
* @file
*
* This file will hopefully not last long in the tree, but it's
* unfortunately necessary for now.
*
* There are multiple places in the code base where we need to safely
* convert from a size_t to an int. However, on some platforms,
* sizeof(size_t) is larger than sizeof(int), so casting from size_t
* -> int will result in a compiler warning and potentially data
* truncation.
*
* But, unfortunately, we still need to do it. But we definitely do
* not want compiler warnings. So when sizeof(size_t)>sizeof(int),
* the solution is the treat the size_t value like an array and
* dereference the appropriate nibble and cast that to an int (which
* accounts for both big and little endian machines).
*
* Most places in the code where this casting must occur are because
* collision of APIs (e.g., one API requires a size_t and another API
* requires an int. And in most places, we're not going to overflow
* the int when casting down into it (e.g., it's the result of a
* strlen -- if that buffer is larger than MAX_INT, we've got other problems!).
*
* BUT -- the whole premise of casting down to an int is dangerous.
* So we provide extra protection here to detect overflow situations
* and print out appropriate warnings. So if this situation ever
* occurs, we'll still overflow, but we'll have a good indication that
* it's happening, and where.
*/
#ifndef OPAL_CONVERT_H
#define OPAL_CONVERT_H
#include "opal_config.h"
BEGIN_C_DECLS
/**
* Convert a size_t to an int.
*
* @param in The size_t value to be converted
* @param out The output int value.
* @param want_check Whether to check for truncation or not
*
* @returns OPAL_SUCESS If all went well
* @returns OPAL_NOT_SUPPORTED if the size_t value was truncated
*
* The conversion will always occur. However, if the size_t value was
* truncated (i.e., sizeof(size_t) > sizeof(int), and the cast down to
* the int actually changed the value), OPAL_NOT_SUPPORTED will be
* returned.
*
* On platforms where sizeof(size_t) <= sizeof(int), this function
* will aways return OPAL_SUCCESS.
*/
OPAL_DECLSPEC int opal_size2int(size_t in, int *out, bool want_check) __opal_attribute_nonnull__(2);
END_C_DECLS
#endif