#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// This function counts the number of digit places in 'pid'
int pid_digit_places(int pid)
{
int n = pid;
int places = 0;
while (n)
n /= 10;
places++;
return places;
}
char *construct_path(int pid, char *dir)
{
// get count of places in pid
int places = pid_digit_places(pid);
char *pid_str
= calloc(places
, sizeof(char));
// create string of pid
char *proc = "/proc/";
size_t dlen
= strlen(dir
) + 1; char *path
= calloc(plen
+ dlen
+ places
, sizeof(char));
return path;
}
void fd_walk(int pid)
{
char *fd = "/fd/";
char *fdpath = construct_path(pid, fd);
// prints "/proc/573/fd/ - as expected
printf("Before: %s\n", fdpath
);
// shows a length of 13
// prints "/proc/573/fd" no trailing "/"
printf("Copied Str: %s\n", test
);
//shows a length of 13 though
// prints "/proc/573/fd" no trailing "/" now
printf("After: %s\n", fdpath
);
// still shows length of 13
}
int main(void)
{
// integer to create path around
int pid = 573;
fd_walk(pid);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKLy8gVGhpcyBmdW5jdGlvbiBjb3VudHMgdGhlIG51bWJlciBvZiBkaWdpdCBwbGFjZXMgaW4gJ3BpZCcKaW50IHBpZF9kaWdpdF9wbGFjZXMoaW50IHBpZCkKewogICAgaW50IG4gPSBwaWQ7CiAgICBpbnQgcGxhY2VzID0gMDsKICAgIHdoaWxlIChuKQogICAgICAgIG4gLz0gMTA7CiAgICAgICAgcGxhY2VzKys7CiAgICByZXR1cm4gcGxhY2VzOwp9CgpjaGFyICpjb25zdHJ1Y3RfcGF0aChpbnQgcGlkLCBjaGFyICpkaXIpCnsKICAgIC8vIGdldCBjb3VudCBvZiBwbGFjZXMgaW4gcGlkCiAgICBpbnQgcGxhY2VzID0gcGlkX2RpZ2l0X3BsYWNlcyhwaWQpOyAKICAgIGNoYXIgKnBpZF9zdHIgPSBjYWxsb2MocGxhY2VzLCBzaXplb2YoY2hhcikpOyAKCiAgICAvLyBjcmVhdGUgc3RyaW5nIG9mIHBpZCAKICAgIHNwcmludGYocGlkX3N0ciwgIiVkIiwgcGlkKTsgCgogICAgY2hhciAqcHJvYyA9ICIvcHJvYy8iOwogICAgc2l6ZV90IHBsZW4gPSBzdHJsZW4ocHJvYyk7CiAgICBzaXplX3QgZGxlbiA9IHN0cmxlbihkaXIpICsgMTsKICAgIGNoYXIgKnBhdGggPSBjYWxsb2MocGxlbiArIGRsZW4gKyBwbGFjZXMsIHNpemVvZihjaGFyKSk7CgogICAgc3RyY2F0KHBhdGgsIHByb2MpOwogICAgc3RyY2F0KHBhdGgsIHBpZF9zdHIpOwogICAgc3RyY2F0KHBhdGgsIGRpcik7CgogICAgcmV0dXJuIHBhdGg7Cn0KCnZvaWQgZmRfd2FsayhpbnQgcGlkKQp7CiAgICBjaGFyICpmZCA9ICIvZmQvIjsKICAgIGNoYXIgKmZkcGF0aCA9IGNvbnN0cnVjdF9wYXRoKHBpZCwgZmQpOwoKICAgIC8vIHByaW50cyAiL3Byb2MvNTczL2ZkLyAtIGFzIGV4cGVjdGVkICAgIAogICAgcHJpbnRmKCJCZWZvcmU6ICVzXG4iLCBmZHBhdGgpOyAKCiAgICAvLyBzaG93cyBhIGxlbmd0aCBvZiAxMwogICAgcHJpbnRmKCJTaXplIEJlZm9yZTogJWRcbiIsIChpbnQpc3RybGVuKGZkcGF0aCkpOyAgCgoKICAgIGNoYXIgKnRlc3QgPSBjYWxsb2Moc3RybGVuKGZkcGF0aCkgKyAxLCBzaXplb2YoY2hhcikpOwogICAgc3RyY3B5KHRlc3QsIGZkcGF0aCk7CgogICAgLy8gcHJpbnRzICIvcHJvYy81NzMvZmQiIG5vIHRyYWlsaW5nICIvIgogICAgcHJpbnRmKCJDb3BpZWQgU3RyOiAlc1xuIiwgdGVzdCk7IAoKICAgIC8vc2hvd3MgYSBsZW5ndGggb2YgMTMgdGhvdWdoCiAgICBwcmludGYoIkNvcGllZCBTaXplOiAlZFxuIiwgKGludClzdHJsZW4odGVzdCkpOyAKCiAgICAvLyBwcmludHMgIi9wcm9jLzU3My9mZCIgbm8gdHJhaWxpbmcgIi8iIG5vdyAgICAKICAgIHByaW50ZigiQWZ0ZXI6ICVzXG4iLCBmZHBhdGgpOyAKCiAgICAvLyBzdGlsbCBzaG93cyBsZW5ndGggb2YgMTMKICAgIHByaW50ZigiU2l6ZSBBZnRlcjogJWRcbiIsIChpbnQpc3RybGVuKGZkcGF0aCkpOyAgICAgICAgIAp9CgppbnQgbWFpbih2b2lkKQp7CiAgICAvLyBpbnRlZ2VyIHRvIGNyZWF0ZSBwYXRoIGFyb3VuZAogICAgaW50IHBpZCA9IDU3MzsgCiAgICBmZF93YWxrKHBpZCk7CiAgICByZXR1cm4gMDsKfQ==