X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Funix-misc.c;h=6a7328bd8738b54af9684e782e01f2ea01f92800;hb=6bd6c80f27c708f72aef1d850e48deaef832477e;hp=361015b4f67a3033a642b6a091507330763f0161;hpb=f55f9b851f59264d737d92c6277a87588c565d24;p=vpp.git diff --git a/src/vppinfra/unix-misc.c b/src/vppinfra/unix-misc.c index 361015b4f67..6a7328bd873 100644 --- a/src/vppinfra/unix-misc.c +++ b/src/vppinfra/unix-misc.c @@ -38,17 +38,20 @@ #include #include #include +#include #include #include #include /* writev */ #include #include /* for sprintf */ +#include -__thread uword __os_thread_index = 0; +__clib_export __thread uword __os_thread_index = 0; +__clib_export __thread uword __os_numa_index = 0; clib_error_t * -unix_file_n_bytes (char *file, uword * result) +clib_file_n_bytes (char *file, uword * result) { struct stat s; @@ -64,7 +67,7 @@ unix_file_n_bytes (char *file, uword * result) } clib_error_t * -unix_file_read_contents (char *file, u8 * result, uword n_bytes) +clib_file_read_contents (char *file, u8 * result, uword n_bytes) { int fd = -1; uword n_done, n_left; @@ -107,20 +110,20 @@ done: return error; } -clib_error_t * -unix_file_contents (char *file, u8 ** result) +__clib_export clib_error_t * +clib_file_contents (char *file, u8 ** result) { uword n_bytes; clib_error_t *error = 0; u8 *v; - if ((error = unix_file_n_bytes (file, &n_bytes))) + if ((error = clib_file_n_bytes (file, &n_bytes))) return error; v = 0; vec_resize (v, n_bytes); - error = unix_file_read_contents (file, v, n_bytes); + error = clib_file_read_contents (file, v, n_bytes); if (error) vec_free (v); @@ -130,6 +133,37 @@ unix_file_contents (char *file, u8 ** result) return error; } +__clib_export u8 * +clib_file_get_resolved_basename (char *fmt, ...) +{ + va_list va; + char *p, buffer[PATH_MAX]; + u8 *link, *s = 0; + int r; + + va_start (va, fmt); + link = va_format (0, fmt, &va); + va_end (va); + vec_add1 (link, 0); + + r = readlink ((char *) link, buffer, sizeof (buffer) - 1); + vec_free (link); + + if (r < 1) + return 0; + + buffer[r] = 0; + p = buffer + r - 1; + while (p > buffer && p[-1] != '/') + p--; + + while (p[0]) + vec_add1 (s, p++[0]); + + vec_add1 (s, 0); + return s; +} + clib_error_t * unix_proc_file_contents (char *file, u8 ** result) { @@ -157,7 +191,7 @@ unix_proc_file_contents (char *file, u8 ** result) if (bytes == 0) { - _vec_len (rv) = pos; + vec_set_len (rv, pos); break; } pos += bytes; @@ -170,7 +204,7 @@ unix_proc_file_contents (char *file, u8 ** result) void os_panic (void) __attribute__ ((weak)); -void +__clib_export void os_panic (void) { abort (); @@ -214,15 +248,13 @@ os_puts (u8 * string, uword string_length, uword is_error) ; } -void os_out_of_memory (void) __attribute__ ((weak)); -void +__clib_export __clib_weak void os_out_of_memory (void) { os_panic (); } -uword os_get_nthreads (void) __attribute__ ((weak)); -uword +__clib_export __clib_weak uword os_get_nthreads (void) { return 1;