convert: remove unnecessary/unused opal_size2int() function
The comments in the file even said "This file will hopefully not last long in the tree...".
Этот коммит содержится в:
родитель
4e318c9df1
Коммит
9d7171e8f1
@ -9,7 +9,7 @@
|
|||||||
# University of Stuttgart. All rights reserved.
|
# University of Stuttgart. All rights reserved.
|
||||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
# All rights reserved.
|
# 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 NVIDIA Corporation. All rights reserved.
|
||||||
# Copyright (c) 2013 Intel, Inc. All rights reserved
|
# Copyright (c) 2013 Intel, Inc. All rights reserved
|
||||||
# $COPYRIGHT$
|
# $COPYRIGHT$
|
||||||
@ -40,7 +40,6 @@ headers = \
|
|||||||
bit_ops.h \
|
bit_ops.h \
|
||||||
cmd_line.h \
|
cmd_line.h \
|
||||||
crc.h \
|
crc.h \
|
||||||
convert.h \
|
|
||||||
daemon_init.h \
|
daemon_init.h \
|
||||||
error.h \
|
error.h \
|
||||||
few.h \
|
few.h \
|
||||||
@ -78,7 +77,6 @@ libopalutil_la_SOURCES = \
|
|||||||
basename.c \
|
basename.c \
|
||||||
cmd_line.c \
|
cmd_line.c \
|
||||||
crc.c \
|
crc.c \
|
||||||
convert.c \
|
|
||||||
daemon_init.c \
|
daemon_init.c \
|
||||||
error.c \
|
error.c \
|
||||||
few.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 *) ∈
|
|
||||||
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
|
|
Загрузка…
x
Ссылка в новой задаче
Block a user