{"thread":{"id":"1101","subject":"[PATCH] Use MAP_FAILED instead of double cast","startedAt":"2005-07-04T03:05:31Z","lastAt":"2005-07-04T03:05:31Z","messageCount":1,"participants":["Pavel Roskin"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"5621","messageId":"1120446331.1265.30.camel@dv","threadId":"1101","inReplyTo":null,"subject":"[PATCH] Use MAP_FAILED instead of double cast","fromName":"Pavel Roskin","fromEmail":"proski@gnu.org","sentAt":"2005-07-04T03:05:31Z","receivedAt":"2005-07-04T03:05:31Z","isPatch":true,"sender":{"key":"proski@gnu.org","avatar":null},"body":"Hello!\n\nI have found some really ugly code to used to check the result of\nmmap():\n\nif (-1 == (int)(long)map)\n\treturn;\n\nDouble cast almost always indicates that something fishy is going on.\nIndeed, mmap() could (in theory) return 0xffffffff on a 64-bit platform,\nand that would be misinterpreted as a failure.\n\nThere is a preprocessor symbol MAP_FAILED that should be used instead.\nIt's used already in some places, so let's use it consistently.\n\nSigned-off-by: Pavel Roskin <proski@gnu.org>\n\ndiff --git a/diffcore-order.c b/diffcore-order.c\n--- a/diffcore-order.c\n+++ b/diffcore-order.c\n@@ -28,7 +28,7 @@ static void prepare_order(const char *or\n \t}\n \tmap = mmap(NULL, st.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);\n \tclose(fd);\n-\tif (-1 == (int)(long)map)\n+\tif (map == MAP_FAILED)\n \t\treturn;\n \tendp = map + st.st_size;\n \tfor (pass = 0; pass < 2; pass++) {\ndiff --git a/local-pull.c b/local-pull.c\n--- a/local-pull.c\n+++ b/local-pull.c\n@@ -54,7 +54,7 @@ int fetch(unsigned char *sha1)\n \t\t}\n \t\tmap = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, ifd, 0);\n \t\tclose(ifd);\n-\t\tif (-1 == (int)(long)map) {\n+\t\tif (map == MAP_FAILED) {\n \t\t\tfprintf(stderr, \"cannot mmap %s\\n\", filename);\n \t\t\treturn -1;\n \t\t}\ndiff --git a/read-cache.c b/read-cache.c\n--- a/read-cache.c\n+++ b/read-cache.c\n@@ -376,7 +376,7 @@ int read_cache(void)\n \t\t\tmap = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);\n \t}\n \tclose(fd);\n-\tif (-1 == (int)(long)map)\n+\tif (map == MAP_FAILED)\n \t\treturn error(\"mmap failed\");\n \n \thdr = map;\ndiff --git a/sha1_file.c b/sha1_file.c\n--- a/sha1_file.c\n+++ b/sha1_file.c\n@@ -507,7 +507,7 @@ static void *map_sha1_file_internal(cons\n \t}\n \tmap = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);\n \tclose(fd);\n-\tif (-1 == (int)(long)map)\n+\tif (map == MAP_FAILED)\n \t\treturn NULL;\n \t*size = st.st_size;\n \treturn map;\n@@ -1293,7 +1293,7 @@ int index_fd(unsigned char *sha1, int fd\n \tif (size)\n \t\tbuf = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);\n \tclose(fd);\n-\tif ((int)(long)buf == -1)\n+\tif (buf == MAP_FAILED)\n \t\treturn -1;\n \n \tret = write_sha1_file(buf, size, \"blob\", sha1);\n\n\n-- \nRegards,\nPavel Roskin\n"}]}