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.
|
||||
# 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 *) ∈
|
||||
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