File: errmap.cpp

package info (click to toggle)
watchman 4.9.0-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,992 kB
  • sloc: cpp: 27,459; python: 6,538; java: 3,404; php: 3,257; ansic: 2,803; javascript: 1,116; makefile: 671; ruby: 364; sh: 124; xml: 102; lisp: 4
file content (46 lines) | stat: -rw-r--r-- 1,605 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* Copyright 2012-present Facebook, Inc.
 * Licensed under the Apache License, Version 2.0 */

#include "watchman.h"

const char *win32_strerror(DWORD err) {
  static __declspec(thread) char msgbuf[1024];

  FormatMessageA(
      FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
      NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
      msgbuf, sizeof(msgbuf)-1, NULL);

  return msgbuf;
}

int map_win32_err(DWORD err) {
  switch (err) {
    case ERROR_SUCCESS: return 0;
    case ERROR_ALREADY_EXISTS: return EEXIST;
    case ERROR_TIMEOUT: return ETIMEDOUT;
    case WAIT_TIMEOUT: return ETIMEDOUT;
    case WAIT_IO_COMPLETION: return EINTR;
    case ERROR_INVALID_FUNCTION: return ENOSYS;
    case ERROR_PATH_NOT_FOUND: return ENOTDIR;
    case ERROR_FILE_NOT_FOUND: return ENOENT;
    case ERROR_TOO_MANY_OPEN_FILES: return EMFILE;
    case ERROR_ACCESS_DENIED: return EACCES;
    case ERROR_INVALID_HANDLE: return EBADF;
    case ERROR_NOT_ENOUGH_MEMORY: return ENOMEM;
    case ERROR_INVALID_ACCESS: return EACCES;
    case ERROR_INVALID_DATA: return EINVAL;
    case ERROR_NO_MORE_FILES: return EMFILE;
    case ERROR_WRITE_PROTECT: return EPERM;
    case ERROR_NOT_SUPPORTED: return ENOSYS;
    case ERROR_DEV_NOT_EXIST: return ENOENT;
    case ERROR_FILE_EXISTS: return EEXIST;
    case ERROR_INVALID_PARAMETER: return EINVAL;
    case ERROR_NO_PROC_SLOTS: return EAGAIN;
    case ERROR_BROKEN_PIPE: return EPIPE;
    case ERROR_DISK_FULL: return ENOSPC;
    case ERROR_IO_INCOMPLETE: return EAGAIN;
    case ERROR_IO_PENDING: return EAGAIN;
    default: return EINVAL;
  }
}